{"version":3,"file":"static/js/28.c1c44894648011fcfd82.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/validate-cart.ts?cd50","webpack://Msdyn365.Commerce.Online/./src/Common/get-product.ts?0a21","webpack://Msdyn365.Commerce.Online/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://Msdyn365.Commerce.Online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.tsx?d4e4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.view.tsx?d8c2","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.description.tsx?840c","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-message.tsx?8ca3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-title.tsx?f7e7","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.radio-button.tsx?9df9","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/address-detail-item.tsx?d9a2","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-date.tsx?bd12","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-options-grp.tsx?3a15","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-options-radio.tsx?045f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/get-line-items.tsx?e389","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/checkout-delivery-options.tsx?6764","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?1e75","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-form.tsx?4540","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-item.tsx?d186","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-list.tsx?a3f3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/title.tsx?3b2f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/checkout-gift-card.tsx?8fc3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/checkout-gift-card.view.tsx?d99f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-input.tsx?cadb","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-label.tsx?e02b","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-text.tsx?895a","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/checkout-loyalty.tsx?8b4b","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/checkout-loyalty.view.tsx?b79f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/checkout.tsx?6737","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/checkout.view.tsx?e4cc","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/alert.tsx?cb1e","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-invoice-payment-summary.tsx?9549","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-line-items.tsx?92f8","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-order-summary.tsx?4a81","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/guided-card.tsx?58e0","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/guided-form.tsx?f018","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/place-order-button.tsx?9b41","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/methods/checkout.ts?7b6b","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/methods/place-order.ts?5aa0","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/components/get-form.tsx?e249","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/components/get-item.tsx?4862","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/gift-card-balance-check.tsx?d1f8","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/gift-card-balance-check.view.tsx?a0c9","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/components/cartlineitem.component.tsx?eb8c","webpack://Msdyn365.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/helper.ts?b895","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://Msdyn365.Commerce.Online/./src/order-summary-lineitem.tsx?8a98","webpack://Msdyn365.Commerce.Online/./src/modules/product-collection/product-collection.tsx?4008","webpack://Msdyn365.Commerce.Online/./src/modules/product-collection/product-collection.view.tsx?5d36","webpack://Msdyn365.Commerce.Online/./src/modules/ratings-histogram/component/components.tsx?f324","webpack://Msdyn365.Commerce.Online/./src/modules/ratings-histogram/ratings-histogram.tsx?f6bc","webpack://Msdyn365.Commerce.Online/./src/modules/ratings-histogram/ratings-histogram.view.tsx?5bff","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/utilities.ts?8569","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/choice-summary.tsx?3f71","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/error-message.tsx?6302","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/feature-search-result-item.tsx?71fa","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/link.tsx?52c2","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/modal.tsx?d78e","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/product-search-result-items.tsx?5174","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/range-refine-item.tsx?6288","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/refine-item.tsx?a594","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/range-refine-item-input.tsx?09aa","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/refine-submenu.tsx?1292","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/separator.tsx?4ea6","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/title.tsx?c269","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.tsx?7500","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://Msdyn365.Commerce.Online/./src/modules/social-share-item/social-share-item.tsx?bbcb","webpack://Msdyn365.Commerce.Online/./src/modules/social-share-item/social-share-item.view.tsx?2d3e","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/cart-icon.view.tsx?7ec9","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/media-gallery.view.tsx?7624","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/ratings-histogram.view.tsx?bb5b"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\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 Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\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 AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\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 { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

,\n cart: this.props.data.cart.result,\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\n cartlines: cartLines,\n cartLinesGroup,\n promoCode: this._getPromoCode(),\n promotionOptions: this._getPromotions(),\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry: this.props.telemetry,\n id: this.props.id,\n multiplePickUpEnabled,\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\n cart?.hasInvoiceLine ? (\n

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n this.setState({\n cartlinesErrors: {}\n });\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n try {\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \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 MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Method will render error block.\n * @param errorData -The order summary errors interface.\n * @returns Jsx element.\n */\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Method will render invoice summary lines.\n * @param invoiceSummaryLines -The invoicesummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render order summary lines.\n * @param orderSummaryLines -The ordersummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render cart promotions.\n * @param promotions -The cartline item view props.\n * @returns Jsx element.\n */\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Method will render cartlines group title.\n * @param cartLine -The cartline view props.\n * @param titleSeparate -The title separate.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, titleSeparate: string) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {titleSeparate}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n
\n \n );\n};\n\n/**\n * Method will render cartlines groups header title.\n * @param pickUpText -The pickup text for group.\n * @param shippingText -The shipping text for group.\n * @param emailShippingText -The email shipping text for group.\n * @param titleSeparate -The title separator.\n * @param cartLine -The cartline view props.\n * @param emailDeliveryModeCode -The email delivery code from channel.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupHeader = (\n pickUpText: string,\n shippingText: string,\n emailShippingText: string,\n titleSeparate: string,\n cartLine: ICartlinesViewProps,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, titleSeparate)}\n
\n \n );\n};\n\n/**\n * Method will render cartlines in groups.\n * @param props -The cartline.\n * @returns Jsx element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n props.resources.pickUpText,\n props.resources.shippingText,\n props.resources.emailshippingText,\n props.resources.titleSeparate,\n cartlines[0],\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
\n

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n className?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description, className }) => {\n if (!description) {\n return null;\n }\n\n const descClassName = StringExtensions.isNullOrEmpty(className) ? 'ms-checkout-delivery-options__description' : className;\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

{message}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorTitleProps {\n title?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.title\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\n if (!title) {\n return null;\n }\n\n return

{title}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAddressDetailItem {\n isNewLine: boolean;\n isShowLabel: boolean;\n labelText: string;\n name: string;\n value: string;\n}\n\n/**\n * Address details item.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressDetailItemFunctionComponent: React.FC = (props: IAddressDetailItem) => {\n const { labelText, value } = props;\n\n const className = `ms-checkout-delivery-options__cart-line-grp__item__header__address`;\n return (\n \n {labelText}\n {value}\n \n );\n};\n\nexport default AddressDetailItemFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\nimport React, { useState } from 'react';\n\nexport interface ICheckoutCartLineDeliveryDateProps {\n className?: string;\n isDisabled?: boolean;\n minRangeValue?: string;\n maxRangeValue?: string;\n validationErrorForRange?: string;\n fallbackPattern?: string;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n disclaimerText?: string;\n heading?: string;\n checkBoxLabel?: string;\n onChangeMinValue?: void;\n id?: string;\n cartLines?: CartLine[];\n onChange(event: React.ChangeEvent, cartLines: CartLine[]): void;\n}\n\nconst CheckoutCartLineDeliveryDate: React.FC = ({\n className,\n isDisabled,\n fallbackPattern,\n ariaLabel,\n telemetryContent,\n onChangeMinValue,\n checkBoxLabel,\n disclaimerText,\n heading,\n cartLines,\n onChange\n}) => {\n const [selectedDate, setSelectedDate] = useState('');\n const [isDateEnabled, setIsDateEnabled] = useState(false);\n // State to store today's date\n const [minDate, setMinDate] = useState('');\n\n // Update minDate state with today's date on component mount\n useState(() => {\n const today = new Date().toISOString().split('T')[0];\n setMinDate(today);\n });\n\n const handleDateChange = (event: React.FocusEvent) => {\n const selectedValue = event.target.value;\n // Check if the selected date is allowed\n if (selectedValue >= minDate) {\n setSelectedDate(selectedValue);\n console.log('Selected date is allowed.', selectedValue);\n } else {\n console.log('Selected date is not allowed.');\n }\n\n if (cartLines !== undefined) {\n onChange(event, cartLines);\n }\n };\n\n const handleCheckboxChange = () => {\n setIsDateEnabled(!isDateEnabled);\n };\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n
\n
\n \n {checkBoxLabel}\n
\n {disclaimerText}\n
\n {heading}\n \n
\n
\n );\n};\n\nexport default CheckoutCartLineDeliveryDate;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsGrpRadioButtonProps {\n className: string;\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n groupName: string;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsGrpRadioButton: React.FC = ({\n className,\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n groupName,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionRef: React.RefObject = React.createRef();\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsGrpRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport DescriptionComponent from './checkout-delivery-options.description';\nimport RadioButtonComponent from './checkout-cartLine-delivery-options-grp';\n\nexport interface ICheckoutCartLineDeliveryOptionsRadioButtonProps {\n className: string;\n moduleId: string;\n ariaSetSize: number;\n priceFree: string;\n ariaPosInSet: number;\n selectedItemId: string;\n cartLines: CartLine[];\n deliveryOptions: DeliveryOption[];\n typeName: string;\n context: ICoreContext>;\n groupName: string; // Add groupName prop\n ariaLabel?: string;\n value?: string;\n cartLineId?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent, cartLines: CartLine[], cartLineId?: string): void;\n}\n\n/**\n * Represents a radio button component for checkout cart line delivery options.\n * @param {Object} props - The component props.\n * @param {boolean} props.isChecked - Indicates whether the radio button is checked.\n * @param {string} props.value - The value of the radio button.\n * @param {number} props.ariaSetSize - The total number of radio buttons in the set.\n * @param {number} props.ariaPosInSet - The position of the radio button in the set.\n * @param {string} props.ariaLabel - The ARIA label for the radio button.\n * @param {string} props.telemetryContent - The telemetry content for the radio button.\n * @param {Function} props.onChange - The event handler for when the radio button is changed.\n * @returns {JSX.Element} The rendered radio button component.\n */\nconst CheckoutCartLineDeliveryOptionsRadio: React.FC = ({\n className,\n moduleId,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n deliveryOptions,\n priceFree,\n selectedItemId,\n typeName,\n groupName, // Destructure groupName prop\n context,\n cartLines,\n cartLineId,\n onChange\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n console.log(attributes);\n const channelConfig = context.actionContext.requestContext.channel;\n const count = deliveryOptions.length;\n if (count === 0) {\n return null;\n }\n\n const changeCurrentDeliveryOption = React.useCallback(\n (event: React.ChangeEvent) => {\n onChange(event, cartLines, cartLineId);\n },\n [onChange, cartLines, cartLineId]\n );\n // const selectedDeliveryOptionItem = deliveryOptions.length > 0 ? deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n const deliveryClassName = `${className}__radio-btn-grp`;\n const optionClassName = `${deliveryClassName}-opt`;\n const response = deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => (\n
\n \n \n \n
\n ));\n\n return
{response}
;\n};\n\nexport default CheckoutCartLineDeliveryOptionsRadio;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { CartLine, DeliveryOption, ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport React, { useState } from 'react';\nimport CheckoutCartLineDeliveryOptionsRadio from './checkout-cartLine-delivery-options-radio';\n\nexport interface ICheckoutDeliveryOptionsLineItemsProps {\n className?: string;\n moduleId: string;\n selectedItemId: string;\n context: Msdyn365.ICoreContext;\n typeName: string;\n cartLines: CartLine[];\n imageSettings: Msdyn365.IImageSettings;\n showShippingChargesForLineItems: boolean;\n resources: ICheckoutDeliveryOptionsLineItemsResources;\n deliveryOptions: DeliveryOption[];\n ariaSetSize: number;\n ariaPosInSet: number;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent, cartLines: CartLine[]): void;\n currencyCode?: string;\n products?: SimpleProduct[];\n catalogs?: ProductCatalog[];\n gridSettings?: Msdyn365.IGridSettings;\n cartLineId?: string;\n key?: string;\n}\n\nexport interface ICheckoutDeliveryOptionsLineItemsResources {\n quantityDisplayStringLabel: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n productDimensionTypeAmount: string;\n configString: string;\n discountStringText: string;\n shippingChargesText: string;\n priceFree: string;\n ariaLabel: string;\n changeButtonText?: string;\n deliveryMethodLabel?: string;\n}\n\nconst _getLineItemComponent = (\n context: Msdyn365.ICoreContext,\n cartLine: CartLine,\n product: SimpleProduct,\n moduleId: string,\n typeName: string,\n showShippingChargesForLineItems: boolean,\n imageSettings: Msdyn365.IImageSettings,\n resources: ICheckoutDeliveryOptionsLineItemsResources,\n currencyCode: string,\n catalogs?: ProductCatalog[],\n gridSettings?: Msdyn365.IGridSettings,\n cartLineId?: string\n): JSX.Element | undefined => {\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return (\n \n );\n};\n\nconst _getProduct = (productId: number, products: SimpleProduct[]): SimpleProduct | undefined => {\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n};\n\nexport const GetLineItems: React.FC = (props: ICheckoutDeliveryOptionsLineItemsProps) => {\n const products = props.products;\n const lineClassName = props.className;\n const lineItemClassName = `${lineClassName}-item`;\n const currencyCode = props.currencyCode;\n const changeText = props.resources.changeButtonText;\n const [showDeliveryOption, setShowDeliveryOption] = useState(false);\n\n const handleClick = () => {\n setShowDeliveryOption(!showDeliveryOption);\n };\n if (!props.cartLines || props.cartLines.length === 0 || !products || products.length === 0 || currencyCode === undefined) {\n return null;\n }\n const deliveryCode = props.deliveryOptions.find(option => option.Code === props.selectedItemId);\n const payload = getPayloadObject(TelemetryEvent.UpdateInCart, props.telemetryContent!, changeText !== undefined ? changeText : '', '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n const response = props.cartLines.map(cartLine => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId, products);\n if (!product) {\n return null;\n }\n return (\n
\n {_getLineItemComponent(\n props.context,\n cartLine,\n product,\n props.moduleId,\n props.typeName,\n props.showShippingChargesForLineItems,\n props.imageSettings,\n props.resources,\n currencyCode,\n props.catalogs,\n props.gridSettings\n )}\n
{props.resources.deliveryMethodLabel}
\n
\n {deliveryCode?.Description}\n \n
\n {showDeliveryOption ? (\n \n ) : null}\n
\n );\n });\n\n return
{response}
;\n};\nexport default GetLineItems;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n CartLine,\n DeliveryOption,\n DeliveryPreferenceType,\n LineDeliverySpecification\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n GetDeliveryOptionsForCartLineAddressInput,\n getDeliveryOptionsForCartLineAddress,\n QueryResultSettingsProxy,\n StringExtensions,\n DeliveryOptionsCartLineAddress,\n ArrayExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport groupBy from 'lodash/groupBy';\n\nimport { IImageSettings } from '@msdyn365-commerce/core';\nimport { ErrorComponent } from '../../common/error';\nimport { ICheckoutDeliveryOptionsData } from './checkout-delivery-options.data';\nimport {\n filterDeliveryModeOption,\n ICheckoutDeliveryOptionsProps,\n useDefaultDeliveryOption\n} from './checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/checkout-delivery-options.radio-button';\nimport { focusOnCheckoutError } from '../../checkout-errors';\nimport { AddressDetailItemFunctionComponent } from './components/address-detail-item';\nimport CheckoutCartLineDeliveryDate from './components/checkout-cartLine-delivery-date';\nimport CheckoutCartLineDeliveryOptionsRadio from './components/checkout-cartLine-delivery-options-radio';\nimport { GetLineItems } from './components/get-line-items';\n\nexport interface ICheckoutDeliveryOptionsModuleProps\n extends ICheckoutDeliveryOptionsProps,\n IModuleStateProps {}\n\nexport interface ICheckoutDeliveryOption {\n DeliveryOption: INodeProps;\n description?: React.ReactNode;\n price?: React.ReactNode;\n}\n\nexport interface ICartLineSelectedDeliveryOption {\n cartLineId: string;\n selectedDeliveryOption: string;\n requestDeliveryDate?: string;\n}\n\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\n code: string;\n radioButton?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsList {\n DeliveryOptionsList: INodeProps;\n list: ICheckoutDeliveryOptionEdit[];\n}\n\nexport interface ICheckoutDeliveryOptionsError {\n Error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsViewState {\n isLoading: boolean;\n isError: boolean;\n isShowList: boolean;\n isShowSelected: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutDeliveryOptionsViewProps extends ICheckoutDeliveryOptionsProps<{}> {\n CheckoutDeliveryOptions: IModuleProps;\n selectedItemId: string;\n deliveryOptionsData: DeliveryOption[];\n isLoading: boolean;\n errorMessageData: string;\n viewState: ICheckoutDeliveryOptionsViewState;\n deliveryOptions?: ICheckoutDeliveryOptionsList;\n deliveryOptionSelected?: ICheckoutDeliveryOption;\n errorMessage?: ICheckoutDeliveryOptionsError;\n waiting?: React.ReactNode;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n checkoutCartLineGroupDeliveryOptions?: React.ReactNode;\n enableCheckoutCartLineDeliveryOptions?: boolean;\n cartLineImages?: React.ReactNode;\n onDeliveryOptionChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n}\n\n/**\n *\n * CheckoutDeliveryOptions component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutDeliveryOptions extends React.Component {\n @observable private selectedItemId: string = '';\n\n @observable private deliveryOptions: DeliveryOption[] = [];\n\n @observable private isLoading: boolean = false;\n\n @observable private errorMessage?: string;\n\n @observable private groupDeliveryOptions: DeliveryOptionsCartLineAddress[] = [];\n\n @observable private cartLineSelectedDeliveryOptions: ICartLineSelectedDeliveryOption[] = [];\n\n @computed private get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get currencyCode(): string | undefined {\n return get(this.props, 'context.request.channel.Currency');\n }\n\n public get expressPaymentDetailsFromCartPage() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n\n return properties ? JSON.parse(properties) : null;\n }\n\n public get isExpressPaymentAppliedInCartPage(): boolean {\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\n }\n\n private cartDeliveryMode?: string;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly isSelectDefaultOptionEnabled?: boolean;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n private readonly isMultipleAddressShippingEnabled?: boolean;\n\n private readonly timeoutRetailCall: number;\n\n private cartLinesDeliveryOptions: ICartLineSelectedDeliveryOption[] = [];\n\n public constructor(props: ICheckoutDeliveryOptionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isSelectDefaultOptionEnabled =\n this.props.config.useDefaultDeliveryOption && this.props.config.useDefaultDeliveryOption !== useDefaultDeliveryOption.none;\n this.isMultipleAddressShippingEnabled = this.props.config.multipleAddressShippingEnabled;\n this.timeoutRetailCall = this.props.config.timeoutToCallRetail !== undefined ? this.props.config.timeoutToCallRetail : 0;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n if (\n (this.props.data.checkout.result?.isExpressCheckoutApplied && this.canShip()) ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n await this.init();\n } else {\n // Wait for a specific time (e.g., 2000 milliseconds = 2 seconds)\n await new Promise(resolve => setTimeout(resolve, this.timeoutRetailCall));\n // Then call the init function\n await this.init();\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.cartLinesWithShippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\n async isExpressCheckoutApplied => {\n if (isExpressCheckoutApplied && this.canShip() && !this.isExpressPaymentAppliedInCartPage) {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\n checkoutError.errorMessage\n ) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutDeliveryOptionsModuleProps, nextState: ICheckoutDeliveryOptionsViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n if (!this.canShip()) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const {\n moduleState: { isReady, isUpdating, hasError }\n } = this.props;\n const isError = !this.isLoading && hasError;\n const isShowList = !this.isLoading && !hasError && isUpdating && !this.isSelectDefaultOptionEnabled;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n const { errorMessageTitle, deliveryOptionAriaLabel } = this.props.resources;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\n alert: this.errorMessage && ,\n errorMessageData: this.errorMessage,\n viewState: {\n isLoading: this.isLoading,\n isError,\n isShowList,\n isShowSelected,\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\n },\n CheckoutDeliveryOptions: {\n moduleProps: this.props,\n className: classname('ms-checkout-delivery-options', this.props.config.className)\n },\n deliveryOptions: {\n DeliveryOptionsList: {\n className: 'ms-checkout-delivery-options__list',\n role: 'list',\n 'aria-label': deliveryOptionAriaLabel\n },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n checkoutErrorRef: this.checkoutErrorRef,\n checkoutCartLineGroupDeliveryOptions: this.getCheckoutCartLineGroupDeliveryOptions(),\n enableCheckoutCartLineDeliveryOptions: this.isMultipleAddressShippingEnabled,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.isSelectDefaultOptionEnabled ? undefined : this.onEdit,\n onCancel: this.isSelectDefaultOptionEnabled ? undefined : this.onCancel,\n onSubmit: this.isSelectDefaultOptionEnabled ? undefined : this.onSubmit,\n status:\n !(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption) &&\n this.canShip()\n ? 'updating'\n : 'disabled'\n });\n\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n if (this.isMultipleAddressShippingEnabled) {\n this.getCartLinesSavedDeliveryOption();\n }\n await this.loadDeliveryOptions();\n };\n\n private readonly canShip = (): boolean => {\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\n };\n\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n const channelConfig = this.props.context.request.channel;\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\n description: ,\n price: (\n \n )\n };\n };\n\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-expect-error\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n const channelConfig = this.props.context.request.channel;\n\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n const getAriaLabelWithPrice = get(deliveryOption, 'ShippingChargeAmount', 0);\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option', role: 'listitem' },\n code: deliveryOption.Code || '',\n radioButton: (\n \n ),\n description: (\n \n ),\n price: (\n \n )\n };\n });\n };\n\n private readonly getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save' } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private readonly getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.errorMessage = errorMessage;\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private readonly onSave = async (): Promise => {\n await this.onSubmit();\n };\n\n private readonly onEdit = async (): Promise => {\n this.props.telemetry.information('Delivery options onEdit is called.');\n\n this.clearError();\n this.onUpdating();\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n };\n\n private readonly onSubmit = async (): Promise => {\n this.props.telemetry.information('Delivery options onSubmit is called.');\n if (this.isMultipleAddressShippingEnabled) {\n this.updateCartLinesDeliverySpecification();\n } else {\n await this.updateCartDeliverySpecification(this.selectedItemId);\n }\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n };\n\n private readonly onCancel = async (): Promise => {\n this.props.telemetry.information('Delivery options onCancel is called.');\n\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n } else {\n this.onUpdating();\n }\n };\n\n private readonly getSavedDeliveryOption = (): string | undefined => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\n };\n\n private readonly getCartLinesSavedDeliveryOption = (): void => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n cartLinesForShipping.forEach(cartLine => {\n const deliveryMode = cartLine.DeliveryMode !== undefined ? cartLine.DeliveryMode : '';\n if (!cartLine.LineId || StringExtensions.isNullOrEmpty(deliveryMode)) {\n return;\n }\n const cartLineId = cartLine?.LineId;\n const existingCartLineSelectedDeliveryOption = this.cartLinesDeliveryOptions.find(\n cartLineDeliveryOption => cartLineDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryMode;\n } else {\n if (cartLineId !== undefined) {\n this.cartLinesDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryMode });\n }\n }\n });\n };\n\n private readonly updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\n if (deliveryModeId.trim() === '') {\n return;\n }\n\n const { resources } = this.props;\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const updateCartDeliverySpecificationInput = {\n deliveryModeId,\n shippingAddress: checkoutState.shippingAddress,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined\n };\n\n this.clearError();\n this.onPending();\n\n await checkoutState.checkoutCart\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then(response => {\n if (response.status === 'FAILED') {\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\n }\n\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n })\n .catch(() => {\n this.setError(resources.genericErrorMessage);\n });\n };\n\n @action\n private readonly updateCartLinesDeliverySpecification = async (): Promise => {\n if (!this.cartLineSelectedDeliveryOptions || !this.cartLineSelectedDeliveryOptions.length) {\n return;\n }\n const { resources } = this.props;\n let lineSpecs: LineDeliverySpecification[] = [];\n const checkoutCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines;\n\n this.cartLineSelectedDeliveryOptions.forEach(group => {\n const address = checkoutCartLines?.find(cartLine => cartLine.LineId === group.cartLineId)?.ShippingAddress;\n const lineSpec = {\n LineId: group.cartLineId,\n DeliverySpecification: {\n DeliveryModeId: group.selectedDeliveryOption,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ShipToAddress,\n DeliveryAddress: address\n }\n };\n lineSpecs.push(lineSpec);\n });\n\n try {\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const response = await checkoutState.checkoutCart.updateCartLinesDeliverySpecification({\n lineDeliverySpecifications: lineSpecs\n });\n\n if (response.status === 'FAILED') {\n this.setError(resources.genericErrorMessage);\n } else {\n const cartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines;\n if (cartLines !== undefined && cartLines.length > 0) {\n cartLines?.forEach(cartLine => {\n const cartLineId = cartLine.LineId?.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n cartLine.RequestedDeliveryDate = existingCartLineSelectedDeliveryOption.requestDeliveryDate\n ? new Date(existingCartLineSelectedDeliveryOption.requestDeliveryDate)\n : undefined;\n }\n });\n await checkoutState.checkoutCart.updateCartLines({ updatedCartLinesObject: cartLines });\n }\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n };\n\n private readonly getCartLinesForShipping = (): CartLine[] => {\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n return this.retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n };\n\n private readonly getDeliveryOptions = async (shippingAddress: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n const cartId = (cartState.cart as Cart).Id;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const response = await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cartId,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n );\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n\n if (response && response.length > 0) {\n this.deliveryOptions = response;\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n\n if (this.deliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartDeliveryMode && this.isDeliveryModeExists(this.cartDeliveryMode)) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: !!this.isSelectDefaultOptionEnabled });\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly getStoredDeliveryOptions = async (): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context } = this.props;\n const cartState = this.props.data.checkout.result.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n }\n\n if (this.cartDeliveryMode) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly loadDeliveryOptions = async (): Promise => {\n const shippingAddress = this.props.data.checkout.result?.shippingAddress;\n const cartLinesForShipping = this.props.data.checkout.result?.cartLinesWithShippingAddress;\n\n if (this.canShip() && (shippingAddress || cartLinesForShipping)) {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n this.isMultipleAddressShippingEnabled\n ? await this.getGroupDeliveryOptions()\n : shippingAddress !== undefined\n ? await this.getDeliveryOptions(shippingAddress)\n : null;\n }\n\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n }\n\n if (\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n this.onSubmit();\n }\n }\n };\n\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private readonly onCartLineDeliveryOptionChange = (\n event: React.ChangeEvent,\n cartLines: CartLine[],\n cartLineId?: string\n ) => {\n const deliveryModeId = event.currentTarget.value;\n if (cartLineId !== undefined) {\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n console.log('existingCartLineSelectedDeliveryOption');\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryModeId;\n console.log('cartLineSelectedDeliveryOptions object if existing');\n } else {\n this.cartLineSelectedDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryModeId });\n console.log('cartLineSelectedDeliveryOptions object new line id');\n }\n return;\n }\n\n cartLines.forEach(cartLine => {\n if (!cartLine.LineId) {\n return;\n }\n const cartLineId = cartLine?.LineId.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryModeId;\n } else {\n this.cartLineSelectedDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryModeId });\n }\n });\n };\n\n private readonly onCartLineRequestDeliveryDateChange = (event: React.ChangeEvent, cartLines: CartLine[]) => {\n const deliveryDate = event.currentTarget.value;\n cartLines.forEach(cartLine => {\n if (!cartLine.LineId) {\n return;\n }\n const cartLineId = cartLine?.LineId.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.requestDeliveryDate = deliveryDate;\n } else {\n const deliveryModeId = cartLine.DeliveryMode !== undefined ? cartLine.DeliveryMode : '';\n this.cartLineSelectedDeliveryOptions.push({\n cartLineId,\n selectedDeliveryOption: deliveryModeId,\n requestDeliveryDate: deliveryDate\n });\n }\n });\n };\n\n private readonly onReady = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onUpdating = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onUpdating();\n }\n };\n\n private readonly onPending = () => {\n if (!this.isSelectDefaultOptionEnabled) {\n this.props.moduleState.onPending();\n }\n };\n\n private readonly getCheckoutCartLineGroupDeliveryOptions = (): React.ReactNode => {\n const { resources, config } = this.props;\n const shippingCartLines = this.getCartLinesForShipping();\n if (!ArrayExtensions.hasElements(shippingCartLines) || !ArrayExtensions.hasElements(this.groupDeliveryOptions)) {\n return null;\n }\n const imageSettings = this.getImageSettings(config.imageSettings);\n const requestDeliveryDateEnabled = config.enableRequestDeliveryDate === true && this.isMultipleAddressShippingEnabled === true;\n return (\n
\n {this.groupDeliveryOptions.map((groupDeliveryOption: DeliveryOptionsCartLineAddress, index) => {\n const cartLineId = groupDeliveryOption.cartLineIds !== undefined ? groupDeliveryOption.cartLineIds[0] : '';\n const cartLine1 = shippingCartLines.find(cartLine => cartLineId === cartLine?.LineId?.toString() ?? '');\n const cartLine = shippingCartLines.filter(\n cartLine => groupDeliveryOption && (cartLineId === cartLine?.LineId?.toString() ?? '')\n );\n if (groupDeliveryOption !== undefined) {\n const selectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLine[0].LineId\n )?.selectedDeliveryOption;\n return (\n
\n
\n \n
\n
\n
\n \n {resources.cartLineGroupDeliveryOptionsLabel}\n \n \n {resources.cartLineGroupDeliveryOptionsText}\n \n {requestDeliveryDateEnabled ? (\n \n ) : null}\n \n
\n {groupDeliveryOption.cartLineIds?.map(cartLineId => {\n const cartLine1 = shippingCartLines.find(\n cartLine => cartLineId === cartLine?.LineId?.toString() ?? ''\n );\n const selectedDeliveryOption1 = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption =>\n cartLineSelectedDeliveryOption.cartLineId === cartLine1?.LineId\n )?.selectedDeliveryOption;\n return (\n \n );\n })}\n
\n
\n );\n } else {\n return null;\n }\n })}\n
\n );\n };\n\n private readonly getGroupDeliveryOptions = async (): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const cartLinesForShipping: CartLine[] = [];\n if (ArrayExtensions.hasElements(shippingCartLines)) {\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.ShippingAddress?.RecordId);\n cartLinesForShipping.push(getGroupByDelivery(shippingCartLines));\n console.log('running delivery option for all lines');\n }\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const inputData = new GetDeliveryOptionsForCartLineAddressInput(deliveryOptionFilter, shippingCartLines);\n const response = await getDeliveryOptionsForCartLineAddress(inputData, context.actionContext);\n if (response && response.length > 0) {\n this.groupDeliveryOptions = response;\n console.log('groupDeliveryOptions');\n }\n if (this.groupDeliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartLinesDeliveryOptions.length !== 0) {\n this.cartLineSelectedDeliveryOptions = this.cartLinesDeliveryOptions;\n this.cartLinesDeliveryOptions = [];\n this.onReady();\n } else {\n this.onUpdating();\n this.groupDeliveryOptions.forEach(group => {\n const selectedDeliveryOption =\n group.deliveryOptions.length > 0 && group.deliveryOptions[0].Code !== undefined\n ? group.deliveryOptions[0].Code\n : '';\n group.cartLineIds?.forEach(cartLineId => {\n this.cartLineSelectedDeliveryOptions.push({\n cartLineId,\n selectedDeliveryOption\n });\n });\n });\n }\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n }\n this.isLoading = false;\n };\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n}\n\nexport default CheckoutDeliveryOptions;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutDeliveryOption,\n ICheckoutDeliveryOptionEdit,\n ICheckoutDeliveryOptionsList,\n ICheckoutDeliveryOptionsViewProps\n} from './checkout-delivery-options';\n\nconst DeliveryOptionList: React.FC = ({ DeliveryOptionsList, list }) => {\n if (!list || list.length === 0) {\n return null;\n }\n\n return (\n \n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\n return (\n \n {deliveryOption.radioButton}\n {deliveryOption.description}\n {deliveryOption.price}\n \n );\n })}\n \n );\n};\n\nconst DeliveryOptionSelected: React.FC = ({ DeliveryOption, description, price }) => {\n return (\n \n {description}\n {price}\n \n );\n};\n\nconst CheckoutDeliveryOptionsView: React.FC = props => {\n const {\n CheckoutDeliveryOptions,\n enableCheckoutCartLineDeliveryOptions,\n checkoutErrorRef,\n viewState,\n deliveryOptions,\n deliveryOptionSelected,\n alert,\n waiting,\n saveButton,\n editButton,\n cancelButton,\n checkoutCartLineGroupDeliveryOptions\n } = props;\n\n return (\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\n \n {viewState.isLoading && waiting}\n {viewState.isError && alert}\n {viewState.isShowList && deliveryOptions && !enableCheckoutCartLineDeliveryOptions && (\n \n )}\n {viewState.isShowList && enableCheckoutCartLineDeliveryOptions && checkoutCartLineGroupDeliveryOptions}\n {viewState.isShowSelected && deliveryOptionSelected && }\n {viewState.isShowSaveButton && saveButton}\n {viewState.isShowEditButton && editButton}\n {viewState.isShowCancelButton && cancelButton}\n \n );\n};\n\nexport default CheckoutDeliveryOptionsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../checkout-gift-card.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n disableAddGiftCard?: boolean;\n resources: {\n applyGiftCardButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On Apply Function.\n * @param onApplyGiftCard -On Apply Gift Card Function.\n * @returns Call of Apply Gift Card Function.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number Function.\n * @param onEnterGiftCardNumber -On enter gift card number Function.\n * @returns Call of on enter gift card number Function.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On Change pin event.\n * @param onEnterGiftCardPin -On enter gift card pin Function.\n * @returns Call of on enter gift card pin Function.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On Change Event.\n * @param onEnterGiftCardExp -On enter gift card function.\n * @returns Call of On enter gift card function.\n */\n// Need to filter out the month and year\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard,\n resources: {\n applyGiftCardButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-checkout-gift-card__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-checkout-gift-card__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-checkout-gift-card__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-checkout-gift-card__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-checkout-gift-card__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {applyGiftCardButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: IGiftCardExtend;\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * On remove function.\n * @param onRemoveGiftCard -Gift card number function.\n * @param giftCard -Gift card values.\n * @returns Call of onRemoveGiftCard function.\n */\nconst onRemoveHandler = (onRemoveGiftCard: (giftCardNumber: string) => void, giftCard: IGiftCardExtend) => (): void => {\n onRemoveGiftCard(giftCard.Id ?? '');\n};\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.canRemove\n * @param root0.onRemoveGiftCard\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @param root0.resources.removeGiftCardButton\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n canRemove,\n onRemoveGiftCard,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel, removeGiftCardButton }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-checkout-gift-card__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {' ('}\n {giftCardAvailableBalanceLabel}\n {` `}\n {balance}\n {')'}\n \n );\n\n const removeButton = canRemove && (\n \n );\n\n return {\n itemProps,\n id: giftCard.Id,\n selectedGiftCard,\n removeButton\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\n\nimport { getItem, IItem } from './get-item';\n\ninterface IGetListInput {\n giftCards?: IGiftCardExtend[];\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IList {\n listProps: INodeProps;\n list: IItem[];\n}\n\nexport const getList = ({ giftCards, canRemove, resources, getFormattedPrice, onRemoveGiftCard }: IGetListInput): IList | undefined => {\n if (!giftCards || giftCards.length === 0) {\n return undefined;\n }\n\n const listProps = {\n className: 'ms-checkout-gift-card__list'\n };\n\n const list = giftCards.map(giftCard =>\n getItem({\n canRemove,\n getFormattedPrice,\n giftCard,\n onRemoveGiftCard,\n resources\n })\n );\n\n return {\n listProps,\n list\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 React from 'react';\n\ninterface IGiftCardTitleProps {\n title: string;\n}\n\nconst GiftCardTitle: React.FC = ({ title }) => ;\n\nexport default GiftCardTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { ICheckoutGiftCardData } from './checkout-gift-card.data';\nimport { ICheckoutGiftCardProps } from './checkout-gift-card.props.autogenerated';\nimport { getForm, IForm } from './components/get-form';\nimport { getList, IList } from './components/get-list';\nimport TitleCompoent from './components/title';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport * from './components/get-form';\nexport * from './components/get-item';\nexport * from './components/get-list';\n\ninterface ICheckoutGiftCardState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface ICheckoutGiftCardModuleProps extends ICheckoutGiftCardProps, IModuleStateProps {}\n\nexport interface IShowResource {\n title: React.ReactNode;\n list?: IList;\n}\n\nexport interface IAddResource {\n form: IForm;\n list?: IList;\n}\n\nexport interface ICheckoutGiftCardViewProps extends ICheckoutGiftCardProps<{}>, ICheckoutGiftCardState {\n className?: string;\n\n showGiftCard?: IShowResource;\n addGiftCard?: IAddResource;\n\n checkoutGiftCardProps: IModuleProps;\n couldPaidByGiftCard?: boolean;\n isEnabled?: boolean;\n checkoutErrorRef?: React.RefObject;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardNumber: string): void;\n enterGiftCardExp?(giftCardNumber: string): void;\n removeGiftCard?(giftCardNumber: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * CheckoutGiftCard component.\n * @extends {React.Component, ICheckoutGiftCardState>}\n */\n@observer\nexport class CheckoutGiftCard extends React.Component {\n public state: ICheckoutGiftCardState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n @computed get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.loyaltyAmount) {\n return 0;\n }\n return checkoutState.loyaltyAmount;\n }\n\n @computed get getCustomerAccountAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState && checkoutState.customerAccountAmount ? checkoutState.customerAccountAmount : 0;\n }\n\n @computed get getGiftCardTotalAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.giftCardExtends) {\n return 0;\n }\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\n const balance: number = giftCard.Balance || 0;\n return count + balance;\n }, 0);\n }\n\n @computed get disableAddGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return true;\n }\n return (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getGiftCardTotalAmount <= 0;\n }\n\n @computed get shouldPayGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card card when loyalty points do not cover the total amount\n const amountDue = (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getCustomerAccountAmount;\n return amountDue > 0;\n }\n\n @computed get hasSelectedItem(): boolean {\n const {\n data: { checkout }\n } = this.props;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n return !!giftCards && giftCards.length > 0;\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n () => {\n this.init();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutGiftCard && checkoutError.errorMessage) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutGiftCard) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutGiftCardModuleProps, nextState: ICheckoutGiftCardState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n moduleState: { isReady },\n data: { checkout },\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n const additionalFields = showAdditionalFields;\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this.isEnabled() || (!this.shouldPayGiftCard && !isReady)) {\n this.props.context.telemetry.error('Checkout giftcard content is empty, module wont render');\n return null;\n }\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.GiftCard === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout gift card module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-checkout-gift-card', className, isReady ? 'show' : 'add');\n\n const viewProps: ICheckoutGiftCardViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n checkoutErrorRef: this.checkoutErrorRef,\n\n checkoutGiftCardProps: { moduleProps: this.props, className: moduleClassName },\n couldPaidByGiftCard: this.couldPaidByGiftCard(),\n isEnabled: this.isEnabled(),\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n enterGiftCardNumber: this.enterGiftCardNumber,\n enterGiftCardPin: this.enterGiftCardPin,\n enterGiftCardExp: this.enterGiftCardExp,\n removeGiftCard: this.removeGiftCard,\n applyGiftCard: this.applyGiftCard,\n showGiftCard: isReady\n ? {\n title: ,\n list: getList({\n canRemove: false,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined,\n addGiftCard: !isReady\n ? {\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n onEnterGiftCardNumber: this.enterGiftCardNumber,\n onEnterGiftCardPin: this.enterGiftCardPin,\n onEnterGiftCardExp: this.enterGiftCardExp,\n onApplyGiftCard: this.applyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard: this.disableAddGiftCard\n }),\n list: getList({\n canRemove: true,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly init = (): void => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const giftCards = this.props.data.checkout.result?.giftCardExtends;\n if (giftCards && giftCards.length > 0) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly couldPaidByGiftCard = (): boolean => {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart?.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card when it is not free\n return (cart.TotalAmount || 0) > 0;\n };\n\n private readonly isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return this.couldPaidByGiftCard();\n };\n\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Payment section gift card onEdit is called.');\n\n // Show add gift card form\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = (): void => {\n this.props.telemetry.information('Payment section gift card onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = (): void => {\n this.props.telemetry.information('Payment section gift card onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n if (this.hasSelectedItem) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this.clearError();\n };\n\n private readonly enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this.clearError();\n };\n\n private readonly enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this.clearError();\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.props.moduleState.setHasError(true);\n this.setState({\n errorMessage\n });\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly removeGiftCard = async (giftCardNumber: string): Promise => {\n this.props.telemetry.information('Payment section gift card remove is called.');\n\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState) {\n return;\n }\n\n await checkoutState.removeGiftCard({ giftCardNumber });\n };\n\n private readonly applyGiftCard = async (): Promise => {\n this.props.telemetry.information('Payment section gift card apply is called.');\n\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const checkoutState = this.props.data.checkout.result;\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this.getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this.getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (checkoutState && giftCard) {\n await checkoutState.addGiftCard({\n giftCard,\n additionalProperties: { Pin: giftCardPin, ExpirationDate: giftCardExp, TenderTypeId: tenderTypeId }\n });\n this.clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false\n });\n this.props.telemetry.information('Payment section fetching gift card is failed.');\n };\n\n private readonly findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { noBalanceError, invalidCardInfoError, invalidCardTypeError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n const internalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (isPinRequired && giftCardPin === '') {\n this.setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this.setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this.setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this.setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, duplicatedCodeError, invalidCodeError },\n data: { checkout }\n } = this.props;\n\n if (!giftCardNumber) {\n this.setError(emptyInputError);\n return undefined;\n }\n\n const isDuplicated = checkout.result && checkout.result.giftCardExtends.some((card: GiftCard) => card.Id === giftCardNumber);\n if (isDuplicated) {\n this.setError(duplicatedCodeError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this.setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this.setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default withModuleState(CheckoutGiftCard);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddResource, ICheckoutGiftCardViewProps, IForm, IItem, IList, IShowResource } from './checkout-gift-card';\n\nexport const From: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const SelectedGiftCard: React.FC = ({ itemProps, selectedGiftCard, removeButton }) => (\n \n {selectedGiftCard}\n {removeButton}\n \n);\n\nexport const GiftCardList: React.FC = ({ listProps, list }) => (\n \n {list.map(({ id, ...item }) => (\n \n ))}\n \n);\n\nexport const AddResource: React.FC = ({ form, list }) => (\n <>\n {form && }\n {list && }\n \n);\n\nexport const ShowResource: React.FC = ({ title, list }) => (\n <>\n {title}\n {list && }\n \n);\n\nconst CheckoutGiftCardView: React.FC = props => {\n const { checkoutGiftCardProps, checkoutErrorRef, showGiftCard, addGiftCard } = props;\n return (\n \n {showGiftCard && }\n {addGiftCard && }\n \n );\n};\n\nexport default CheckoutGiftCardView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyInput {\n className: string;\n type: string;\n value: string | number;\n min: number;\n max: number;\n ariaValueMax: number;\n ariaValueMin: number;\n ariaValueNow: number;\n id: string;\n step: string;\n onChange(event: React.ChangeEvent): void;\n onBlur(event: React.FocusEvent): void;\n}\n\nconst AdressInput: React.FC = ({\n className,\n type,\n value,\n min,\n max,\n step,\n ariaValueMax,\n ariaValueMin,\n ariaValueNow,\n onChange,\n onBlur,\n id\n}) => (\n \n);\n\nexport default AdressInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyLabelProps {\n className: string;\n text: string;\n htmlFor: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @param root0.htmlFor\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyLabel: React.FC = ({ className, text, htmlFor }) => {\n return (\n \n );\n};\n\nexport default CheckoutLoyaltyLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyTextProps {\n className: string;\n text?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyText: React.FC = ({ className, text }) => {\n if (!text) {\n return null;\n }\n\n return {text};\n};\n\nexport default CheckoutLoyaltyText;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { callActionOrExecute } from '@msdyn365-commerce/retail-proxy';\nimport { createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { LoyaltyPointRedemptionEstimate, LoyaltyRewardPoint } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { GetLoyaltyTransactionEstimationInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Drawer, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { CheckoutModule, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport { action, computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyData } from './checkout-loyalty.data';\nimport { ICheckoutLoyaltyProps } from './checkout-loyalty.props.autogenerated';\nimport InputComponent from './components/checkout-loyalty-input';\nimport LabelComponent from './components/checkout-loyalty-label';\nimport TextComponent from './components/checkout-loyalty-text';\nimport { ErrorComponent } from '../../common/error';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutLoyaltyState {\n dollarsApplied: number;\n isFetchingLoyaltyCard: boolean;\n errorMessage?: string;\n}\n\nexport interface ICheckoutLoyaltyModuleProps extends ICheckoutLoyaltyProps, IModuleStateProps {}\n\nexport interface ICheckoutLoyaltyViewState {\n isShowLoyalty: boolean;\n isShowAddLoyalty: boolean;\n}\n\nexport interface ICheckoutLoyaltyShow {\n heading: React.ReactNode;\n coveredAmountText: React.ReactNode;\n amount: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyRewardPoint {\n checkoutLoyaltyRewardPoint: INodeProps;\n key: string;\n title: React.ReactNode;\n availablePointsText: React.ReactNode;\n activePoints: React.ReactNode;\n expiringPointsText: React.ReactNode;\n expiringPoints: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyAdd {\n heading: React.ReactNode;\n cardNumber: React.ReactNode;\n drawer: INodeProps;\n rewardPoints: ICheckoutLoyaltyRewardPoint[];\n loyaltyAmountContainer: INodeProps;\n appliedLoyaltyAmountContainer: INodeProps;\n loyaltyAmountLabel: React.ReactNode;\n loyaltyAmountInput: React.ReactNode;\n loyaltyAmountApplyButton: React.ReactNode;\n showAppliedAmount: boolean;\n loyaltyAmountAppliedText: React.ReactNode;\n loyaltyAmountAppliedPrice: React.ReactNode;\n loyaltyAmountRemoveButton: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyViewProps extends ICheckoutLoyaltyModuleProps {\n checkoutLoyalty: IModuleProps;\n viewState: ICheckoutLoyaltyViewState;\n showLoyalty: ICheckoutLoyaltyShow;\n addLoyalty: ICheckoutLoyaltyAdd;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n *\n * CheckoutLoyalty component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n\n@withModuleState\n@observer\nclass CheckoutLoyalty extends React.Component {\n private readonly _dialogToggleRef: React.RefObject | undefined;\n\n private readonly moduleClassName: string = 'ms-checkout-loyalty';\n\n private readonly _defaultLoyaltyPoints: number = 0;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n constructor(props: ICheckoutLoyaltyModuleProps) {\n super(props);\n this._dialogToggleRef = React.createRef();\n this._applyLoyaltyPoints = this._applyLoyaltyPoints.bind(this);\n this._removeLoyaltyPoints = this._removeLoyaltyPoints.bind(this);\n this._onInputChange = this._onInputChange.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this.state = { dollarsApplied: this.maxDollars, isFetchingLoyaltyCard: false };\n }\n\n @computed get shouldPayLoyalty(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use loyalty when cart is not full of free items\n const amountDue = cart.TotalAmount || 0;\n return amountDue > 0;\n }\n\n @computed get isDataReady(): boolean {\n return (\n (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.loyaltyCard && this.props.data.loyaltyCard.status) !== 'LOADING' &&\n (this.props.data.loyaltyTransactionEstimation && this.props.data.loyaltyTransactionEstimation.status) !== 'LOADING'\n );\n }\n\n @computed get maxDollars(): number {\n return this.props.data.loyaltyTransactionEstimation.result &&\n this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n ? this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n : 0;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart,\n async () => {\n this._updateEstimate();\n }\n );\n\n reaction(\n () => this.props.data.loyaltyCard.result,\n async () => {\n this._updateLoyalty();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutLoyalty && checkoutError.errorMessage) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutLoyalty) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutLoyaltyModuleProps, nextState: ICheckoutLoyaltyState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config,\n resources,\n renderView,\n moduleState: { hasError, isReady }\n } = this.props;\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.Loyalty === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout loyalty module wont render');\n return null;\n }\n\n if (\n this.props.data.loyaltyCard &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n ) {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n const checkoutState = this.props.data.checkout.result;\n let isShowLoyalty = false;\n const errorMessage = this.state.errorMessage;\n\n if (isReady) {\n if (!checkoutState || checkoutState.loyaltyAmount === 0) {\n return null;\n }\n isShowLoyalty = true;\n }\n const channelConfig = this.props.context.request.channel;\n const viewProps = {\n ...this.props,\n checkoutErrorRef: this.checkoutErrorRef,\n viewState: {\n isShowLoyalty,\n isShowAddLoyalty: !isReady && !config.disableAddLoyaltyComponent\n },\n alert: hasError && errorMessage && ,\n checkoutLoyalty: {\n moduleProps: this.props,\n className: classnames(\n this.moduleClassName,\n { [`${this.moduleClassName}__applied`]: isShowLoyalty },\n this.props.config.className\n )\n },\n showLoyalty: {\n heading: ,\n coveredAmountText: (\n \n ),\n amount: (\n \n )\n },\n addLoyalty: {\n heading: ,\n drawer: {\n tag: Drawer,\n className: `${this.moduleClassName}__drawer`,\n toggleButtonText: this._drawerHeader(),\n openGlyph: `${this.moduleClassName}__drawer-open`,\n closeGlyph: `${this.moduleClassName}__drawer-close`,\n glyphPlacement: 'end'\n },\n cardNumber: ,\n rewardPoints:\n loyaltyCard.RewardPoints &&\n loyaltyCard.RewardPoints.map((points, index) => {\n return this._renderPointSection(points, resources.availablePointsLabel, resources.expiringLoyaltyPointsLabel);\n }),\n loyaltyAmountContainer: {\n className: `${this.moduleClassName}__amount`\n },\n appliedLoyaltyAmountContainer: {\n className: `${this.moduleClassName}__applied-amount`\n },\n loyaltyAmountLabel: (\n \n ),\n loyaltyAmountInput: (\n \n ),\n loyaltyAmountApplyButton: (\n this.maxDollars ||\n this.state.dollarsApplied <= 0 ||\n isNaN(this.state.dollarsApplied) ||\n this.state.isFetchingLoyaltyCard\n }\n >\n {this.props.resources.applyCheckoutLoyaltyPaymentText}\n \n ),\n showAppliedAmount: checkoutState && checkoutState.loyaltyAmount > 0,\n loyaltyAmountAppliedText: (\n \n ),\n loyaltyAmountAppliedPrice: (\n \n ),\n loyaltyAmountRemoveButton: (\n \n {this.props.resources.removeCheckoutLoyaltyPaymentText}\n \n )\n }\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n this.props.context.telemetry.error('Checkout loyalty content is empty, module wont render');\n return null;\n }\n\n private _drawerHeader(): JSX.Element {\n const channelConfig = this.props.context.request.channel;\n return (\n <>\n

{this.props.resources.loyaltyCoveredAmountText}

\n \n \n );\n }\n\n private _renderPointSection(\n point: LoyaltyRewardPoint,\n loyaltyCoveredAmountText: string,\n expiringLoyaltyPointsLabel: string\n ): ICheckoutLoyaltyRewardPoint {\n return {\n key: point.RewardPointId || '',\n checkoutLoyaltyRewardPoint: {\n className: `${this.moduleClassName}__program`\n },\n title: ,\n availablePointsText: ,\n activePoints: (\n \n ),\n expiringPointsText: ,\n expiringPoints: (\n \n )\n };\n }\n\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const savedLoyaltyAmount = this.props.data.checkout.result?.loyaltyAmount;\n if (savedLoyaltyAmount) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n } else if (\n this.props.data.loyaltyCard.result &&\n this.props.data.checkout.result &&\n this.props.data.loyaltyCard.result.CardNumber !== this.props.data.checkout.result.checkoutCart.cart.LoyaltyCardId\n ) {\n this.props.data.checkout.result.checkoutCart\n .updateLoyaltyCardId({ loyaltyCardNumber: this.props.data.loyaltyCard.result.CardNumber })\n .catch(error => {\n if (this.context.telemetry) {\n this.context.telemetry.warning(error);\n this.context.telemetry.debug('Unable to update the loyalty card');\n }\n });\n }\n };\n\n private readonly onEdit = () => {\n this.props.telemetry.information('Payment section loyalty onEdit is called.');\n\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = () => {\n this.props.telemetry.information('Payment section loyalty onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = () => {\n this.props.telemetry.information('Payment section loyalty onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n const checkoutState = this.props.data.checkout.result;\n if (checkoutState && checkoutState.loyaltyAmount > 0) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly isEnabled = () => {\n return (\n this.props.context.request.user.isAuthenticated &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n );\n };\n\n private async _applyLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty apply button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: Number.parseFloat(this.state.dollarsApplied.toString()) });\n this.setState({\n isFetchingLoyaltyCard: true\n });\n }\n\n private async _removeLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty remove button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: 0 });\n this.setState({\n dollarsApplied: 0\n });\n }\n\n private _onInputChange(event: React.ChangeEvent): void {\n const value = event.currentTarget.value;\n this.setState({ dollarsApplied: value.length > 0 ? Number(value) : Number.parseFloat(value), isFetchingLoyaltyCard: false });\n }\n\n private _onBlur(event: React.FocusEvent): void {\n const num = Number.parseFloat(event.currentTarget.value).toFixed(2);\n const element = document.getElementById(`${this.props.id}-label`) as HTMLInputElement;\n if (element && num) {\n element.value = num;\n this.setState({ dollarsApplied: Number.parseFloat(num) });\n }\n }\n\n private _updateLoyalty(): void {\n if (this.props.moduleState.isDisabled && this.isEnabled()) {\n this._updateEstimate();\n this.props.moduleState.onUpdating();\n }\n }\n\n private _updateEstimate(): void {\n const card = this.props.data.loyaltyCard.result;\n const checkout = this.props.data.checkout.result;\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n const channelConfig = this.props.context.request.channel;\n if (card && card.CardNumber && cart && channelConfig) {\n const currencyCode = channelConfig.Currency || '';\n const loyalPointsRequest = createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput(cart.Id, card.CardNumber, currencyCode);\n\n // @ts-expect-error\n // Due to bug 23214358, this is getting improperly cached. Need to turn on cache bypass for now to work around issue\n loyalPointsRequest._query.options.bypassCache = 'get';\n\n callActionOrExecute(loyalPointsRequest, this.props.context.actionContext)\n .then(async points => {\n this.props.context.actionContext.update(\n new GetLoyaltyTransactionEstimationInput(this.props.context.request.apiSettings),\n points\n );\n const newMaxPoints = points.MaxCurrencyValueOfLoyaltyPoints ?? this._defaultLoyaltyPoints;\n\n // If points are already applied, ensure you don't apply more points than max\n if (checkout && checkout.loyaltyAmount > newMaxPoints) {\n await checkout.updateLoyaltyAmount({ newAmount: newMaxPoints });\n }\n\n this.setState({ dollarsApplied: newMaxPoints, isFetchingLoyaltyCard: false });\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n this.props.context.actionContext.telemetry.debug('Error getting Loyalty Point Redemption Estimate');\n });\n }\n }\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n}\n\nexport default CheckoutLoyalty;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyAdd, ICheckoutLoyaltyRewardPoint, ICheckoutLoyaltyShow, ICheckoutLoyaltyViewProps } from './checkout-loyalty';\n\nconst AddCheckoutLoyalty: React.FC = ({\n heading,\n cardNumber,\n drawer,\n rewardPoints,\n loyaltyAmountContainer,\n appliedLoyaltyAmountContainer,\n loyaltyAmountLabel,\n loyaltyAmountInput,\n loyaltyAmountApplyButton,\n showAppliedAmount,\n loyaltyAmountAppliedText,\n loyaltyAmountAppliedPrice,\n loyaltyAmountRemoveButton\n}) => {\n return (\n <>\n {heading}\n {cardNumber}\n \n {rewardPoints.map((rewardPoint: ICheckoutLoyaltyRewardPoint) => {\n return (\n \n {rewardPoint.title}\n {rewardPoint.availablePointsText}\n {rewardPoint.activePoints}\n {rewardPoint.expiringPointsText}\n {rewardPoint.expiringPoints}\n \n );\n })}\n \n \n {loyaltyAmountLabel}\n {loyaltyAmountInput}\n {loyaltyAmountApplyButton}\n {showAppliedAmount && (\n \n {loyaltyAmountAppliedText}\n {loyaltyAmountAppliedPrice}\n {loyaltyAmountRemoveButton}\n \n )}\n \n \n );\n};\n\nconst ShowCheckoutLoyalty: React.FC = ({ heading, coveredAmountText, amount }) => {\n return (\n <>\n {heading}\n {coveredAmountText}\n {amount}\n \n );\n};\n\nconst CheckoutLoyaltyView: React.FC = props => {\n const { checkoutLoyalty, checkoutErrorRef, alert, viewState, showLoyalty, addLoyalty } = props;\n\n return (\n \n {alert}\n {viewState.isShowLoyalty && }\n {viewState.isShowAddLoyalty && }\n \n );\n};\n\nexport default CheckoutLoyaltyView;\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 { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { AsyncResultStatus, Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\nimport {\n updateLineDeliverySpecificationsAsync,\n validateForCheckoutAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n DeliveryPreferenceType,\n LineDeliverySpecification,\n SimpleProduct,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions,\n getAvailabilitiesForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n validateCartLinesInventory\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n Waiting\n} from '@msdyn365-commerce-modules/utilities';\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport { action, computed, get, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutData } from './checkout.data';\nimport { ICheckoutHeadingData, ICheckoutProps } from './checkout.props.autogenerated';\nimport AlertComponent from './components/alert';\nimport { getInvoicePaymentSummary, IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\nimport { getLineItems, ILineItems } from './components/get-line-items';\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\nimport GuidedFormComponent from './components/guided-form';\nimport PlaceOrderButtonComponent from './components/place-order-button';\nimport placeOrder from './methods/place-order';\nimport { focusOnCheckoutError, setCheckoutErrors } from '../../checkout-errors';\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from '../../common';\n\nexport * from './components/get-line-items';\nexport * from './components/get-order-summary';\n\n/**\n * Device type.\n */\ntype DeviceType = 'Mobile';\n\n/**\n * The Checkout state.\n */\ninterface ICheckoutState {\n errorMessage: string;\n isValidationPassed: boolean;\n isPlaceOrderLoading?: boolean;\n isPlaceOrderClicked?: boolean;\n}\n\n/**\n * Known action error failure states\n */\nexport const enum ActionErrorStatus {\n Timeout = 'Timeout',\n HookTimeout = 'Hook Timeout',\n ServiceUnavailable = 'Service Unavailable'\n}\n\n/**\n * The Checkout view props.\n * @extends ICheckoutProps\n */\nexport interface ICheckoutViewProps extends ICheckoutProps {\n className: string;\n canShow?: boolean;\n isEmptyCart?: boolean;\n isConsentGiven?: boolean;\n hasError?: boolean;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n cartStatus?: string;\n isMobile?: boolean;\n isEditorialMode?: boolean;\n backToShoppingUrl?: string;\n editCartLink?: string;\n hasSalesOrder: boolean;\n hasInvoiceLine?: boolean;\n\n moduleState?: IModuleStateManager;\n telemetryContent?: ITelemetryContent;\n checkoutGuidedFormHasError?: boolean;\n\n checkoutProps: IModuleProps;\n headerProps: INodeProps;\n bodyProps: INodeProps;\n mainProps: INodeProps;\n mainControlProps: INodeProps;\n sideProps: INodeProps;\n sideControlFirstProps: INodeProps;\n sideControlSecondProps: INodeProps;\n termsAndConditionsProps: INodeProps;\n\n guidedForm?: React.ReactNode;\n title?: React.ReactNode;\n loading?: React.ReactNode;\n alert?: React.ReactNode;\n orderSummary?: IOrderSummary;\n invoicePaymentSummary?: IInvoicePaymentSummary;\n lineItems?: ILineItems;\n placeOrderButton?: React.ReactNode;\n termsAndConditions?: React.ReactNode;\n keepShoppingButton?: React.ReactNode;\n orderConfirmation?: React.ReactNode;\n\n checkoutExpressPaymentContainer?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n * The checkout module props interface.\n */\nexport interface ICheckoutModuleProps extends ICheckoutProps, IModuleStateProps {}\n\nconst expressPaymentSectionClassName = 'msc-express-payment-container';\n\n/**\n *\n * CheckoutContainer component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass Checkout extends React.PureComponent {\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\n return this.props.data.checkout?.status;\n }\n\n @computed get isEmptyCart(): boolean {\n if (this.isEditorialMode) {\n // Editorial mode: Ignore empty cart\n return false;\n }\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\n }\n\n @computed get hasError(): boolean {\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\n }\n\n @computed get isEditorialMode(): boolean {\n return this.props.context.request.params.isEditor;\n }\n\n @computed get canPlaceOrder(): boolean {\n const isTermsAndConditionAccepted = this.props.data.checkout.result && this.props.data.checkout.result?.isTermsAndConditionAccepted;\n\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n const disableForOBO = Msdyn365.isOboRequest(this.props.context.request) && !this.isPaidOffByCustomerAccount;\n\n // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\n return (\n this.props.moduleState.isReady &&\n (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted || shouldEnableSinglePaymentAuthorizationCheckout) &&\n (this.state.errorMessage === '' ||\n shouldEnableSinglePaymentAuthorizationCheckout ||\n (this.props.data.checkout.result?.isPaymentVerificationRedirection ?? false)) &&\n !(shouldEnableSinglePaymentAuthorizationCheckout && disableForOBO)\n );\n }\n\n @computed get isPaidOffByCustomerAccount(): boolean {\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\n\n return customerAccountAmount === amountDue;\n }\n\n @computed get isCartReady(): boolean {\n return (\n !!this.props.data.checkout.result?.checkoutCart?.cart &&\n this.props.data.customerInformation.status !== 'LOADING' &&\n this.props.data.featureState.status !== 'LOADING'\n );\n }\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\n const properties =\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\n property => property.Key === 'expressPaymentDetails'\n )?.Value?.StringValue ?? '';\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\n }\n\n public state: ICheckoutState = {\n errorMessage: '',\n isValidationPassed: false,\n isPlaceOrderLoading: false,\n isPlaceOrderClicked: false\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public componentDidMount(): void {\n const {\n resources: { genericErrorMessage }\n } = this.props;\n\n when(\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\n async () => {\n if (this.expressPaymentDetailsFromCartPage) {\n const {\n email,\n tenderLine,\n tokenizedPaymentCard,\n paymentTenderType: paymentTenderTypeFromCartPage,\n isExpressCheckoutAppliedInCartPage,\n isExpressAddressAppliedInCartPage,\n cardPaymentAcceptResult,\n address\n } = this.expressPaymentDetailsFromCartPage;\n\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\n newEmailAddressFromExpressCheckout: email ?? '',\n newTenderLine: tenderLine,\n newTokenizedPaymentCard: tokenizedPaymentCard,\n newPaymentTenderType: paymentTenderTypeFromCartPage,\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\n newCardPaymentAcceptResult: cardPaymentAcceptResult\n });\n\n if (isExpressAddressAppliedInCartPage && address) {\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\n newBillingAddressFromExpressCheckout: address\n });\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\n newShippingAddressFromExpressCheckout: address\n });\n } else {\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\n }\n\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\n newExtensionProperties: [\n {\n Key: 'expressPaymentDetails',\n Value: { StringValue: '' }\n }\n ]\n });\n }\n }\n );\n\n when(\n () => this.hasError,\n () => {\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.context.telemetry.error('Failed to get cart');\n }\n );\n\n when(\n () => {\n return this.isEmptyCart;\n },\n () => {\n this.redirectToCartPage('Cart is empty, but no editCartLink found');\n }\n );\n\n when(\n () => this.isCartReady,\n () => {\n this.validateForCheckout();\n }\n );\n\n reaction(\n () => this.props.moduleState.isReady,\n () => {\n this.onContainerReady();\n }\n );\n\n // Reaction to call place order when isPaymentSectionContainerReady is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerReady,\n async isReady => {\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n isReady &&\n !this.props.data.checkout.result?.redirectAdditionalContext &&\n (!this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.props.data.checkout.result?.isPaymentVerificationRedirection)\n ) {\n if (!this.state.isPlaceOrderLoading) {\n this.setState({ isPlaceOrderLoading: true });\n }\n\n this.props.telemetry.information(\n 'Call onPlaceOrder as reaction when isPaymentSectionContainerReady is updated for single auth payment.'\n );\n\n await this.onPlaceOrder();\n\n // If 3D authentication redirection, don't update isPlaceOrderLoading\n if (!this.props.data.checkout.result.isPaymentVerificationRequired) {\n this.setState({ isPlaceOrderLoading: false });\n }\n }\n }\n );\n\n // Reaction to enable place order button when isPaymentSectionContainerHasError is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isPaymentSectionContainerHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isPaymentSectionContainerHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isBillingAddressHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.data.checkout.result?.updateIsBillingAddressHasError({ newIsBillingAddressHasError: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isBillingAddressHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isBillingAddressHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n // Reaction to enable place order button when redirection is true for new checkout flow.\n reaction(\n () => this.canPlaceOrder,\n async () => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && this.canPlaceOrder) {\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\n newIsPlaceOrderEnabledInRedirection: true\n });\n\n this.props.telemetry.information(\n 'Set isPaymentVerificationRedirection to true as reaction when canPlaceOrder is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when canPlaceOrder is updated to true but isPaymentVerificationRedirection is false for single auth payment.'\n );\n this.props.telemetry.information(\n `isOBORequest is ${Msdyn365.isOboRequest(this.props.context.request)} and canPlaceOrder is ${\n this.canPlaceOrder\n }.`\n );\n }\n } else {\n this.props.telemetry.information('No reaction when canPlaceOrder is updated to false or not single auth payment.');\n }\n }\n );\n\n // Reaction to update the error message when there is a checkout error.\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\n const checkoutPaymentErrorLocation: boolean =\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\n : checkoutErrorLocation;\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n checkoutError &&\n checkoutError.errorMessage &&\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n }\n\n public componentDidUpdate(): void {\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\n this.state.errorMessage\n ) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n\n // eslint-disable-next-line complexity -- ignore the complexity.\n public render(): JSX.Element {\n const {\n moduleState,\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\n resources,\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const { errorMessage } = this.state;\n const { backToShopping, placeOrderText, confirmPaymentText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\n const checkoutClass = classnames('ms-checkout', className);\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\n\n // @ts-expect-error - check the key of slot\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\n\n // @ts-expect-error - check the key of slot\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\n\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n const isMobile =\n this.props.context.request &&\n this.props.context.request.device &&\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\n\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n\n const termsAndConditions =\n this.props.slots.termsAndConditions && this.props.slots.termsAndConditions.length > 0 && this.props.slots.termsAndConditions[0];\n\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout?.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isExpressCheckoutApplied = this.props.data.checkout?.result?.isExpressCheckoutApplied ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasCartDeliveryMode = this.props.data.checkout?.result?.hasCartDeliveryMode;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasGuestCheckoutEmail = this.props.data.checkout?.result?.hasGuestCheckoutEmail;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isTermsAndConditionAccepted = this.props.data.checkout?.result?.isTermsAndConditionAccepted;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isPaymentVerificationRedirection = this.props.data.checkout?.result?.isPaymentVerificationRedirection ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldEnableCheckoutErrorDisplayMessaging =\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\n\n let hasExpressPaymentContainer = false;\n\n if (\n typeof window !== 'undefined' &&\n (document?.getElementsByClassName(expressPaymentSectionClassName) as HTMLCollectionOf)[0]?.style.display === ''\n ) {\n hasExpressPaymentContainer = true;\n }\n\n let viewProps: ICheckoutViewProps = {\n ...this.props,\n className: checkoutClass,\n checkoutErrorRef: this.checkoutErrorRef,\n isEmptyCart: this.isEmptyCart,\n isConsentGiven,\n hasError: this.hasError,\n isPaymentVerificationRedirection: this.props.data.checkout?.result?.isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n hasSalesOrder:\n this.props.data.checkout &&\n this.props.data.checkout.result !== undefined &&\n this.props.data.checkout.result.salesOrder !== undefined,\n hasInvoiceLine,\n cartStatus: this.cartStatus,\n isMobile,\n backToShoppingUrl,\n editCartLink,\n isEditorialMode: this.isEditorialMode,\n orderConfirmation:\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\n ? this.props.slots.orderConfirmation[0]\n : undefined,\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\n headerProps: { className: 'ms-checkout__head' },\n bodyProps: { className: 'ms-checkout__body' },\n mainProps: { className: 'ms-checkout__main' },\n mainControlProps: { className: 'ms-checkout__main-control' },\n sideProps: { className: hasExpressPaymentContainer ? 'ms-checkout__has-express-side' : 'ms-checkout__side' },\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading),\n checkoutExpressPaymentContainer\n };\n\n if (!isConsentGiven && isAuthenticated) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else if (this.isLoading()) {\n viewProps = {\n ...viewProps,\n loading: \n };\n } else if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else {\n viewProps = {\n ...viewProps,\n alert: errorMessage && ,\n canShow: true,\n guidedForm: checkoutInformation ? (\n \n ) : (\n undefined\n ),\n orderSummary: getOrderSummary(this.props),\n invoicePaymentSummary: getInvoicePaymentSummary(this.props),\n lineItems: hasInvoiceLine ? undefined : getLineItems(this.props, this.telemetryContent),\n placeOrderButton: (\n \n ),\n termsAndConditions,\n keepShoppingButton: backToShoppingUrl && (\n \n {backToShopping}\n \n ),\n moduleState,\n telemetryContent: this.telemetryContent,\n checkoutGuidedFormHasError: !!errorMessage\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\n if (isLoading) {\n return AsyncResultStatusCode.LOADING;\n }\n\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\n if (isSuccess) {\n return AsyncResultStatusCode.SUCCESS;\n }\n\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\n if (isFailed) {\n return AsyncResultStatusCode.FAILED;\n }\n\n return undefined;\n }\n\n /**\n * Renders heading.\n * @param checkoutHeading - The checkout heading.\n * @returns React node.\n */\n public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\n return (\n \n );\n }\n\n /**\n * Event handler for heading change event.\n * @param event - The content change event in heading element.\n * @returns The new heading value.\n */\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.checkoutHeading!.text = event.target.value);\n\n /**\n * Checks if cart is loading.\n * @returns True if is loading, false otherwise.\n */\n private readonly isLoading = (): boolean => {\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\n };\n\n /**\n * Get slot items.\n * @param key - The slot key.\n * @returns React node or undefined.\n */\n private readonly getSlotItems = (key: string): React.ReactNode[] | undefined => {\n const { slots } = this.props;\n return slots && slots[key] && slots[key].length > 0 ? slots[key] : undefined;\n };\n\n /**\n * Trigger the payment section container submit when placing order.\n */\n private readonly triggerPaymentWithPlaceOrder = async (): Promise => {\n this.setState({ isPlaceOrderLoading: true });\n\n await this.props.data.checkout.result?.updateShouldTriggerPaymentWithPlaceOrder({\n newShouldTriggerPaymentWithPlaceOrder: !this.props.data.checkout.result.shouldTriggerPaymentWithPlaceOrder\n });\n };\n\n /**\n * On place order.\n * @returns Void promise.\n */\n private readonly onPlaceOrder = async (): Promise => {\n const {\n resources: { checkoutOutOfStockErrorMessage },\n context: {\n actionContext,\n app: {\n config: { enableStockCheck = false }\n }\n },\n slots: { orderConfirmation },\n data: { checkout, products }\n } = this.props;\n\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\n this.setState({ isPlaceOrderClicked: true });\n\n // If hasInvoiceLine is true, no inventory check\n if (\n !this.props.data.checkout.result?.checkoutCart.hasInvoiceLine &&\n enableStockCheck &&\n (await this.isOverMaxQuantity((await checkout).checkoutCart.cart, await products))\n ) {\n this.setState({\n errorMessage: checkoutOutOfStockErrorMessage\n });\n this.props.context.telemetry.error(checkoutOutOfStockErrorMessage);\n } else {\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\n\n const updatedCartVersion = await this.updateCartLineEmailAddress(this.props.data.checkout.result?.guestCheckoutEmail || '');\n\n await placeOrder(\n actionContext,\n this.props.data.checkout.result,\n this.props.data.products.result,\n !hasOrderConfirmation,\n updatedCartVersion,\n this.props.data.checkout.result?.isPaymentVerificationRedirection\n ).catch(error => {\n this.handleCheckoutError(error);\n });\n\n await checkout.result?.updateIsPaymentSectionContainerReady({ newIsPaymentSectionContainerReady: false });\n }\n };\n\n /**\n * Update receipt email address for electronic cart line.\n * @param newGuestCheckoutEmail - The guest checkout email.\n * @returns The updated cart version.\n */\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n let electronicDeliveryInvoiceAddress: Address;\n\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n if (hasShippingAddress && this.props.config.useShippingAddressAsElectronicDeliveryInvoiceAddress) {\n electronicDeliveryInvoiceAddress = this.props.data.checkout?.result?.shippingAddress as Address;\n }\n\n const emailDeliveryCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\n );\n\n let updatedCartVersion: number | undefined;\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\n return {\n LineId: line.LineId,\n DeliverySpecification: {\n DeliveryModeId: emailDeliveryModeCode,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail,\n DeliveryAddress: hasShippingAddress ? electronicDeliveryInvoiceAddress : undefined\n }\n };\n });\n\n await updateLineDeliverySpecificationsAsync(\n { callerContext: this.props.context.actionContext },\n (await this.props.data.checkout).checkoutCart.cart.Id,\n lineDeliverySpecifications\n )\n .then(updatedCart => {\n updatedCartVersion = updatedCart.Version;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\n });\n }\n\n return updatedCartVersion;\n };\n\n /**\n * Return true if any product in the cart is over its max quantity.\n * @param cart -- The checkout cart.\n * @param products -- The checkout products.\n * @returns - Is any product in the cart is over max quantity.\n */\n private readonly isOverMaxQuantity = async (cart: Cart, products: SimpleProduct[]): Promise => {\n let isOverMaxQuantity = false;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n await getAvailabilitiesForCartLineItems(\n new ProductAvailabilitiesForCartLineItems(this.props.context.actionContext.requestContext.apiSettings),\n this.props.context.actionContext\n )\n .then(productInventoryInformation => {\n const productsThatShouldValidateInventory: IProductInventoryInformation[] = [];\n\n cart.CartLines?.map(cartline => {\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\n\n // If product is non-stocked or cartline is electronic delivery, then no inventory check\n const isStockedItem = cartlineProduct?.Behavior?.IsStockedProduct;\n const isEmailDelivery =\n cartline.DeliveryMode && cartline.DeliveryMode !== '' ? cartline.DeliveryMode === emailDeliveryModeCode : false;\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\n if (!shouldSkipInventoryCheck && ArrayExtensions.hasElements(productInventoryInformation)) {\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n if (foundProductAvailability) {\n productsThatShouldValidateInventory.push(foundProductAvailability);\n }\n }\n });\n\n const cartLinesInventoryValidation = validateCartLinesInventory(\n cart.CartLines ?? [],\n productsThatShouldValidateInventory,\n this.props.context.actionContext,\n products,\n emailDeliveryModeCode\n );\n\n // If is invalid then exceeds the available quantity\n isOverMaxQuantity = !cartLinesInventoryValidation.isValid;\n return isOverMaxQuantity;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[getAvailabilitiesForCartLineItems] Unable to get availabilities for products in checkout cart');\n });\n\n return isOverMaxQuantity;\n };\n\n /**\n * Gets active child in module state.\n * @returns - The module state manager collection.\n */\n private readonly getActiveChildModuleStates = (): IModuleStateManager[] => {\n const { childIds, getModule } = this.props.moduleState;\n return childIds\n .map(getModule)\n .filter((state): state is IModuleStateManager => !!state && !state.isDisabled && state.hasModuleState);\n };\n\n /**\n * On container ready.\n */\n private readonly onContainerReady = (): void => {\n this.props.telemetry.information('Checkout onContainerReady is called.');\n\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\n\n /**\n * Redirects to cart page.\n * @param notFoundEditCartLinkMessage - Not found edit cart link message.\n */\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n if (window && editCartLink) {\n window.location.assign(editCartLink);\n } else {\n this.setState({\n errorMessage: this.props.resources.genericErrorMessage\n });\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\n }\n };\n\n /**\n * Validates for checkout.\n * @param retry - Retry flag.\n */\n private readonly validateForCheckout = (retry: boolean = true): void => {\n const notFoundEditCartLinkMessage = \"Cart doesn't pass validation, but no editCartLink found\";\n const cart = this.props.data.checkout.result!.checkoutCart.cart;\n const { Id, Version } = cart;\n if (this._shouldValidateQuantityLimits()) {\n if (Version && Id) {\n validateForCheckoutAsync({ callerContext: this.props.context.actionContext, bypassCache: 'none' }, Id, Version)\n .then((result: CartLineValidationResults) => {\n if (result.ValidationFailuresByCartLines?.length !== 0) {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n } else {\n this.setState({ isValidationPassed: true });\n }\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n if (retry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n const cartState = this.props.data.checkout.result?.checkoutCart;\n cartState\n ?.refreshCart({})\n .then(() => {\n this.validateForCheckout(false);\n })\n .catch((refreshError: Error) => {\n this.props.telemetry.warning(refreshError.message);\n this.props.telemetry.debug('Unable to refresh Cart');\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n } else {\n this.setState({ isValidationPassed: true });\n }\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _shouldValidateQuantityLimits = (): boolean => {\n const featureStatuses = this.props.data.featureState.result;\n const isECommerceQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n\n if (isECommerceQuantityLimitsFeatureEnabledInHq) {\n return true;\n }\n\n const isOrderQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')\n ?.IsEnabled || false;\n\n if (!isOrderQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n const customerInfo = this.props.data.customerInformation.result;\n const isB2BSite = isChannelTypeB2B(this.props.context.actionContext.requestContext);\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n (customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && isB2BSite) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !isB2BSite)));\n\n return isOrderQuantityLimitsFeatureEnabledInSiteSettings ?? false;\n } else {\n const cartConfiguration = this.props.data.cartConfiguration?.result;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n };\n\n /**\n * Save the address as Shipping and Billing address.\n * @param tokenizedPaymentCard - Tokenized payment card.\n */\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\n const checkoutState = this.props.data.checkout.result;\n\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\n\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\n }\n };\n\n /**\n * Get address from tokenizedPaymentCard.\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\n * @returns The address.\n */\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\n const address: Address = {\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\n Name: tokenizedPaymentCard.NameOnCard,\n Street: tokenizedPaymentCard.Address1,\n StreetNumber: tokenizedPaymentCard.Address2,\n City: tokenizedPaymentCard.City,\n State: tokenizedPaymentCard.State,\n ZipCode: tokenizedPaymentCard.Zip,\n Phone: tokenizedPaymentCard.Phone\n };\n\n return address;\n };\n\n /**\n * Handle checkout errors.\n * @param error -- The error on checkout api failure.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly handleCheckoutError = (error: any) => {\n // Here checkout failure message will be shown if there is any error in checkout api except data validation.\n const {\n resources: {\n genericErrorMessage,\n invalidCartVersionErrorMessage,\n missingRequiredCartTenderLinesErrorMessage,\n checkoutApiFailureErrorMessage,\n invoiceCheckoutApiFailureErrorMessage\n },\n context: { actionContext }\n } = this.props;\n const checkoutResult = this.props.data.checkout.result;\n const apiError = error && error.message;\n if (error?.statusCode === 500) {\n const errorMessage = checkoutApiFailureErrorMessage;\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n this.setState({ isPlaceOrderLoading: false });\n return;\n }\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\n const errorCode = error && error.name ? error.name : '';\n // apiError message will be used if errorcode resource/enums is unavailable\n setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\n } else {\n let errorMessage = genericErrorMessage;\n this.setState({ isPlaceOrderClicked: false });\n\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n errorMessage = invalidCartVersionErrorMessage;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\n // If api error is not available show generic message\n errorMessage = apiError || genericErrorMessage;\n } else {\n if (error.status === ActionErrorStatus.Timeout || error.status === ActionErrorStatus.ServiceUnavailable) {\n errorMessage = checkoutResult?.checkoutCart.hasInvoiceLine\n ? invoiceCheckoutApiFailureErrorMessage\n : checkoutApiFailureErrorMessage;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n error.data?.AdditionalContext &&\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\n ) {\n return;\n }\n\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n }\n };\n}\n\nexport default Checkout;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutViewProps,\n ILineItem,\n ILineItemDeliveryGroup,\n ILineItems,\n IOrderSummary,\n IPickUpAtStore,\n IEmailDelivery,\n IInvoicePaymentSummary\n} from './index';\n\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\n\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {pickUpAtStore && }\n {emailDelivery && }\n \n);\n\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\n \n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC = ({\n LineItemDeliveryGroup,\n LineItemList,\n heading,\n lineItems,\n lineItemWraper,\n lineItemWraperIcon\n}) => (\n \n {lineItemWraperIcon}\n {lineItemWraper}\n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {emailDelivery && }\n \n);\n\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const LineItemsComponent: React.FC = ({\n LineItems,\n Header,\n heading,\n editLink,\n itemsForPickup,\n itemsForShip,\n itemsForEmail,\n itemsGroupWithMulitplePickupMode\n}) => (\n \n \n {heading}\n {editLink}\n \n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\n {itemsGroupWithMulitplePickupMode !== undefined\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\n return ;\n })\n : null}\n \n);\n\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.subtotal}\n {lines.shipping}\n {lines.otherCharge}\n {lines.tax}\n {lines.totalDiscounts}\n {lines.loyalty}\n {lines.customerAccount}\n {lines.giftCard}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.invoices}\n {lines.giftCard}\n {lines.loyalty}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst CheckoutView: React.FC = props => {\n const {\n isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n canShow,\n checkoutProps,\n headerProps,\n hasSalesOrder,\n hasInvoiceLine,\n bodyProps,\n mainProps,\n mainControlProps,\n sideProps,\n sideControlFirstProps,\n sideControlSecondProps,\n termsAndConditionsProps,\n orderConfirmation,\n loading,\n alert,\n title,\n guidedForm,\n orderSummary,\n invoicePaymentSummary,\n lineItems,\n placeOrderButton,\n termsAndConditions,\n keepShoppingButton,\n checkoutExpressPaymentContainer,\n checkoutErrorRef\n } = props;\n\n return (\n \n {!hasSalesOrder && !checkoutExpressPaymentContainer && {title}}\n {!hasSalesOrder && isPaymentVerificationRedirection && shouldEnableSinglePaymentAuthorizationCheckout && !alert && !loading && (\n \n )}\n {!hasSalesOrder && (\n \n {loading}\n {alert}\n {canShow && (\n <>\n \n {checkoutExpressPaymentContainer}\n {checkoutExpressPaymentContainer && {title}}\n {guidedForm}\n {termsAndConditions}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n {!hasInvoiceLine\n ? orderSummary && \n : invoicePaymentSummary && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n {lineItems && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n )}\n \n )}\n {hasSalesOrder && orderConfirmation}\n \n );\n};\n\nexport default CheckoutView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IAlertProps {\n message: string;\n}\n\nconst CheckoutAlert: React.FC = ({ message }) => (\n

\n {message}\n

\n);\n\nexport default CheckoutAlert;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IInvoicePaymentSummary {\n heading?: React.ReactNode;\n lines?: IInvoiceSummaryLines;\n}\nexport const getInvoicePaymentSummary = (input: ICheckoutProps): IInvoicePaymentSummary => {\n const {\n data: { checkout },\n resources: { totalAmountLabel, invoiceLabel, invoiceSummaryTitle },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutCart = get(checkout, 'result.checkoutCart');\n const cart = get(checkout, 'result.checkoutCart.cart');\n\n return {\n heading:

{invoiceSummaryTitle}

,\n lines: checkoutCart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: totalAmountLabel,\n invoiceLabel,\n cart,\n context,\n typeName,\n telemetry,\n id,\n checkoutState: checkout.result\n })\n : 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 { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\ntype deliveryType = 'pickup' | 'ship' | 'email';\n\nexport interface IPickUpAtStore {\n PickUpAtStore: INodeProps;\n label: React.ReactNode;\n location: React.ReactNode;\n}\n\nexport interface IEmailDelivery {\n EmailDelivery: INodeProps;\n label: React.ReactNode;\n}\n\nexport interface ILineItem {\n LineId: string;\n LineItem: INodeProps;\n item?: React.ReactNode;\n pickUpAtStore?: IPickUpAtStore;\n emailDelivery?: IEmailDelivery;\n}\n\nexport interface ILineItemDeliveryGroup {\n LineItemDeliveryGroup: INodeProps;\n LineItemList: INodeProps;\n heading: React.ReactNode;\n lineItemWraper?: React.ReactNode;\n lineItemWraperIcon?: React.ReactNode;\n lineItems: ILineItem[];\n}\n\nexport interface ILineItems {\n LineItems: INodeProps;\n Header: INodeProps;\n heading: React.ReactNode;\n editLink: React.ReactNode;\n itemsForPickup?: ILineItemDeliveryGroup;\n itemsForShip?: ILineItemDeliveryGroup;\n itemsForEmail?: ILineItemDeliveryGroup;\n itemsGroupWithMulitplePickupMode?: ILineItemDeliveryGroup[];\n}\n\nexport const getLineItems = (input: ICheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n const emailDeliveryModeCode = get(input, 'context.request.channel.EmailDeliveryModeCode');\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const _getDeliveryLocation = (cartLine: CartLine): string => {\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\n return '';\n }\n\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\n });\n\n return locationMatch && locationMatch.OrgUnitName;\n };\n\n const _getProduct = (productId: number): SimpleProduct | undefined => {\n const products = get(input, 'data.products.result') || [];\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n };\n\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\n const {\n id,\n typeName,\n context,\n config: { imageSettings, showShippingChargesForLineItems },\n resources: {\n quantityDisplayString,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n productDimensionTypeAmount,\n configString,\n inputQuantityAriaLabel,\n discountStringText,\n shippingCharges\n },\n context: {\n request: { gridSettings }\n }\n } = input;\n const catalogs = input.data.catalogs?.result;\n if (!product) {\n return;\n }\n\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n const currencyCode = get(input, 'context.request.channel.Currency');\n return (\n \n );\n };\n\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\n const {\n resources: { pickUpAtStoreWithLocationText }\n } = input;\n\n return {\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\n label: {pickUpAtStoreWithLocationText},\n location:
{pickupDeliveryLocation}
\n };\n };\n\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\n const {\n resources: { emailDeliveryText }\n } = input;\n\n return {\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\n label: {emailDeliveryText}\n };\n };\n\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\n return items.map(cartLine => {\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const isPickUp = _getCartPickDeliveryMode(cartLine);\n const isEmailDelivery =\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n return {\n LineId: cartLine.LineId || '',\n LineItem: { className: 'ms-checkout__line-item' },\n item: _getLineItemComponent(cartLine),\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined,\n emailDelivery: isEmailDelivery ? _getEmailDeliveryComponents() : undefined\n };\n });\n };\n\n const _getCartPickDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode ===\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode === pickupDeliveryModeCode\n : false;\n };\n\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode !==\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode !== pickupDeliveryModeCode\n : false;\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? shippingCountCheckoutLineItem\n : type === 'pickup'\n ? inStorePickUpLabel\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _countItems = (items: CartLine[]): number => {\n return items.reduce((count, item) => {\n return count + (item.Quantity || 0);\n }, 0);\n };\n\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n if (type === 'ship') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? _getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n } else if (type === 'pickup') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? _getCartPickDeliveryMode(cartLine) : null\n );\n }\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\n };\n\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\n if ((pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) && (type === 'pickup' || type === 'email')) {\n return;\n }\n\n const items = _filterItemsByDiliveryType(type);\n\n if (items.length === 0) {\n return undefined;\n }\n\n const count = _countItems(items);\n const title = _getGroupTitleComponent(count, type);\n\n return {\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n heading:
{title}
,\n lineItems: _getLineItemsComponents(items)\n };\n };\n\n const _getLineItems = (): ILineItems | undefined => {\n const {\n context,\n config: { lineItemsHeading },\n data: { products },\n resources: { editCartText }\n } = input;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.EditCart);\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const groupClass = retailMultiplePickUpOptionEnabled ? ' multiple-pickup-enabled' : '';\n if (!cart || !cart.CartLines || cart.CartLines.length === 0 || !products) {\n return undefined;\n }\n\n return {\n LineItems: { className: `ms-checkout__line-items${groupClass}` },\n Header: { className: 'ms-checkout__line-items-header' },\n heading: lineItemsHeading && lineItemsHeading.text && (\n \n ),\n editLink: (\n \n {editCartText}\n \n ),\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\n itemsForShip: _getLineItemsByDeliveryType('ship'),\n itemsForEmail: _getLineItemsByDeliveryType('email'),\n itemsGroupWithMulitplePickupMode: retailMultiplePickUpOptionEnabled\n ? _getLineItemsByDeliveryTypeWithMulitplePickupMode()\n : undefined\n };\n };\n\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { lineItemsHeading }\n } = input;\n if (lineItemsHeading) {\n lineItemsHeading.text = event.target.value;\n }\n };\n\n const _getGroupTitleComponentWithMultiplePickUp = (\n count: number,\n type: deliveryType,\n deliveryMode?: string,\n fulFillmentStoreId?: string\n ): string => {\n const {\n resources: { itemLabel, itemsLabel }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n let pickupDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n pickupDeliveryModeDesc = pickupDeliveryModeDesc\n ? pickupDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === deliveryMode)?.Description!;\n });\n\n const pickupTitle: string = `${pickupDeliveryModeDesc}, ${fulFillmentStoreId}`;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? `(${count} ${suffix})`\n : type === 'pickup'\n ? `${pickupTitle} (${count} ${suffix})`\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _filterItemsByMultiplePickupMode = (): CartLine[][] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cart.CartLines);\n const cartLinesGroup: CartLine[] = [];\n const cartLinesGrp: CartLine[][] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryMode, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryMode] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n cartLinesGrp.push(cartLine);\n });\n });\n\n return cartLinesGrp;\n };\n\n const _getLineItemsByDeliveryTypeWithMulitplePickupMode = (): ILineItemDeliveryGroup[] | undefined => {\n if (pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) {\n return;\n }\n\n const {\n resources: { multiplePickUpLabel, shippingLable }\n } = input;\n\n const items = _filterItemsByMultiplePickupMode();\n\n if (items.length === 0) {\n return undefined;\n }\n\n const lineItemDeliveryGroup: ILineItemDeliveryGroup[] = [];\n items.map(item => {\n const count = _countItems(item);\n const cartLine = item[0];\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const type: deliveryType =\n cartLine.FulfillmentStoreId && cartLine.DeliveryMode\n ? 'pickup'\n : cartLine.FulfillmentStoreId === '' &&\n cartLine.DeliveryMode === emailDeliveryModeCode &&\n !StringExtensions.isNullOrEmpty(emailDeliveryModeCode)\n ? 'email'\n : 'ship';\n const title = _getGroupTitleComponentWithMultiplePickUp(count, type, cartLine.DeliveryMode, pickupDeliveryLocation);\n const groupTitle = type === 'pickup' ? multiplePickUpLabel : type === 'ship' ? shippingLable : 'email';\n const iconClass = `ms-checkout__line-items-group-title-multiple-pickup-${type}icon`;\n lineItemDeliveryGroup.push({\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group multiple-pickup', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n lineItemWraperIcon:
,\n lineItemWraper:
{groupTitle}
,\n heading:
{title}
,\n lineItems: _getLineItemsComponents(item)\n });\n });\n\n return lineItemDeliveryGroup;\n };\n\n return _getLineItems();\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 { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IOrderSummary {\n orderSummaryProps: INodeProps;\n heading?: React.ReactNode;\n lines?: IOrderSummaryLines;\n}\nexport const getOrderSummary = (input: ICheckoutProps): IOrderSummary => {\n const {\n config: { orderSummaryHeading },\n data: { checkout },\n resources: {\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n otherCharges,\n customerAccountLabel\n },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutState = get(checkout, 'result');\n const cart = get(checkout, 'result.checkoutCart.cart');\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\n const channelConfiguration = context.request.channel!;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = context.request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { orderSummaryHeading }\n } = input;\n if (orderSummaryHeading) {\n orderSummaryHeading.text = event.target.value;\n }\n };\n\n return {\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\n heading: orderSummaryHeading && orderSummaryHeading.text && (\n \n ),\n lines: showLineItems\n ? OrderSummary({\n checkoutState,\n cart,\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n context,\n typeName,\n id,\n channelConfiguration,\n telemetry,\n otherChargeLabel: otherCharges,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- existing property.\n isTaxIncludedInPrice: cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled,\n customerAccountLabel\n })\n : 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 { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport * as React from 'react';\nimport { focusOnCheckoutError, setCheckoutErrorFocus } from '../../../checkout-errors';\n\nexport interface ICheckoutGuidedCardProps {\n id?: string;\n step: number;\n title?: HeadingType;\n disabled?: boolean; // Module is not available\n isActive?: boolean; // Step === currentStep\n isVisted?: boolean; // Step < currentStep\n isExpanded?: boolean;\n isReady?: boolean;\n isPending?: boolean;\n isUpdating?: boolean;\n isSubmitting?: boolean;\n isCancelAllowed?: boolean;\n isMobile?: boolean;\n hasInitialized?: boolean;\n hasControlGroup?: boolean;\n shouldFocus?: boolean;\n children: React.ReactNode;\n moduleState?: IModuleStateManager;\n actionContext?: IActionContext;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n telemetryContent?: ITelemetryContent;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n onNext(): void;\n}\n\n/**\n *\n * CheckoutGuidedCard component.\n * @extends {React.Component}\n */\nclass CheckoutGuidedCard extends React.PureComponent {\n private readonly editButtonRef: React.RefObject = React.createRef();\n\n private readonly formCardRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: ICheckoutGuidedCardProps) {\n super(props);\n this.payLoad = getPayloadObject('click', props.telemetryContent!, '');\n }\n\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\n /**\n * Move to next step when current step is ready.\n */\n const { isActive, isReady, onNext, isVisted, onEdit, shouldFocus, children, moduleState, actionContext } = this.props;\n\n // Move to next step after completing the current step\n if (isActive && isReady) {\n onNext();\n }\n\n // Set the focus to Edit button once edit button appear\n // (It happens when current step switch to isReady status)\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\n const canEdit = isReady && isVisted && !!onEdit;\n if (!prevCanEdit && canEdit) {\n this.focusOnEditButton();\n this.scrollToTitle();\n }\n\n // Set the focus to the first focusable element\n // (It happens when current step switch to isUpdating status)\n if (prevProps.isReady && !isReady) {\n this.focusOnFirstFocusableElement();\n }\n\n // Set the focus for the checkout error\n if (shouldFocus && actionContext) {\n const childrenModules = this._getModules(children);\n\n // Set the focus for the module within the checkout section container\n if (childrenModules.length > 0) {\n for (const childModule of childrenModules) {\n const childId = this._getId(childModule);\n const childState = moduleState?.getModule(childId);\n\n if (childState?.hasError) {\n setCheckoutErrorFocus(childId, actionContext);\n return;\n }\n }\n } else {\n focusOnCheckoutError(this.formCardRef, actionContext);\n }\n }\n }\n\n public render(): JSX.Element | null {\n const {\n title,\n disabled,\n isExpanded,\n isActive,\n isVisted,\n children,\n isReady,\n isPending,\n isUpdating,\n hasInitialized,\n hasControlGroup,\n onEdit,\n resource\n } = this.props;\n const { changeBtnLabel } = resource;\n\n this.payLoad.contentAction.etext = TelemetryConstant.CheckoutChange;\n const changeBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\n\n return (\n \n
\n {this.getTitle()}\n\n {canEdit && (\n \n {changeBtnLabel}\n \n )}\n
\n\n \n
{children}
\n\n {this.renderFooder()}\n
\n \n );\n }\n\n private readonly renderFooder = (): JSX.Element | null => {\n const { isVisted, isReady, isSubmitting, isCancelAllowed, hasControlGroup, onCancel, onSubmit, resource } = this.props;\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\n\n const canSubmit = !isReady && onSubmit;\n const canCancel = !isReady && isVisted && isCancelAllowed && onCancel;\n\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\n return null;\n }\n\n this.payLoad.contentAction.etext = isVisted ? TelemetryConstant.Save : TelemetryConstant.SaveContinue;\n const saveBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
\n {canSubmit && (\n \n {isVisted && isCancelAllowed ? saveBtnLabel : saveAndContinueBtnLabel}\n \n )}\n {canCancel && (\n \n {cancelBtnLabel}\n \n )}\n
\n );\n };\n\n private readonly focusOnFirstFocusableElement = (): void => {\n const node = this.formCardRef.current as HTMLElement;\n const focussableElements = `\n a:not([disabled]),\n button:not([disabled]),\n input[type=submit]:not([disabled]),\n input[type=checkbox]:not([disabled]),\n input[type=text]:not([disabled]),\n input[type=radio]:not([disabled]),\n input[type=password]:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\n `;\n\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\n child && child.focus && child.focus();\n };\n\n private readonly focusOnEditButton = (): void => {\n // Focus on edit button\n const editButton =\n this.editButtonRef &&\n this.editButtonRef.current &&\n this.editButtonRef.current.focus &&\n (this.editButtonRef.current as HTMLElement);\n editButton && editButton.focus();\n };\n\n private readonly scrollToTitle = (): void => {\n // Scroll window to the title of the step that was just completed only in mobile viewport\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\n formCard && formCard.scrollIntoView();\n };\n\n private readonly getTitle = (): JSX.Element => {\n const { step, title } = this.props;\n const { headingTag: Tag = 'h2', text = '' } = title || {};\n return (\n \n \n {step + 1}. {` `}\n \n {text && {text}}\n \n );\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _getModules = (item: React.ReactNode): any[] => {\n return get(item, 'props.modules.primary') || [];\n };\n\n private readonly _getId = (item: React.ReactNode): string => {\n return get(item, 'id') || '';\n };\n}\n\nexport default CheckoutGuidedCard;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport get from 'lodash/get';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport GuidedCard from './guided-card';\n\nexport interface ICheckoutGuidedFormProps {\n items: React.ReactNode[];\n moduleState: IModuleStateManager;\n disableGuidedCheckoutFlow?: boolean;\n isMobile?: boolean;\n isEditor?: boolean;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n requestContext?: ICoreContext;\n telemetryContent?: ITelemetryContent;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n hasError?: boolean;\n hasShippingAddress?: boolean | undefined;\n hasCartDeliveryMode?: boolean | undefined;\n hasGuestCheckoutEmail?: boolean | undefined;\n isTermsAndConditionAccepted?: boolean | undefined;\n shouldEnableCheckoutErrorDisplayMessaging?: boolean;\n shouldFocusOnCheckoutError?: boolean | undefined;\n}\n\ninterface ICheckoutGuidedFormState {\n currentStep: number;\n}\n\nconst paymentInstrumentModuleId = 'payment-instrument';\n\n/**\n *\n * CheckoutGuidedForm component.\n * @extends {React.Component}\n */\n@observer\nclass CheckoutGuidedForm extends React.PureComponent {\n @computed public get hasMissingInfo(): boolean {\n if (\n this.props.hasShippingAddress === false ||\n this.props.hasCartDeliveryMode === false ||\n this.props.hasGuestCheckoutEmail === false ||\n this.props.isTermsAndConditionAccepted === false\n ) {\n return true;\n }\n\n return false;\n }\n\n @computed public get hasOrderError(): boolean {\n for (const item of this.props.items) {\n const childId = this.getId(item);\n const state = this.props.moduleState.getModule(childId);\n\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n state.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (!isPaymentSectionContainer && !state.isDisabled && state.hasError) {\n return true;\n }\n }\n\n return false;\n }\n\n public state: ICheckoutGuidedFormState = {\n currentStep: 0\n };\n\n public componentDidMount(): void {\n /**\n * Append child modules.\n */\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\n this.props.moduleState.init({ childIds });\n }\n\n public render(): JSX.Element | null {\n const { moduleState, items, resource } = this.props;\n if (!items || !moduleState) {\n return null;\n }\n\n const shouldCollapseAfterRedirect =\n this.props.isPaymentVerificationRedirection &&\n this.props.shouldEnableSinglePaymentAuthorizationCheckout &&\n !this.props.hasError &&\n !this.hasMissingInfo &&\n !this.hasOrderError;\n\n let previousModuleHasError = false;\n const childModule = this._enableAfterModule();\n return (\n
\n {items.map((item: React.ReactNode) => {\n const childId = this.getId(item);\n const step = this.getStep(childId);\n const title = this.getHeading(item);\n const state = this.props.moduleState.getModule(childId);\n const {\n isReady,\n isPending,\n isUpdating,\n isDisabled,\n isCancelAllowed,\n onEdit,\n onCancel,\n onSubmit,\n hasModuleState,\n hasInitialized,\n hasError\n } = state || ({} as IModuleStateManager);\n\n let shouldFocus =\n !!this.props.shouldEnableCheckoutErrorDisplayMessaging &&\n !!this.props.shouldFocusOnCheckoutError &&\n !previousModuleHasError &&\n hasError;\n previousModuleHasError = previousModuleHasError || shouldFocus;\n\n return (\n \n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\n \n );\n })}\n
\n );\n }\n\n private readonly getEnabledModules = (): string[] => {\n const {\n moduleState: { childIds, getModule }\n } = this.props;\n return childIds.filter((childId: string) => {\n const state = getModule(childId);\n return !!state && !state.isDisabled;\n });\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _enableAfterModule = (): string => {\n const childIds: string[] = this.props.items.map((item: React.ReactNode) => get(item, 'props.id')).filter(Boolean);\n let id: string = '';\n for (let i = 0; i < childIds.length - 1; i++) {\n const childId = childIds[i];\n const nextChildId = childIds[i + 1];\n if (this._isPaymentSectionContainer(childId) && nextChildId) {\n id = nextChildId;\n }\n }\n return id;\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n const sectionState = this.props.moduleState.getModule(moduleId);\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n sectionState.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (isPaymentSectionContainer) {\n return true;\n }\n return false;\n };\n\n private readonly getStep = (id: string): number => {\n return this.getEnabledModules().indexOf(id);\n };\n\n private readonly getId = (item: React.ReactNode): string => {\n return get(item, 'props.id') || '';\n };\n\n private readonly getHeading = (item: React.ReactNode): Heading => {\n return get(item, 'props.config.heading') || '';\n };\n\n private readonly isExpanded = (step: number, moduleChildId: string, childId: string): boolean => {\n if (this.props.isEditor) {\n // Editorial mode: Expand all the drawers\n return true;\n }\n if (this.props.shouldEnableSinglePaymentAuthorizationCheckout && moduleChildId === childId) {\n return true;\n }\n return step > -1 && step <= this.state.currentStep;\n };\n\n private readonly isActive = (step: number): boolean => {\n return step === this.state.currentStep;\n };\n\n private readonly isVisted = (step: number): boolean => {\n return step > -1 && step < this.state.currentStep;\n };\n\n private readonly onNext = (): void => {\n this.setState({\n currentStep: this.state.currentStep + 1\n });\n };\n}\n\nexport default CheckoutGuidedForm;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\ninterface ICheckoutPlaceOrderButtonProps {\n canPlaceOrder: boolean;\n checkoutBtnText: string;\n telemetryContent?: ITelemetryContent;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n isPlaceOrderLoading?: boolean;\n isExpressCheckoutApplied?: boolean;\n isPaymentVerificationRedirection?: boolean;\n placeOrder(): Promise;\n}\n\nconst buttonsStates: React.Dispatch>[] = [];\n\n/**\n * On place order function.\n * @param isBusy -Check is busy.\n * @param canPlaceOrder -Check can place order.\n * @param placeOrder -Place order function.\n * @returns Set state of button.\n */\nconst onPlaceOrderHandler = (isBusy: boolean, canPlaceOrder: boolean, placeOrder: () => Promise) => async () => {\n if (isBusy || !canPlaceOrder) {\n return;\n }\n buttonsStates.map(buttonSetState => {\n buttonSetState(true);\n return true;\n });\n await placeOrder();\n};\n\nconst CheckoutPlaceOrderButton: React.FC = ({\n checkoutBtnText,\n canPlaceOrder,\n placeOrder,\n telemetryContent,\n shouldEnableSinglePaymentAuthorizationCheckout,\n isPlaceOrderLoading,\n isExpressCheckoutApplied,\n isPaymentVerificationRedirection\n}) => {\n const [isBusy, setIsBusy] = useState(false);\n buttonsStates.push(setIsBusy);\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\n return (\n \n {checkoutBtnText}\n \n );\n }\n\n return (\n \n {checkoutBtnText}\n \n );\n};\n\nexport default CheckoutPlaceOrderButton;\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 { SalesOrder } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { CartCheckout } from '../../../common/checkout';\n\nexport const OPERATIONS = {\n PayCard: 201,\n PayGiftCertificate: 214,\n PayLoyalty: 207,\n PayCustomerAccount: 202\n};\n\nexport default async (\n ctx: IActionContext,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n): Promise => {\n return CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\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 { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { PlaceOrder } from '../../../common/place-order';\n\nexport default async (\n ctx: IActionContext,\n checkoutState: ICheckoutState | undefined,\n orderedProducts: SimpleProduct[] | undefined,\n redirect: boolean,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n) => {\n return PlaceOrder(ctx, checkoutState, orderedProducts, redirect, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../gift-card-balance-check.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n resources: {\n balanceCheckButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On apply function.\n * @param onApplyGiftCard -On apply gift card.\n * @returns Apply gift card.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number function.\n * @param onEnterGiftCardNumber -On enter gift card number.\n * @returns On gift card enter pin function result.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On change pin function.\n * @param onEnterGiftCardPin -On enter gift card pin.\n * @returns On enter gift card pin function result.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On change exp function.\n * @param onEnterGiftCardExp -On enter gift card.\n * @returns On enter gift card function result.\n */\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n resources: {\n balanceCheckButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-gift-card-balance-check__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-gift-card-balance-check__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-gift-card-balance-check__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-gift-card-balance-check__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {balanceCheckButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { GiftCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: GiftCard;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-gift-card-balance-check__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {` `}({giftCardAvailableBalanceLabel}\n {` `}\n {balance})\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\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 getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { getForm, IForm } from './components/get-form';\nimport { getItem, IItem } from './components/get-item';\nimport { IGiftCardBalanceCheckProps } from './gift-card-balance-check.props.autogenerated';\n\ninterface IGiftCardBalanceCheckState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n giftCard?: GiftCard;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface IGiftCardBalanceCheckModuleProps extends IGiftCardBalanceCheckProps<{}> {}\n\nexport interface IGiftCardBalanceCheckViewProps extends IGiftCardBalanceCheckProps<{}>, IGiftCardBalanceCheckState {\n className?: string;\n\n form: IForm;\n item?: IItem;\n\n giftCardBalanceCheckProps: IModuleProps;\n\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardPin: string): void;\n enterGiftCardExp?(giftCardExp: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * GiftCardBalanceCheck component.\n * @extends {React.Component}\n */\nexport class GiftCardBalanceCheck extends React.Component {\n public state: IGiftCardBalanceCheckState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n public shouldComponentUpdate(nextProps: IGiftCardBalanceCheckModuleProps, nextState: IGiftCardBalanceCheckState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this._isEnabled()) {\n this.props.context.telemetry.error('Gift card balance check is not supported, module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-gift-card-balance-check', className);\n\n const viewProps: IGiftCardBalanceCheckViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n giftCardBalanceCheckProps: { moduleProps: this.props, className: moduleClassName },\n\n enterGiftCardNumber: this._enterGiftCardNumber,\n enterGiftCardPin: this._enterGiftCardPin,\n enterGiftCardExp: this._enterGiftCardExp,\n applyGiftCard: this._applyGiftCard,\n\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n supportExternalGiftCard,\n additionalFields: showAdditionalFields,\n onEnterGiftCardNumber: this._enterGiftCardNumber,\n onEnterGiftCardPin: this._enterGiftCardPin,\n onEnterGiftCardExp: this._enterGiftCardExp,\n onApplyGiftCard: this._applyGiftCard\n }),\n item:\n this.state.giftCard &&\n getItem({\n giftCard: this.state.giftCard,\n getFormattedPrice: this._getFormattedPrice,\n resources\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return true;\n };\n\n private readonly _getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly _enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this._clearError();\n };\n\n private readonly _clearError = (): void => {\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly _setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.setState({\n errorMessage\n });\n };\n\n private readonly _applyGiftCard = async (): Promise => {\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this._getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this._getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (giftCard) {\n this._clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false,\n giftCard\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false,\n giftCard: undefined\n });\n };\n\n private readonly _findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly _getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { invalidCardTypeError, noBalanceError, invalidCardInfoError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (!this.props.context.request.user.isAuthenticated && internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n\n if (isPinRequired && giftCardPin === '') {\n this._setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this._setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this._setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this._setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly _getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, invalidCodeError }\n } = this.props;\n\n if (!giftCardNumber) {\n this._setError(emptyInputError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this._setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this._setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default GiftCardBalanceCheck;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IForm, IItem, IGiftCardBalanceCheckViewProps } from './index';\n\nexport const Form: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const Item: React.FC = ({ itemProps, selectedGiftCard }) => {selectedGiftCard};\n\nconst GiftCardBalanceCheckView: React.FC = props => {\n const { giftCardBalanceCheckProps, form, item } = props;\n return (\n \n {form &&
}\n {item && }\n \n );\n};\n\nexport default GiftCardBalanceCheckView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLinePriceEditor, ICartLinePriceEditorResources, PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\n/**\n * ICartlineResourceString: Interface for specifying the\n * resource strings that the component needs.\n */\nexport interface ICartlineResourceString {\n /**\n * Display string for discount label\n */\n discountStringText: string;\n\n /**\n * String for size key\n */\n sizeString: string;\n\n /**\n * String for color key\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension\n */\n configString: string;\n\n /**\n * String for style key\n */\n styleString: string;\n\n /**\n * String for amount key\n */\n amountString?: string;\n\n /**\n * Display string for quantity label\n */\n quantityDisplayString: string;\n\n /**\n * Display string for quantity label\n */\n inputQuantityAriaLabel: string;\n\n /**\n * Aria label for the decrement button in quantity component\n */\n decrementButtonAriaLabel: string;\n\n /**\n * Aria label for the increment button in quantity component\n */\n incrementButtonAriaLabel: string;\n\n /**\n * Original text screenreader\n */\n originalPriceText: string;\n\n /**\n * Current text screenreader\n */\n currentPriceText: string;\n\n /**\n * Shipping Charges Text\n */\n shippingChargesText: string;\n\n priceEditorResources?: ICartLinePriceEditorResources;\n salesAgreementPricePrompt?: string;\n}\n\ninterface ICartLineData {\n cartLine: CartLine | SalesLine;\n cartState?: ICartState;\n product?: SimpleProduct;\n catalogs?: ProductCatalog[];\n}\n\n/**\n * ICartLineProps: The props required to render cartLineitem.\n */\nexport interface ICartLineProps extends IComponentProps {\n /**\n * The flag to change the quantity component from intractable to static.\n */\n disableQuantityInteractivity?: boolean;\n\n /**\n * The primary image url.\n */\n primaryImageUrl?: string;\n\n /**\n * The product url.\n */\n productUrl?: string;\n\n /**\n * GridSettings for the product image in cartLine.\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartLine.\n */\n imageSettings: IImageSettings;\n\n /**\n * Boolean flag to indicate if the item is out of stock.\n */\n isOutOfStock?: boolean;\n\n /**\n * Flag to make quantity section editable.\n */\n isQuantityEditable?: boolean;\n\n /**\n * Max quantity for line item.\n */\n maxQuantity?: number;\n\n /**\n * Current quantity for line item.\n */\n currentQuantity?: number;\n\n /**\n * Resource string for the component.\n */\n resources: ICartlineResourceString;\n\n /**\n * SalesLine flag.\n */\n isSalesLine?: boolean;\n\n /**\n * Error message to show in place of quantity.\n */\n errorMessage?: string;\n\n /**\n * Inventory information label.\n */\n inventoryInformationLabel?: string;\n\n /**\n * Inventory information class name.\n */\n inventoryLabelClassName?: string;\n\n /**\n * Flag to show/hide shipping charges for line items.\n */\n showShippingChargesForLineItems?: boolean;\n\n /**\n * Boolean flag to indicate if cart state status is ready.\n */\n isCartStateReady?: boolean;\n\n /**\n * Chanel Delivery Option configuration is from api.\n */\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n\n /**\n * The cart line index.\n */\n lineIndex?: number;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): boolean;\n priceCurrency?: string;\n}\n\ninterface IDimensionStrings {\n /**\n * String for size key.\n */\n sizeString: string;\n\n /**\n * String for color key.\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension.\n */\n configString: string;\n\n /**\n * String for style key.\n */\n styleString: string;\n\n /**\n * String for amount key.\n */\n amountString?: string;\n}\n\n/**\n * Renders catalog label for the cart line.\n * @param props - Cart line props.\n * @returns Catalog label.\n */\nconst CatalogLabelComponent: React.FC = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\n return null;\n }\n\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
{catalog.Name}
;\n};\n\nconst CartLineItemFunctions = {\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\n if (!Product || !Product.Dimensions) {\n return [];\n }\n\n return Product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === 1) {\n return (\n
\n \n {DimensionStrings.colorString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 2) {\n return (\n
\n \n {DimensionStrings.configString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 3) {\n return (\n
\n \n {DimensionStrings.sizeString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 4) {\n return (\n
\n \n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n return null;\n });\n },\n\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\n return null;\n }\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n
\n \n {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n \n {` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}\n
\n );\n });\n },\n renderInventoryLabel: (props: ICartLineProps) => {\n if (!props.inventoryInformationLabel) {\n return null;\n }\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n return {props.inventoryInformationLabel};\n },\n\n /**\n * Gets the react node for product unit of measure display.\n * @param props - Icartline props.\n * @returns The node representing markup for unit of measure component.\n */\n renderUnitOfMeasure: (props: ICartLineProps) => {\n if (props.data.cartLine.IsInvoiceLine) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\n return undefined;\n }\n\n const product = props.data.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n
\n {product.DefaultUnitOfMeasure}\n
\n );\n },\n renderShippingLabel: (props: ICartLineProps) => {\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\n const cartline = props.data.cartLine;\n let hasShippingMethod = false;\n if (channelDeliveryOptionConfig !== undefined) {\n hasShippingMethod = !!(\n cartline.DeliveryMode &&\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\n );\n } else {\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\n }\n if (!hasShippingMethod) {\n return undefined;\n }\n\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\n\n if (shippingChargeLines.length === 0) {\n return undefined;\n }\n\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\n }, 0);\n\n const priceComponent = (\n \n );\n return (\n <>\n \n {priceComponent}\n \n );\n },\n renderOtherCharges: (props: ICartLineProps) => {\n const cartline = props.data.cartLine;\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\n\n return (\n (otherCharges &&\n otherCharges.map((otherCharge, key) => {\n return otherCharge && otherCharge.CalculatedAmount ? (\n
\n \n \n \n \n
\n ) : (\n ''\n );\n })) ||\n undefined\n );\n },\n\n /**\n * Render the sales agreement prompt.\n * @param props - The ICartLineProps.\n * @returns The JSX.Element.\n */\n renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return
{props.resources.salesAgreementPricePrompt}
;\n }\n};\n\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC = (props: ICartLineProps) => {\n const { isSalesLine, productUrl, resources } = props;\n const { product, cartLine } = props.data;\n\n const destructDimensionStrings = {\n sizeString: resources.sizeString,\n colorString: resources.colorString,\n styleString: resources.styleString,\n configString: resources.configString,\n amountString: resources.amountString\n };\n\n const fallbackImageUrl =\n product &&\n getFallbackImageUrl(\n product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\n const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const productName = product?.Name || cartLine.Description;\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\n\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\n }\n return true;\n };\n\n const _generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n
\n \n {props.errorMessage}\n
\n );\n }\n\n return null;\n };\n\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\n const nodes = [];\n if (props.isOutOfStock) {\n return null;\n }\n\n // No quantity selector for invoice line\n if (!props.data.cartLine.IsInvoiceLine) {\n if (props.data.product && props.isQuantityEditable) {\n nodes.push(\n
\n
{resources.quantityDisplayString}
\n \n
\n );\n } else {\n nodes.push(\n
\n \n {props.data.cartLine.Quantity}\n
\n );\n }\n }\n\n nodes.push(\n
\n \n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\n <>\n \n {` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n )) ||\n null}\n
\n );\n\n return nodes;\n };\n\n return (\n <>\n
\n
\n \n
\n
\n
\n \n {MsDyn365.isBrowser ? (\n \n {productName}\n \n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n
{productDimensions}
\n ) : (\n ''\n )}\n {renderUnitOfMeasure}\n
\n \n
\n {renderDisountLines}\n {renderInventoryLabel}\n {props.showShippingChargesForLineItems &&
{renderShippingLabel}
}\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n
\n {_generateQuantityandPrice()}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n \n )}\n
\n
\n {_generateErrorMessage()}\n \n );\n};\n\nexport default CartLine;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel, ICarouselProps, Player, IPlayerData, IPlayerOptions, IVideoMetadata } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport { MediaLocation, MediaType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n defaultDataScale,\n IComponentNodeProps,\n ImagefullView,\n IModalViewProps,\n IModuleProps,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInitClick,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n KeyCodes,\n NodeTag,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IMediaGalleryData } from './media-gallery.data';\nimport { imageSource, imageZoom, IMediaGalleryProps, thumbnailsOrientation } from './media-gallery.props.autogenerated';\nimport { getProductImages, getValidProductImages, getVideoMetadataFromApi, validateProductImages } from './utils';\nimport { getAltText, IMediaData } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: IMediaData[];\n isInitialLoad?: boolean;\n shouldUseOptimizedImage?: boolean;\n}\n\n/**\n * IMediaGalleryThumbnailsViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IMediaGalleryThumbnailItemViewProps[];\n}\n\n/**\n * IMediaGalleryThumbnailItemViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * IMediaGalleryViewProps Interface.\n */\nexport interface IMediaGalleryViewProps extends IMediaGalleryProps {\n state: IMediaGalleryState;\n MediaGallery: IModuleProps;\n CarouselProps: INodeProps;\n Thumbnails: IMediaGalleryThumbnailsViewProps;\n Modal?: React.ReactElement | null;\n callbackToggle?(): void;\n callbackThumbnailClick?(index: number): void;\n callbackThumbnailKeyDown?(index: number): void;\n}\n\n/**\n * Props for carousel.\n */\ninterface IMediaGalleryCarouselItems {\n items: ItemType[];\n keys: (string | undefined)[];\n}\n\n/**\n * Media gallery component.\n */\nclass MediaGallery extends React.Component, IMediaGalleryState> {\n private readonly _inlineZoomDivRef: Map = new Map();\n\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\n private readonly player: React.RefObject = React.createRef();\n private fallbackImage?: string;\n\n private readonly defaultGalleryImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly _zoomedImageSettings: IImageSettings;\n\n public constructor(props: IMediaGalleryProps) {\n super(props);\n this._toggleModal = this._toggleModal.bind(this);\n const mediaGalleryImages = this.getImagesData();\n this.state = {\n activeIndex: 0,\n animating: false,\n isImageZoomed: false,\n modalIsOpen: false,\n isInitialLoad: true,\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation,\n mediaGalleryItems: mediaGalleryImages\n };\n\n this._zoomedImageSettings =\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\n\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\n }\n\n public isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public async componentDidMount(): Promise {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\n this._setRenderType();\n if (!this.props.context.request.app?.config?.OmniChannelMedia) {\n if (source === imageSource.pageContext) {\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocationsForSelectedVariant.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\n const product = this.props.data.product.result;\n const images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant\n );\n\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n }\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n }\n }\n\n public shouldComponentUpdate(nextProps: IMediaGalleryProps, nextState: IMediaGalleryState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { id, config, resources } = this.props;\n\n const { className, showPaginationTooltip } = config;\n\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\n const zoomViewMode: string =\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\n if (this.props.data.product.result) {\n this.fallbackImage = getFallbackImageUrl(\n this.props.data.product.result.ItemId,\n this.props.context.request.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage}&fallback=${emptyPlaceHolderImage}`;\n }\n\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\n const viewProps: IMediaGalleryViewProps = {\n ...(this.props as IMediaGalleryProps),\n state: this.state,\n MediaGallery: {\n moduleProps: this.props,\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\n },\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\n callbackToggle: this.openModalDialog,\n callbackThumbnailClick: this._generateOnThumbnailClick,\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\n CarouselProps: {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items: mediaGalleryCarouselItems.items,\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: showPaginationTooltip === true,\n indicatorAriaText: resources.ariaLabelForSlide,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n key: mediaGalleryCarouselItems.keys\n } as IComponentNodeProps,\n Thumbnails: {\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: 'ms-media-gallery__thumbnails',\n vertical: isVertical,\n flipperPrevLabel: resources.previousScreenshotFlipperText,\n flipperNextLabel: resources.nextScreenshotFlipperText,\n parentId: id,\n useTabList: true,\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\n } as IComponentNodeProps,\n items: mediaGalleryThumbnailCarouselItems.items\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Zoomed out image on previous/next click.\n */\n public updateZoomedInImage(): void {\n this.setState({ isImageZoomed: false });\n }\n\n private readonly onExiting = () => {\n this.setState({ animating: true });\n };\n\n private readonly onExited = () => {\n this.setState({ animating: false });\n };\n\n /**\n * On click next in carousel.\n */\n private readonly next = (): void => {\n removeInlineZoomStyle();\n if (this.isLastItem() === undefined) {\n return;\n }\n\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\n this.goToIndex(nextIndex);\n\n this.updateZoomedInImage();\n };\n\n /**\n * On click previous in carousel.\n */\n private readonly previous = (): void => {\n removeInlineZoomStyle();\n const images = this.state.mediaGalleryItems;\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\n this.goToIndex(nextIndex);\n this.updateZoomedInImage();\n };\n\n private readonly goToIndex = (index: number): void => {\n const { autoplay } = this.props.config;\n const currentIndex = this.state.activeIndex;\n const mediaItems = this.state.mediaGalleryItems;\n if (autoplay && mediaItems) {\n if (mediaItems[`${index}`]?.mediaTypeValue === MediaType.Video) {\n this.player.current?.play();\n } else if (mediaItems[`${currentIndex}`].mediaTypeValue === MediaType.Video) {\n this.player.current?.pause();\n }\n }\n this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\n if (thumbnailImageSettings) {\n thumbnailImageSettings.cropFocalRegion = true;\n }\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n const defaultKey = 0;\n return {\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\n keys: ['empty']\n };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n return this.getVideoThumbNailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n } else {\n return this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n }\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private getImagesData = (): IImageData[] => {\n if (this.props.config.skipImageValidation || this.props.context.request.app?.config?.OmniChannelMedia) {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n let images: IImageData[] = [];\n let mediaLocations: MediaLocation[] = [];\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n mediaLocations = this.props.data.mediaLocations.result;\n }\n images = mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(\n this.props.context.actionContext.requestContext,\n this.shouldUseCmsAltText(),\n this.props.data.product.result?.Name,\n mediaLocation.AltText\n ),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n const curatedImages = this.props.config.images ?? [];\n\n return [...this._filterMasterImageFromVariant(images), ...curatedImages];\n }\n return [];\n };\n\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const galleryImageSettings = this.props.config.galleryImageSettings;\n if (galleryImageSettings) {\n galleryImageSettings.cropFocalRegion = true;\n }\n\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n return this._renderCarouselItemImageView(\n zoomView,\n item,\n galleryImageSettings ?? this.defaultGalleryImageSettings,\n index\n );\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private async _setImages(images?: IMediaData[]): Promise {\n const curatedImage = this.props.config.images || [];\n const mediaToSet: IMediaData[] = this._filterMasterImageFromVariant(images);\n\n void Promise.all(\n mediaToSet.map(async mediaData => {\n if (mediaData.mediaTypeValue === MediaType.Video && mediaData.src) {\n try {\n const url = new URL(mediaData.src);\n const videoId = url.searchParams.get('CVID');\n if (videoId) {\n mediaData.videoData = await getVideoMetadataFromApi(videoId, this.props.context.actionContext);\n }\n } catch (error) {\n if (this.props.telemetry) {\n this.props.telemetry.debug('Error while fetching videoId');\n }\n }\n }\n return mediaData;\n })\n ).then(mediaData => {\n const mediaItems = mediaData.filter(element => {\n return (\n element.mediaTypeValue !== MediaType.Video ||\n (element.mediaTypeValue === MediaType.Video && element.videoData !== undefined)\n );\n });\n\n this.setState({\n mediaGalleryItems: [...mediaItems, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n });\n\n this.setState({\n mediaGalleryItems: [...mediaToSet, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n }\n\n private _setRenderType(): void {\n this.setState({\n isInitialLoad: false\n });\n }\n\n private _renderCarouselItemImageView(\n zoomView: string,\n media: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (media.mediaTypeValue === MediaType.Video) {\n if (isInPopup || zoomView !== 'fullscreen') {\n return <>{this._renderCarouselItemVideo(media, index, imageSettings)};\n }\n return <>{this._renderVideoThumbnail(media, index, imageSettings)};\n } else {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(media, imageSettings, index, isInPopup)};\n }\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\n const itemId = this.props.data.product.result?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _renderCarouselItemVideo = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = this.props.config as IPlayerOptions;\n const playerResources = this.props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n const attributes = {\n id: `${this.props.id}__carousel-item__${index}`\n };\n return (\n \n );\n }\n return this._renderEmptyImage(imageSettings);\n };\n\n private readonly _getCarouselItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Gets the video thumbnail item to display media gallery.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render video.\n */\n private readonly getVideoThumbNailItem = (\n mediaData: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Ref Handler.\n * @param index -Remove item click function.\n * @returns Set inline zoom.\n */\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\n this._inlineZoomDivRef.set(index, divRef);\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n\n this.goToIndex(index);\n };\n };\n\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n \n );\n }\n\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\n }\n\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\n if (!this.state.isMobileImageZoomed) {\n const bounds = target.getBoundingClientRect();\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\n\n const positionX = event.clientX - bounds.left;\n const positionY = event.clientY - bounds.top;\n const scaledPositionX = positionX * dataScale;\n const scaledPositionY = positionY * dataScale;\n\n target.style.transform = `scale(${dataScale})`;\n target.classList.add(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = 'auto';\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\n this.setState({\n isMobileImageZoomed: true\n });\n } else {\n target.style.transform = '';\n target.classList.remove(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = '';\n this.setState({\n isMobileImageZoomed: false\n });\n }\n }\n\n private _onInlineImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onImageMouseOut(event: React.MouseEvent): void {\n inlineZoomImageOnMouseOut(event);\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n\n onContainerZoomInit(event);\n\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\n onMouseOutLensContainer(event);\n\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n \n
\n );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n
\n {}\n \n
\n
\n );\n }\n\n /**\n * Render the video thumbnail in full screen.\n * @param mediaData - Media Data.\n * @param index - Index\n * @param imageSettings - Image settings.\n * @returns - JSX.Element\n */\n private readonly _renderVideoThumbnail = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return (\n
\n \n
\n {}\n \n
\n
\n );\n };\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n
\n \n
\n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IRequestContext, IVideoData } from '@msdyn365-commerce/core';\n\nexport enum MediaType {\n /**\n * The None.\n */\n None = 0,\n /**\n * The Image type.\n */\n Image = 1,\n /**\n * The video type.\n */\n Video = 2,\n /**\n * The file type.\n */\n File = 3\n}\n\nexport interface IMediaData extends IImageData {\n mediaTypeValue?: MediaType;\n displayOrder?: number;\n videoData?: IVideoData;\n}\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param productName Product name.\n * @param context Current request context.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n commerceApiRequest,\n commerceVideoMetadataRequest,\n getCatalogId,\n IActionContext,\n IImageData,\n IImageSettings,\n IVideoData\n} from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n getMediaLocationsForSelectedVariant,\n MediaLocationsForSelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n\n/**\n * GetVideoMetadataFromAPI - Makes API call to get video metadata.\n * @param videoId: Video Id\n * @param actionContext: Action context\n * @returns: Returns the meta data of the video.\n */\nexport async function getVideoMetadataFromApi(videoId: string, actionContext: IActionContext): Promise {\n let videoPlayerData: IVideoData | undefined;\n if (videoId) {\n const response = await commerceVideoMetadataRequest(actionContext.requestContext, [videoId]);\n\n if (response.status !== 200) {\n actionContext.telemetry.debug(`Unable to get video metadata for videoId: ${videoId}`);\n return;\n }\n\n const videoData = response.data as [];\n if (videoData && ArrayExtensions.hasElements(videoData)) {\n videoPlayerData = videoData[0];\n }\n }\n return videoPlayerData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport interface IOrderSummaryProps {\n subTotalLabel: string;\n shippingLabel: string;\n taxLabel: string;\n orderTotalLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n totalDiscountsLabel: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n id: string;\n typeName: string;\n otherChargeLabel?: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isTaxIncludedInPrice?: boolean;\n isShowTaxBreakup?: boolean;\n customerAccountLabel?: string;\n}\n\nexport interface IOrderSummaryLines {\n subtotal: React.ReactNode;\n shipping?: React.ReactNode;\n otherCharge?: React.ReactNode;\n tax: React.ReactNode;\n orderTotal: React.ReactNode;\n totalDiscounts?: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n customerAccount?: React.ReactNode;\n}\n\ninterface IOrderSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n priceCurrency?: string;\n}\n\ninterface IShippingOrderLine {\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n canShip?: boolean;\n hasDeliveryMethod?: boolean;\n hasShippingMethod?: boolean;\n freightFee?: number;\n}\n\nconst OrderSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel,\n priceCurrency\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n ProductPriceForSelectedProductsInput,\n validateCatalogId,\n getProductPriceForSelectedProducts\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productPrices: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || [],\n productPrices: this.productPrices || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n const discountIds = this.props.config.productCollection.discountIds;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const productPrices = this.state.productPrices;\n\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n \n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(\n item,\n index,\n productPrices ? productPrices.find(p => p.ProductId === item.RecordId) : undefined\n );\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n (recommendation || discountIds) &&\n shouldDisplaySeeAllButton &&\n (ArrayExtensions.hasElements(updatedProducts) || this.props.config.productCollection.listType === 'promotional')\n ? this._getSeeAllButton(headingLabel, recommendation, discountIds)\n : undefined,\n resources: resources\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n let productPrices = this.state.productPrices;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n if (this.props.config.productCollection.listType === 'promotional') {\n productPrices = await getProductPriceForSelectedProducts(\n new ProductPriceForSelectedProductsInput(products.filter(p => !p.IsMasterProduct).map(p => p.RecordId)),\n this.props.context.actionContext\n );\n\n this.setState({ productPrices: productPrices });\n }\n };\n\n private readonly _getProduct = (\n product: ProductSearchResult,\n index: number,\n productPrice?: ProductPrice\n ): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param headingLabel - Heading label.\n * @param recommendation - Recommendation.\n * @param discountIds - Discount Ids.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (headingLabel: string, recommendation?: string, discountIds?: string[]): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n if (!recommendation && !discountIds) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n\n if (discountIds) {\n // see all button for promotion page\n url.searchParams.set('discountIds', discountIds.toString());\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n } else if (recommendation) {\n // See all button for recommendation\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n }\n\n return (\n \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './product-collection';\nimport { IProductCollectionResources } from './product-collection.props.autogenerated';\n\nconst ProductCollectionView: React.FC = props => {\n const {\n heading,\n ProductCollectionContainer,\n products,\n SingleSlideCarouselComponentProps,\n GridComponentProps,\n isCarousel,\n seeAllButton,\n resources\n } = props;\n\n if (products) {\n return (\n \n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n \n );\n }\n\n // If no products are retrieved and the list type is promotional, still render the module to keep the entry of promotion page\n if (props.config.productCollection.listType === 'promotional') {\n return (\n \n {heading}\n {seeAllButton}\n {_renderNoProduct(resources)}\n \n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderNoProduct = (resources: IProductCollectionResources): JSX.Element => {\n return (\n \n

{resources.noProductToRenderText}

\n
\n );\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return {productComponent};\n};\n\nexport default ProductCollectionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { format, INodeProps, Progress } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IHistogramItemsProps {\n ratingsSummary: RatingsSummary;\n resources: IHistogramItemsResources;\n locale: string;\n onClick(stars: number): void;\n}\n\nexport interface IHistogramItemsResources {\n barItemAriaLabel: string;\n}\n\nexport interface IHistogramItemViewProps {\n starLabel: React.ReactElement;\n bar: React.ReactElement;\n percentage: React.ReactElement;\n buttonProps: INodeProps;\n}\n\n/**\n * CartLineItems component.\n */\n\nexport const HistogramItems = (props: IHistogramItemsProps): IHistogramItemViewProps[] => {\n const { ratingsSummary } = props;\n const totalRatingsCount: number = ratingsSummary.totalRatingsCount || 0;\n if (totalRatingsCount === 0) {\n return [];\n }\n return [\n renderItem(props, 5, ratingsSummary.star5Count, totalRatingsCount),\n renderItem(props, 4, ratingsSummary.star4Count, totalRatingsCount),\n renderItem(props, 3, ratingsSummary.star3Count, totalRatingsCount),\n renderItem(props, 2, ratingsSummary.star2Count, totalRatingsCount),\n renderItem(props, 1, ratingsSummary.star1Count, totalRatingsCount)\n ];\n};\n\nconst renderItem = (props: IHistogramItemsProps, stars: number, count?: number, totalCount?: number): IHistogramItemViewProps => {\n count = count || 0;\n totalCount = totalCount || 0;\n const percentage = totalCount === 0 ? 0 : count / totalCount;\n const formattedPercent = new Intl.NumberFormat(props.locale, { style: 'percent' }).format(percentage);\n const ariaLabel = format(props.resources.barItemAriaLabel, stars, formattedPercent);\n\n return {\n starLabel: (\n \n ),\n percentage: (\n \n ),\n bar: ,\n buttonProps: {\n tag: 'button',\n className: 'ms-ratings-histogram__item',\n onClick: () => {\n props.onClick(stars);\n }\n }\n };\n};\n\nexport const AverageRatingNumber: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return (\n

\n {props.summary.averageRating}\n {` `}/ 5\n

\n );\n};\n\nexport const TotalReviews: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return

{props.summary.totalRatingsCount}

;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { format, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createRatingsReviewsStateInput } from '../../actions/ratings-reviews-state-data-action';\nimport { AverageRatingNumber, HistogramItems, IHistogramItemViewProps, TotalReviews } from './component/components';\nimport { IRatingsHistogramData } from './ratings-histogram.data';\nimport { IRatingsHistogramProps } from './ratings-histogram.props.autogenerated';\n\nexport interface IRatingsHistogramViewProps extends IRatingsHistogramProps {\n className: string;\n histogramItems: IHistogramItemViewProps[];\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n averageRating: React.ReactNode;\n averageNumber: React.ReactNode;\n totalReviews: React.ReactNode;\n histogramProps: INodeProps;\n ratingsSummaryProps: INodeProps;\n callbacks: IRatingsHistogramCallbacks;\n}\n\nexport interface IRatingsHistogramCallbacks {\n selectFilterBy(stars: number): void;\n}\n\n/**\n * RatingsHistogram component.\n * @extends {React.Component>}\n */\n@observer\nclass RatingsHistogram extends React.PureComponent> {\n constructor(props: IRatingsHistogramProps) {\n super(props);\n this.selectFilterBy = this.selectFilterBy.bind(this);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const ratingCount = ratingsSummary && ratingsSummary.totalRatingsCount ? `${ratingsSummary.totalRatingsCount}` : '0';\n\n const completeClass = classname('ms-ratings-histogram', className);\n const viewProps: IRatingsHistogramViewProps = {\n ...this.props,\n className: completeClass,\n callbacks: {\n selectFilterBy: this.selectFilterBy\n },\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n histogramItems: ratingsSummary\n ? HistogramItems({\n ratingsSummary,\n resources: { ...resources },\n locale: this.props.context.request.locale,\n onClick: this.selectFilterBy\n })\n : [],\n averageRating: ratingsSummary && (\n \n ),\n averageNumber: ratingsSummary && ,\n totalReviews: ratingsSummary && ,\n ratingsSummaryProps: { className: 'ms-ratings-histogram__summary' },\n heading: heading && (\n \n ),\n histogramProps: { className: 'ms-ratings-histogram__histogram' }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public selectFilterBy(stars: number): void {\n const filterKey = `${stars}`;\n this.props.context.actionContext.update(createRatingsReviewsStateInput({ filterKey }), { filterKey });\n }\n}\n\nexport default RatingsHistogram;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHistogramItemViewProps } from './component/components';\nimport { IRatingsHistogramViewProps } from './ratings-histogram';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { DimensionTypes } from '@msdyn365-commerce-modules/retail-actions';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * Types of product refiner values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerValueDataTypeValue {\n /**\n * Range slider is used for selections like price.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Range = 1,\n\n /**\n * Range input is a different way to specify ranges and can be expressed with input boxes\n * as well as a set of discrete single-select type values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n RangeInput = 4,\n\n /**\n * This is a discrete list item, either multi-select or single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n List = 5,\n\n /**\n * Boolean types allows only single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Boolean = 6\n}\n\n/**\n * Types of product refiners.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerTypeValue {\n /**\n * Refiner values are single-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Single = 0,\n\n /**\n * Refiner values are multi-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Multi = 1\n}\n\n/**\n * ProductRefinerSource enum type.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerSource {\n /**\n * The None member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n None = 0,\n\n /**\n * The Attribute member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Attribute = 1,\n\n /**\n * The Category member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Category = 2,\n\n /**\n * The Price member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Price = 3,\n\n /**\n * The Rating member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Rating = 4\n}\n\nexport interface IRefineItemData {\n sourceValue?: number;\n swatchImageUrl?: string;\n swatchColorHexCode?: string;\n refinerItemId: number;\n dataTypeValue?: number;\n name: string;\n label: string;\n count?: number;\n isChecked: boolean;\n refineItemUrl?: string;\n minValue?: string;\n maxValue?: string;\n dimensionType?: DimensionTypes;\n rowNumber?: number;\n unitText?: string;\n updatedSliderMaxValue?: string;\n updatedSliderMinValue?: string;\n}\n/**\n * Checks if the data type value corresponds to a slider.\n * @param dataTypeValue\n */\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\n return dataTypeValue === AttributeDataType.Currency || dataTypeValue === AttributeDataType.Decimal;\n}\n\n/**\n * Checks if the data type value corresponds to a range type integer.\n * @param dataTypeValue\n */\nexport function isRangeTypeForInteger(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Checks if the data type value corresponds to a custom input box Range.\n * @param dataTypeValue\n */\nexport function isCustomRangeTypeIntegerSelected(\n selectedRefinementCriterion: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy\n): boolean {\n return (\n selectedRefinementCriterion?.RowNumber !== undefined &&\n selectedRefinementCriterion?.RowNumber !== null &&\n selectedRefinementCriterion?.DataTypeValue === AttributeDataType.Integer &&\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n );\n}\n\n/**\n * Checks if the selectedRefinementCriterion is siingle type with API va;ues or custom type.\n * If custom type then RowNumber is null\n * @param dataTypeValue\n */\nexport function isSingleSelectRangeTypeIntegerSelected(\n selectedRefinementCriterion: ProductRefinerValue,\n productRefinerValue: ProductRefinerValue\n): boolean {\n return (\n productRefinerValue.LeftValueBoundString === selectedRefinementCriterion?.LeftValueBoundString &&\n productRefinerValue.RightValueBoundString === selectedRefinementCriterion?.RightValueBoundString &&\n selectedRefinementCriterion?.RowNumber !== undefined &&\n selectedRefinementCriterion?.RowNumber !== null &&\n selectedRefinementCriterion !== undefined\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n */\nexport function findMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue | undefined {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n * @param refinementCriterion\n */\nexport function isMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriterion: ProductRefinerValue,\n parent?: IProductRefinerHierarchy\n): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n // Distinguish by displaytype also\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n ((parent?.DisplayTemplateValue === DisplayTemplate.Range\n ? isRangeType(refinementCriterion.DataTypeValue)\n : isRangeTypeForInteger(refinementCriterion.DataTypeValue)) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getIntegerRangeName(productRefinerValue: ProductRefinerValue): string {\n let rangeValue = '';\n\n if (productRefinerValue.LeftValueBoundString === '' && productRefinerValue.RightValueBoundString !== '') {\n rangeValue = `< ${productRefinerValue.RightValueBoundLocalizedString || productRefinerValue.RightValueBoundString}`;\n } else if (productRefinerValue.RightValueBoundString === '' && productRefinerValue.LeftValueBoundString !== '') {\n rangeValue = `> ${productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}`;\n } else if (productRefinerValue.RightValueBoundString !== '' && productRefinerValue.LeftValueBoundString !== '') {\n rangeValue = `${productRefinerValue.LeftValueBoundLocalizedString ||\n productRefinerValue.LeftValueBoundString} - ${productRefinerValue.RightValueBoundString ||\n productRefinerValue.RightValueBoundString}`;\n }\n return rangeValue;\n}\n\n/**\n * Get input without formatting.\n * @param input - Input string.\n * @returns - Returns number.\n */\nexport function getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNumber = Number(input);\n if (!Number.isNaN(inputAsNumber)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n // const reverseLookupResult = formattedPriceReverseLookup.get(input);\n // return reverseLookupResult || input;\n return input;\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n\n // Keeping only itemToggled value for integer-range type in currentRefinementCriteria\n if (\n itemToggleNotification.parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n itemToggleNotification.parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n currentRefinementCriteria = currentRefinementCriteria.filter(r => {\n return r.RefinerRecordId !== itemToggleNotification.productRefinerValue.RefinerRecordId;\n });\n }\n\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (\n isMatchingRefinementCriterion(\n itemToggleNotification.productRefinerValue,\n selectedCriterion,\n itemToggleNotification.parentProductRefinerHierarchy\n )\n ) {\n toggledItemFound = true;\n if (itemToggleNotification.isSelecting) {\n const next = {\n ...selectedCriterion,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n selectedCriterion.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n selectedCriterion.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n } // Else the item is being de-selected, so omit it from the refinement criteria\n } else {\n // Keep existing criterion because it is not in the item toggle notification\n updatedRefinementCriteria.push(selectedCriterion);\n }\n });\n\n if (!toggledItemFound) {\n const next = {\n ...itemToggleNotification.productRefinerValue,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n itemToggleNotification.productRefinerValue.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n\n // If single select, then deselect any others in the parent refiner group\n if (\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\n ) {\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\n // Do nothing\n } else {\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(child, criterion, itemToggleNotification.parentProductRefinerHierarchy)\n );\n if (matchingIndex > -1) {\n updatedRefinementCriteria.splice(matchingIndex, 1);\n }\n }\n });\n }\n }\n\n return updatedRefinementCriteria;\n}\n\nexport function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string | undefined,\n telemetry: ITelemetry\n): string {\n if (!amount || !currency) {\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\n return amount || '';\n }\n const priceAmount = (amount && Number(amount)) || 0;\n let result: string;\n\n try {\n result = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0\n }).format(priceAmount);\n } catch (error) {\n result = `${priceAmount} ${currency}`;\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ProductListInventoryFilteringOptions } from '../actions';\nimport { IChoiceSummaryProps } from './choice-summary.props';\nimport { getIntegerRangeName, isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n rangeDisplayType?: number | undefined;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent {\n private readonly closeButtonGlyph: string = 'msi-close-btn';\n\n private readonly payLoad: IPayLoad;\n\n @computed get selectedRefinersMap(): IRefinerMap[] {\n let { selectedChoices } = this.props;\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n selectedChoices = selectedChoices.filter(choice => {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\n );\n return parent && parent.RecordId !== channelInventoryConfigurationId;\n });\n }\n return selectedChoices.map((selectedRefiner: ProductRefinerValue, index) => {\n const rangeParentDisplay = refinerHierarchy.filter(p => p.RecordId === selectedRefiner.RefinerRecordId);\n return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner,\n // parameter to store Display Template type\n rangeDisplayType: rangeParentDisplay[0]?.DisplayTemplateValue || undefined\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\n const items = this.selectedRefinersMap;\n this.payLoad.contentAction.etext = clearAllText;\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
\n {items.length > 0 && label && {label}}\n
    \n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n // Get range value for Range display and integer type only (not for Integer with TextBox(4) display)\n const rangeInteger =\n item.value.DataTypeValue === AttributeDataType.Integer &&\n item.rangeDisplayType &&\n item.rangeDisplayType === DisplayTemplate.Range &&\n item.value.RefinerRecordId !== 0;\n const newIntRange = rangeInteger\n ? item.key\n : item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString || item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString;\n return (\n
  • \n \n {newIntRange}\n \n \n
  • \n );\n })}\n
\n {items.length > 0 && clearAllText && (\n \n {clearAllText}\n \n )}\n
\n );\n }\n\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue, index: string): string {\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\n const overallFormat = choiceFormat || '{1}';\n const rangeFormat = choiceRangeValueFormat;\n let refinerName = '';\n let parent: IProductRefinerHierarchy | undefined;\n if (refinerHierarchy && refinerHierarchy.find) {\n parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\n );\n\n if (!parent) {\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\n } else {\n refinerName = parent.KeyName || '';\n }\n }\n\n let refinerValueName: string;\n if (isRangeType(productRefinerValue.DataTypeValue)) {\n refinerValueName = rangeFormat\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\n } else if (productRefinerValue.RefinerRecordId === 0) {\n const filterValue = refinerValues?.Values.find(\n refiner => refiner.LeftValueBoundString === productRefinerValue.LeftValueBoundString\n );\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\n } else {\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n }\n\n if (refinerName === 'Rating' || refinerName === 'Price') {\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n }\n // Adding integer range format\n if (\n productRefinerValue.DataTypeValue === AttributeDataType.Integer &&\n parent?.DisplayTemplateValue === DisplayTemplate.Range &&\n productRefinerValue.RefinerRecordId !== 0\n ) {\n refinerValueName = getIntegerRangeName(productRefinerValue);\n return refinerValueName;\n }\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}_${index}`);\n }\n\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\n if (!amount || !currency) {\n this.props.telemetry.trace('[choice-summary] could not format price');\n return amount || '';\n }\n let result = amount;\n\n try {\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\n } catch (error) {\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLElement;\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\n\n if (this.props.onChoiceClicked) {\n this.props.onChoiceClicked({\n clearAll,\n itemClicked: target,\n choiceClicked: selectedRefiner,\n nextItemToFocus: target.nextSibling as HTMLElement\n });\n }\n };\n\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\n return (result && result.value) || 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 * as React from 'react';\n\ninterface IErrorMessage {\n text?: string;\n}\n\nexport const ErrorMessage: React.FC = ({ text }) => {\n return (\n \n
\n {` `}\n {text}\n {` `}\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 { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\n\ninterface IFeatureSearchResultItem {\n product: SimpleProduct | null;\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n recommendation?: string;\n}\n\nexport const FeatureSearchResultItem: React.FC = ({\n product,\n context,\n imageSettings,\n resources,\n telemetryContent,\n recommendation\n}) => {\n if (product === null) {\n return null;\n }\n\n const productName = product.Name;\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\n const fallbackImage = getFallbackImageUrl(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const heading =\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n
\n \n
\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n
\n \n
\n

{heading}

\n {renderProductTitle(product?.Name)}\n
\n
\n );\n};\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string,\n fallbackImage?: string,\n context?: IRequestContext\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings,\n fallBackSrc: fallbackImage\n };\n return ;\n}\n\nfunction renderProductTitle(title?: string): JSX.Element | null {\n return

{title}

;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\n \n {' '}\n {text}{' '}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ISearchResultModalViewProps {\n modal: React.ReactElement;\n modalHeader: React.ReactElement;\n modalFooter: React.ReactElement;\n modalBody: React.ReactElement;\n}\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n onClick(): void;\n}\n\nexport interface ISearchResultModalResources {\n modalTitle: string;\n modalCloseButtonText: string;\n}\n\nexport interface ISearchResultModalProps {\n resources: ISearchResultModalResources;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, id } = props;\n return (\n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n \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 { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\ninterface IProductSearchResultItems {\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities\n}) => {\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return (\n
    \n {products.map((product: ProductSearchResult, index: number) => (\n
  • \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n
  • \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 { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n \n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n \n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n DisplayTemplate,\n ProductRefinerSource,\n ProductRefinerValue,\n RefinerType\n} from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { getIntegerRangeName, isSingleSelectRangeTypeIntegerSelected } from './utilities';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component {\n private readonly anchorType: React.RefObject;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n if (\n parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n const rangeValue = getIntegerRangeName(productRefinerValue);\n return (\n
  • \n \n \n \n
  • \n );\n } else {\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \n \n
  • \n );\n }\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n \n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n \n \n \n \n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n \n \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 { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isUndefined } from 'lodash';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport { IRefineItemState } from './refine-item';\nimport { isCustomRangeTypeIntegerSelected } from './utilities';\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\nexport type RangeRefineItemInputType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemInputProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n rangeType: RangeRefineItemInputType;\n\n /**\n * The telemetry content\n */\n onToggle(notfication: Readonly): void;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemInputState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n invalidData: boolean | undefined;\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItemInput extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n public constructor(props: IRangeRefineItemInputProps) {\n super(props);\n this._changeMinInputRange = this._changeMinInputRange.bind(this);\n this._changeMaxInputRange = this._changeMaxInputRange.bind(this);\n this._applyCustom = this._applyCustom.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n let initialMin = '';\n let initialMax = '';\n const { selectedRefinementCriterion, parentProductRefinerHierarchy } = this.props;\n if (selectedRefinementCriterion) {\n initialMin = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\n ? ''\n : selectedRefinementCriterion?.LeftValueBoundString || '';\n initialMax = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\n ? ''\n : selectedRefinementCriterion?.RightValueBoundString || '';\n }\n\n this.state = {\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n invalidData: !(initialMin && initialMax),\n isChecked: false\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemInputProps, nextState: IRangeRefineItemInputState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n nextState.invalidData = !(nextState.selectedMin && nextState.selectedMax);\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemInputProps): void {\n if (previousProps !== this.props) {\n this.updateInputRangerProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n return undefined;\n }\n\n // /**\n // * Function to update slider props.\n // */\n private updateInputRangerProps(): void {\n const selectedMin = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\n ? ''\n : this.props.selectedRefinementCriterion?.LeftValueBoundString;\n const selectedMax = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\n ? ''\n : this.props.selectedRefinementCriterion?.RightValueBoundString;\n this.setState({ selectedMin, selectedMax });\n }\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n return (\n
  • \n
    \n
    \n \n {' - '}\n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n
    \n
    \n \n
    \n
    \n
  • \n );\n }\n\n private _applyCustom(event: React.MouseEvent): void {\n const selectedMinValue = this._getInputWithoutFormatting(this.state.selectedMin || '');\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const { onToggle, parentProductRefinerHierarchy } = this.props;\n const max = this.state.selectedMax;\n\n const maxNum = max ? Number(max) : undefined;\n const productRefinerValue: ProductRefinerValue = {\n RefinerRecordId: parentProductRefinerHierarchy.Values[0].RefinerRecordId,\n LeftValueBoundString: this.state.selectedMin,\n RightValueBoundString: this.state.selectedMax,\n DataTypeValue: parentProductRefinerHierarchy.DataTypeValue,\n RefinerSourceValue: parentProductRefinerHierarchy.Values[0].RefinerSourceValue\n };\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true\n });\n }\n }\n\n private _changeMinInputRange(event: React.ChangeEvent): void {\n this.setState({\n selectedMin: event.target.value.trim()\n });\n }\n\n private _changeMaxInputRange(event: React.ChangeEvent): void {\n this.setState({\n selectedMax: event.target.value.trim()\n });\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n DisplayTemplate,\n ProductRefinerSource,\n ProductRefinerValue,\n RefinerType\n} from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeTypeForInteger } from './utilities';\nimport RangeRefineItemInput from './range-refine-item-input';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n const isExpanded = this.props.isExpandedOnInitialLoad;\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n
    \n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n
    \n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (\n productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n // Check if is of integer range type\n if (isRangeTypeForInteger(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n let selectedRefinementCriterion: ProductRefinerValue | undefined = {};\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n {productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range && (\n \n )}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n
  • \n \n
  • \n );\n });\n return
      {listItems}
    ;\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\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 React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC = ({ text, className }) => (\n \n {` `}\n {text}\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 CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport {\n ChannelInventoryConfiguration,\n format,\n ProductPrice,\n ProductRefinerValue,\n SortColumn,\n StoreOperationsDataActions,\n TextValueTranslation\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput,\n ObjectExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n IFullProductsSearchResultsWithCount,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n private _isMounted: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n channelInventoryConfiguration: undefined\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n this._isMounted = true;\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: this.props.context.actionContext\n });\n if (this._isMounted) {\n this.setState({ channelInventoryConfiguration });\n }\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n await this._updateVariantAvailability();\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n await this._updateVariantAvailability();\n }\n\n public componentWillUnmount(): void {\n this._isMounted = false;\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n /**\n * Get products variants dimension availabilities.\n * @returns Void.\n */\n private readonly _updateVariantAvailability = async (): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n await this._getProductsDimensionsAvailabilities();\n }\n };\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n @action\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query?.skip &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n };\n\n /**\n * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n }\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n\n const dropdown = (\n <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\n />\n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = !ObjectExtensions.isNullOrUndefined(listPageState?.currentPageNumber)\n ? listPageState!.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\n />\n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n const { channelInventoryConfiguration } = this.state;\n const isInventorySortableAttribute =\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\n\n const isInventoryProductAttribute =\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\n\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n isInventorySortableAttribute ||\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n isInventoryProductAttribute)\n );\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const { channelInventoryConfiguration } = this.state;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\n return (\n <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\n refinerValues={refinerValueName}\n />\n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation }\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n return (\n <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\n />\n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\n !actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { SocialMedia, SocialMediaComponent } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISocialShareItemConfig, ISocialShareItemProps, socialMedia } from './social-share-item.props.autogenerated';\n\nexport interface ISocialShareItemViewProps extends ISocialShareItemProps<ISocialShareItemConfig> {\n SocialShareItemElement: React.ReactNode | null;\n SocialShareItem: IModuleProps;\n}\n\n/**\n *\n * SocialShareItem component.\n * @extends {React.PureComponent<ISocialShareItemProps<ISocialShareItemConfig>>}\n */\nclass SocialShareItem extends React.PureComponent<ISocialShareItemProps<ISocialShareItemConfig>> {\n constructor(props: ISocialShareItemProps<ISocialShareItemConfig>) {\n super(props);\n\n this._getSocialShareItem = this._getSocialShareItem.bind(this);\n }\n\n public render(): JSX.Element | null {\n const viewprops = {\n ...this.props,\n SocialShareItem: {\n moduleProps: this.props,\n className: 'ms-social-share-item'\n },\n SocialShareItemElement: this._getSocialShareItem()\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n\n private _getSocialShareItem(): React.ReactNode | null {\n const src = this.props.config.icon;\n if (MsDyn365.isBrowser) {\n switch (this.props.config.socialMedia) {\n case socialMedia.facebook:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Facebook}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_facebook`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.twitter:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Twitter}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_twitter`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.pinterest:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Pinterest}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_pinterest`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.linkedin:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Linkedin}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_linkedin`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.mail:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Mail}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_mail`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n default:\n return null;\n }\n }\n return null;\n }\n}\n\nexport default SocialShareItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISocialShareItemViewProps } from './social-share-item';\n\nexport const SocialShareItemView: React.FC<ISocialShareItemViewProps> = props => {\n const { SocialShareItem, SocialShareItemElement } = props;\n\n if (!SocialShareItemElement) {\n props.context.telemetry.error('Social media is not valid, module wont render');\n return null;\n }\n return <Module {...SocialShareItem}>{SocialShareItemElement}</Module>;\n};\n\nexport default SocialShareItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\n\n/**\n * ICartIconViewState: Interface for Cart Icon View State.\n */\ninterface ICartIconViewState {\n isModalOpen: boolean;\n}\n\n/**\n * Render Cart lines.\n * @param cartLines - Flyout cart line view props.\n * @param props - Cart icon view props.-\n * @returns JSX Element.\n */\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n return cartLines.map((cartLine, index) => {\n const cartLineIndex = index;\n return (\n <Node {...props.miniCartItemWrapper} key={cartLineIndex}>\n <Node className={classnames(cartLine.storeLocation ? 'msc-cart-line__set-net-price' : '')}>{cartLine.cartline}</Node>\n {cartLine.storeLocation}\n {cartLine.remove}\n </Node>\n );\n });\n};\n\n/**\n * Initiate total price.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\n const totalPrice = price\n ? props.context.cultureFormatter.formatCurrency(price)\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\n return cart && !cart.hasInvoiceLine ? (\n <div className='ms-cart-icon__subTotalText'>\n <span className='ms-cart-icon__subTotalPriceText'>\n {props.resources.totalPriceFormatString}\n <span className='ms-cart-icon__subTotalPrice'>{totalPrice}</span>\n </span>\n </div>\n ) : (\n <></>\n );\n};\n\n/**\n * Initiate subtotal message.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderSubtotalMessage = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n return cart && !cart.hasInvoiceLine ? <p className='ms-cart-icon__subtotal-message'>{props.resources.subTotalMessage}</p> : null;\n};\n\n/**\n *\n * CartIconView component.\n * @extends {React.PureComponent<ICartIconViewProps>}\n */\nexport class CartIconView extends React.PureComponent<\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\n ICartIconViewState\n> {\n private isAutoDisplayTriggered: boolean;\n\n private readonly cartIconRef: React.RefObject<HTMLButtonElement> = React.createRef();\n\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\n super(props);\n this.isAutoDisplayTriggered = false;\n this.state = {\n isModalOpen: false\n };\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n window.addEventListener('keydown', this._escFunction, false);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('keydown', this._escFunction, false);\n }\n }\n\n /**\n * Render Cart Item count.\n * @returns JSX Element.\n */\n public render(): JSX.Element | null {\n const cart = this.props.data.cart.result ?? undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n if (shouldShowMiniCart) {\n if (!this.isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isModalOpen: true });\n this.isAutoDisplayTriggered = true;\n } else if (!this.state.isModalOpen) {\n // If modal is closed, reset the flag.\n this.isAutoDisplayTriggered = false;\n }\n }\n return (\n <Node {...this.props.miniCartWrapper} {...this.props.renderModuleAttributes(this.props)}>\n <button onClick={this._openModal} className='ms-cart-icon-wrapper msc-btn' ref={this.cartIconRef}>\n {this.props.cartIcon}\n </button>\n <Node {...this._modalContainer()}>\n <Node className='ms-cart-icon__header msc-modal__header'>\n {this.props.flyoutTitle}\n {this._renderCartItemCount(this.props)}\n {this._renderCartCloseIcon()}\n </Node>\n <Node className='ms-cart-icon__body msc-modal__body'>\n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\n {this.props.checkoutBlockedDueToUnavailableFunds}\n <Node {...this.props.CartlinesWrapper}>{renderCartlines(this.props.cartlines, this.props)}</Node>\n </Node>\n <Node className='ms-cart-icon__footer msc-modal__footer'>\n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n {renderSubtotalMessage(this.props)}\n {this.props.checkoutAsSignInUserButton}\n {this.props.checkoutAsGuestButton}\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\n <Node className='ms-cart-icon__btn-section'>\n {this.props.data.cart.result?.isEmpty ? (\n <Button\n className='ms-cart-icon__btn-backtoshopping'\n href={getUrlSync('home', this.props.context.actionContext)}\n >\n {this.props.resources.continueShoppingButtonTitle}\n </Button>\n ) : null}\n </Node>\n </Node>\n </Node>\n </Node>\n );\n }\n\n /**\n * Initiate modal container.\n * @returns Inode props.\n */\n private readonly _modalContainer = (): INodeProps => {\n return {\n tag: Modal,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__minicartmodal-container',\n wrapClassName: 'ms-cart-icon__minicartmodal',\n isOpen: this.state.isModalOpen,\n toggle: this.closeModal\n };\n };\n\n /**\n * Initiate open modal.\n */\n private readonly _openModal = (): void => {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\n this.setState({\n isModalOpen: true\n });\n };\n\n /**\n * Initiate close modal.\n */\n private readonly closeModal = (): void => {\n this.cartIconRef.current?.focus();\n this.setState({\n isModalOpen: false\n });\n };\n\n /**\n * Initiate cart close Icon.\n * @returns JSX Element.\n */\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\n return <Button className='ms-cart-icon__btn-close' aria-label='Close' onClick={this.closeModal} />;\n };\n\n /**\n * Render Cart Item count.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\n private readonly _renderCartItemCount = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const defaultCartItemCount: number = 0;\n\n const cartItemlength = props.data.cart.result ? props.data.cart.result.totalItemsInCart : defaultCartItemCount;\n const cartItemCount = `${cartItemlength} ${props.resources.items}`;\n\n return <Node className='ms-cart-icon__count'>{cartItemCount}</Node>;\n };\n\n /**\n * Handle escape click to close modal.\n * @param event - On press of any key.\n */\n private readonly _escFunction = (event: KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Escape && this.state.isModalOpen) {\n this.closeModal();\n }\n };\n}\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport {\n IMediaData,\n IMediaGalleryThumbnailItemViewProps,\n IMediaGalleryThumbnailsViewProps,\n IMediaGalleryViewProps,\n MediaType\n} from '@msdyn365-commerce-modules/media-gallery';\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\nimport { IPlayerData, IPlayerOptions, IVideoMetadata, Player } from '@msdyn365-commerce-modules/video-player-utilities';\n\ninterface IMediaGalleryItemsProps extends IMediaGalleryThumbnailItemViewProps {\n Video?: React.ReactElement;\n}\n\n/**\n * Render the thumbnail item images.\n * @param thumbnail - The carousel thumbnail line props.\n * @returns Return HTML having thumbnail container props with image.\n */\nconst renderThumbnailItem = (thumbnail: IMediaGalleryItemsProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailItemContainerProps, Picture, Video } = thumbnail;\n\n return <Node {...ThumbnailItemContainerProps}>{Video ? Video : Picture}</Node>;\n};\n\n/**\n * Gets the thumbnail item to display media gallery images.\n * @param image - The media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param imageId - Image id.\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render images.\n */\nconst GetThumbnailItemComponent = (\n image: IImageData,\n imageSettings: IImageSettings,\n imageId: number,\n modifiedActiveIndex: number,\n props: IMediaGalleryViewProps,\n mediaTypeValue?: MediaType\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n /**\n * OnClick method of media gallery item.\n */\n const onClick = () => {\n props.callbackToggle?.();\n props.callbackThumbnailClick?.(imageId);\n props.state.activeIndex = imageId;\n };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n /**\n * Keydown event of media gallery item.\n * @param event - React.KeyboardEvent.\n */\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Enter) {\n event.preventDefault();\n onClick();\n }\n };\n const defaultIndex = 0;\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'listitem',\n key: imageId\n },\n Picture: (\n <Node className='ms-fullscreen-section'>\n <Button\n aria-label={image.altText}\n className='msc-ss-carousel-vert-button-wrapper'\n onClick={onClick}\n onKeyDown={handleKeyDown}\n >\n <Image\n requestContext={props.context.actionContext.requestContext}\n className='ms-media-gallery__thumbnail'\n {...image}\n gridSettings={props.context.request.gridSettings!}\n imageSettings={props.config.thumbnailImageSettings ?? imageSettings}\n loadFailureBehavior='hide'\n imageFallbackOptimize={props.state.shouldUseOptimizedImage}\n fallBackSrc={\n props.context.request.app?.config?.OmniChannelMedia ? '' : imageId === defaultIndex ? fallbackImage : image.src\n }\n bypassHideOnFailure={imageId === defaultIndex}\n />\n </Button>\n <Node\n className={\n mediaTypeValue === MediaType.Video ? 'ms-fullscreen-section__video-overlay' : 'ms-fullscreen-section__overlay'\n }\n >\n <Button\n onKeyDown={handleKeyDown}\n title={\n mediaTypeValue === MediaType.Video ? props.resources.playVideoTitleText : props.resources.fullScreenTitleText\n }\n role='button'\n className={\n mediaTypeValue === MediaType.Video\n ? 'ms-fullscreen-section__video-play-icon'\n : 'ms-fullscreen-section__magnifying-glass-icon'\n }\n onClick={onClick}\n />\n </Node>\n </Node>\n )\n };\n};\n\n/**\n * Render the video player.\n * @param mediaData - Media Data\n * @param index - Index of the video\n * @param activeIndex - Active Index\n * @param imageSettings - Image settings\n * @param props - Media gallery view props\n * @returns - JSX.Element.\n */\nconst RenderVideo = (\n mediaData: IMediaData,\n index: number,\n activeIndex: number,\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryItemsProps => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = props.config as IPlayerOptions;\n const playerResources = props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n index === activeIndex ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'listitem',\n key: index\n },\n Picture: <></>,\n Video: (\n <Video className='ms-media-gallery__player' editProps={{ key: videoData, requestContext: props.context.request }}>\n <Player\n playerData={videoPlayerData}\n isEditor={props.context.request.params.isEditor}\n playerResources={playerResources}\n />\n </Video>\n )\n };\n }\n return GetEmptyThumbnailItemComponent(imageSettings, props);\n};\n\n/**\n * Gets the empty thumbnail item to display media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render empty images.\n */\nconst GetEmptyThumbnailItemComponent = (\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: 'ms-media-gallery__thumbnail-item',\n role: 'listitem',\n tabIndex: 0,\n key: 0,\n 'aria-label': ''\n },\n Picture: (\n <Image\n requestContext={props.context.actionContext.requestContext}\n className='ms-media-gallery__thumbnail-item__image'\n src='empty'\n gridSettings={props.context.request.gridSettings!}\n imageSettings={props.config.thumbnailImageSettings ?? imageSettings}\n loadFailureBehavior='empty'\n imageFallbackOptimize={!!props.config.skipImageValidation}\n fallBackSrc={fallbackImage}\n />\n )\n };\n};\n\n/**\n * Update media gallery items method.\n * @param items - The media gallery thumbnail item view props.\n * @returns The IImageData array.\n */\nconst getMediaGalleryItems = (items?: IMediaData[]): IMediaData[] | undefined => {\n return items?.map(item => {\n return {\n displayOrder: item.displayOrder,\n mediaTypeValue: item.mediaTypeValue,\n altText: item.altText,\n src: item.src,\n videoData: item.videoData\n };\n });\n};\n\nconst defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Render the Media gallery thumbnails to represent images in grid view.\n * @param thumbnails - The thumbnail view props.\n * @param props - The media gallery view props.\n * @returns - The single slide carousel component to render as media gallery image.\n */\nconst renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps, props: IMediaGalleryViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\n const { state } = props;\n const mediaGalleryItems = getMediaGalleryItems(state.mediaGalleryItems);\n\n const items: IMediaGalleryItemsProps[] | undefined =\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\n state.lastUpdate && ArrayExtensions.hasElements(mediaGalleryItems) && mediaGalleryItems[0].src === 'empty'\n ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)]\n : // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\n mediaGalleryItems?.map((item: IMediaData, id: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n if (props.config.allowFullScreen) {\n const videoThumbnail = item.videoData?.thumbnail;\n if (videoThumbnail) {\n return GetThumbnailItemComponent(\n videoThumbnail,\n defaultThumbnailImageSettings,\n id,\n state.activeIndex,\n props,\n item.mediaTypeValue\n );\n } else {\n return GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props);\n }\n } else {\n return RenderVideo(item, id, state.activeIndex, defaultThumbnailImageSettings, props);\n }\n } else {\n return GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props);\n }\n });\n\n return (\n <Node {...ThumbnailsContainerProps}>\n <Node {...SingleSlideCarouselComponentProps}>{items?.map(renderThumbnailItem)}</Node>\n </Node>\n );\n};\n\n/**\n * Render the Media gallery items using viewprops.\n * @param props - The media gallery view props.\n * @returns The media gallery module wrapping up images node.\n */\nconst mediaGalleryView: React.FC<IMediaGalleryViewProps> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n // The thumbnails in AW theme aren't used as tabs\n const NewSingleSlideCarouselComponentProps = { ...Thumbnails.SingleSlideCarouselComponentProps, useTabList: false };\n const NewThumbnails = { ...Thumbnails, SingleSlideCarouselComponentProps: NewSingleSlideCarouselComponentProps };\n\n return (\n <Module {...MediaGallery}>\n <Node {...CarouselProps} />\n {Modal}\n {renderThumbnails(NewThumbnails, props)}\n </Module>\n );\n};\n\nexport default mediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { IHistogramItemViewProps, IRatingsHistogramData, IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { format, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IRatingsHistogramProps, IRatingsHistogramResources } from '../definition-extensions/ratings-histogram.ext.props.autogenerated';\n\n/**\n * Histogram item.\n * @param props - Histogram Item ViewProps.\n * @returns Histogram Item node.\n */\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n <Node {...props.buttonProps}>\n {props.starLabel}\n {props.bar}\n </Node>\n );\n};\n\n/**\n * Average ratings.\n * @param data - Props data.\n * @param context - Histogram Item ViewProps.\n * @param typeName - Histogram Item ViewProps.\n * @param componentId - Histogram Item ViewProps.\n * @param resources - Module resource strings.\n * @returns Average ratings.\n */\nconst averageRating = (\n data: IRatingsHistogramData,\n context: ICoreContext,\n typeName: string,\n componentId: string,\n resources: IRatingsHistogramResources\n) => {\n const defaultAverageRating: number = 0;\n const reviewsCount = data.ratingsSummary.result?.reviewsCount ?? defaultAverageRating;\n const reviewsCountString = resources.numberOfReviewsString\n ? format(resources.numberOfReviewsString, reviewsCount)\n : `${reviewsCount} reviews`;\n\n return (\n <div className='ms-ratings-histogram__ratings'>\n <div className='ms-ratings-histogram__ratings__heading'>{data.ratingsSummary.result?.averageRating}</div>\n <div>\n <RatingComponent\n context={context}\n id={componentId}\n typeName={typeName}\n avgRating={data.ratingsSummary.result?.averageRating ?? defaultAverageRating}\n readOnly\n ariaLabel={format(resources.averageRatingAriaLabel, data.ratingsSummary.result?.averageRating, '5')}\n data={{}}\n />\n </div>\n <div className='ms-ratings-histogram__ratings__reviews'>{reviewsCountString}</div>\n </div>\n );\n};\n\n/**\n * Histogram view.\n * @param props - Ratings HistogramV iewProps.\n * @returns Histogram view module.\n */\nconst RatingsHistogramView: React.FC<IRatingsHistogramViewProps & IRatingsHistogramProps<{}>> = props => {\n const { heading, histogramItems, histogramProps, moduleProps, data, resources } = props;\n const context = props.context;\n const typeName = props.typeName;\n const moduleId = props.id;\n\n return (\n <Module {...moduleProps}>\n {heading}\n <div className='ms-ratings-histogram__container'>\n {averageRating(data, context, typeName, moduleId, resources)}\n <Node {...histogramProps}>\n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n </Node>\n </div>\n </Module>\n );\n};\n\nexport default RatingsHistogramView;\n"],"names":["async","validateCartAsync","cart","telemetry","propsContext","cartResult","cartVersion","shouldRetry","arguments","length","undefined","Version","error","warning","debug","AsyncResult","resolve","_validationResult$Val","validationResult","CartsDataActions","callerContext","actionContext","bypassCache","Id","ValidationResultsByLineId","name","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","ArrayExtensions","hasElements","_modifiedProduct$Beha2","modifiedProduct","find","product","RecordId","ProductId","Behavior","MaximumQuantity","input","cartLineId","LineId","toString","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","ProductPickUpOptionsForCartLineItems","constructor","apiSettings","getCacheKey","buildCacheKey","this","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","context","channelId","Error","getCartState","getActiveCartProductsAction","ActiveCartProductsInput","response","Promise","ProductsDataActions","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","map","createObservableDataAction","id","action","inputData","requestContext","PickUpInStore","props","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","cartline","storeSelectorModuleId","openDialog","alreadySelectedLocation","OrgUnitNumber","FulfillmentStoreId","deliveryOptions","onLocationSelected","orgUnitLocation","deliveryMode","updateCartLinePickupLocation","location","then","result","status","locationChangedHandler","catch","_onLocationChangedCallback","DeliveryMode","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","foundLocation","OrgUnitName","DeliveryOptions","_props$channelDeliver","retailMulitplePickupFeatureState","channelDeliveryOptionConfig","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","delivery","pickup","deliveryCode","Code","push","PickupDeliveryModeCodes","pickupDeliveryModeCode","option","callbacks","toggleBopis","defaultComponent","_renderShippingMethod","cartLine","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","React","className","type","onChange","value","checked","key","onClick","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","Description","ContainerProps","_assembleNode","index","foundProductAvailability","productPickUpOptions","_foundProductAvailabi","_product$Dimensions","_props$cartState","_context$request$chan","imageSettings","gridSettings","typeName","resources","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isMultipleCatalogFeatureEnabledInHq","isAuthenticated","request","user","nameOfWishlist","Name","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","IsInvoiceLine","errorMessage","ObjectExtensions","isNullOrUndefined","_getErrorMessage","currentQuantity","lineId","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","replace","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","filter","i","ValidationFailures","forEach","validation","ErrorContext","join","Quantity","onRemoveClickHandler","onRemoveClickFunction","payload","getPayloadObject","TelemetryEvent","RemoveFromCart","telemetryContent","attributes","getTelemetryAttributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","toLowerCase","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","Value","productUrl","getProductUrlSync","MsDyn365","isBrowser","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","window","href","searchParams","set","CatalogId","getInvoiceDetailsPageUrlSync","data","cartlineId","hasError","StringExtensions","isNullOrEmpty","CartLineItemComponent","catalogs","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","PrimaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","priceCurrency","channel","Currency","pickUpInStore","pickitUpText","remove","Button","Object","assign","title","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","classnames","shouldShowButtonFailedTooltip","disableButton","app","config","disableTooltip","catalogId","assembleCartlines","cartlines","reactNodes","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","hasInvoiceLine","_assembleGroupInvoiceCartlines","cartLines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","items","groupBy","item","groupDelivery","cartLinesGroup","entries","_ref","deliveryType","groupByDeliveryType","keys","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","exception","Cart","super","_isMounted","promotionPopupId","promotionLinkClick","event","setState","showPromotionDialog","state","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","validateCart","updateCartlineQuantity","cartlineToUpdate","cartActionResult","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","getTelemetryObject","telemetryPageName","friendlyName","payLoad","bind","isCartValid","_this$props$data$cart","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","CartLines","reaction","_this$props$data$cart2","_this$props$data$cart3","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$props$data$prod","_this$props$data$feat","_featureState$result","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","emailDeliveryModeCode","EmailDeliveryModeCode","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","RetailMultiplePickupFeatureState","featureState","multiplePickUpEnabled","IsEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","getCatalogId","validateCatalogId","getCartLinesGroup","contentAction","etext","TelemetryConstant","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","viewProps","_objectSpread","cartTitle","CartlinesWrapper","OrderSummaryWrapper","OrderSummaryItems","promoCode","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","orderSummaryHeading","invoiceSummaryTitle","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","showGuestCheckoutButton","guestCheckoutButtonTitle","expressCheckoutButton","slots","paymentExpress","ExpressCheckoutSectionWrapper","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","checkoutBlockedDueToUnavailableFunds","storeSelector","waitingComponent","Waiting","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","isEmpty","OrderSummaryErrors","_getOrderSummaryErrors","renderView","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","tabIndex","role","promotionDialog","Modal","isOpen","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","line","Wrapper","tag","Alert","color","assertive","outOfStockErrorMessageHeader","header","errors","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","_this$props","_featureState$result2","_this$props$context$r2","channelConfiguration","retailMultiplePickUpOptionEnabled","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","orderTotal","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","freePriceText","originalPriceText","currentPriceText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$cata","PickupDeliveryModeCode","modules","storeSelectorId","CartLineItems","productDeliveryOptions","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","salesAgreementPricePrompt","priceEditorResources","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","urlCheck","returnURL","origin","includes","_featureStatuses$find2","featureStatuses","_featureStatuses$find","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","IsB2b","_featureStatuses$find3","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$chan","_this$props$data$cata2","_this$props$data$chan2","_this$props$data$cart5","cartLinesPickUpOptions","__decorate","observer","_renderCartlines","cartEmptyText","_cartLine$cartlineId","Node","renderCartLinesGroupHeader","pickUpText","shippingText","emailShippingText","titleSeparate","_cartLine$pickUpInSto4","groupTitle","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_props$cart","_props$cart2","errorData","renderModuleAttributes","_props$context$action","emailshippingText","emptyCartText","renderCartLinesGroup","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","giftCard","loyalty","_renderOrderSummarylines","orderSummaryLines","subtotal","shipping","otherCharge","tax","totalDiscounts","description","descClassName","isChecked","ariaSetSize","ariaPosInSet","ariaLabel","AddressDetailItemFunctionComponent","labelText","isDisabled","fallbackPattern","onChangeMinValue","checkBoxLabel","disclaimerText","heading","selectedDate","setSelectedDate","useState","isDateEnabled","setIsDateEnabled","minDate","setMinDate","today","Date","toISOString","split","handleCheckboxChange","selectedValue","target","console","log","min","pattern","groupName","deliveryOptionRef","ref","moduleId","selectedItemId","channelConfig","count","changeCurrentDeliveryOption","deliveryClassName","optionClassName","RadioButtonComponent","DescriptionComponent","PriceComponent","price","CustomerContextualPrice","get","currencyCode","GetLineItems","lineClassName","lineItemClassName","changeText","changeButtonText","showDeliveryOption","setShowDeliveryOption","handleClick","UpdateInCart","_getProduct","_product","_getLineItemComponent","_cartLine$CatalogId","quantityDisplayStringLabel","deliveryMethodLabel","CheckoutCartLineDeliveryOptionsRadio","CheckoutDeliveryOptions","isLoading","groupDeliveryOptions","cartLineSelectedDeliveryOptions","checkoutErrorRef","cartLinesDeliveryOptions","init","moduleState","onEdit","isSelectDefaultOptionEnabled","onCancel","onSubmit","useDefaultDeliveryOption","canShip","cartDeliveryMode","getSavedDeliveryOption","isMultipleAddressShippingEnabled","getCartLinesSavedDeliveryOption","loadDeliveryOptions","_this$props$data$chec","checkout","checkoutCart","getCartLinesForShipping","isDeliveryModeExists","getDeliveryOptionSelected","selectedItem","DeliveryOption","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","ErrorTitleComponent","ErrorMessageComponent","getDeliveryOptionList","getAriaLabelWithPrice","code","radioButton","onDeliveryOptionChange","getSaveButton","saveBtnLabel","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","_this$props$data$chec2","information","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","_this$props$data$chec3","updateCartLinesDeliverySpecification","updateCartDeliverySpecification","savedDeliveryOption","_this$props$data$chec4","onReady","cartLinesForShipping","existingCartLineSelectedDeliveryOption","cartLineDeliveryOption","selectedDeliveryOption","deliveryModeId","trim","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","onPending","_response$errorDetail","genericErrorMessage","setIsCancellable","_this$props$data$chec5","lineSpecs","checkoutCartLines","group","_checkoutCartLines$fi","address","lineSpec","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ShipToAddress","DeliveryAddress","lineDeliverySpecifications","_this$props$data$chec6","_cartLine$LineId","cartLineSelectedDeliveryOption","RequestedDeliveryDate","requestDeliveryDate","updateCartLines","updatedCartLinesObject","_unused","_this$channelDelivery","getDeliveryOptions","_this$props$data$chec7","cartId","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","deliveryOptionFilter","filterDeliveryModeOption","FilterDeliveryModeOption","None","FilterOutNonCarrierDeliveryMode","getDeliveryOptionsAsync","_unused2","deliveryOptionsNotFound","_this$props$data$chec8","_this$props$data$chec9","updateHasCartDeliveryMode","newHasCartDeliveryMode","isPaymentVerificationRedirection","_this$props$data$chec10","getStoredDeliveryOptions","_this$props$data$chec11","_this$props$data$chec12","_this$props$data$chec13","cartLinesWithShippingAddress","_this$props$data$chec14","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","isExpressCheckoutApplied","getGroupDeliveryOptions","isExpressPaymentAppliedInCartPage","currentTarget","onCartLineDeliveryOptionChange","onCartLineRequestDeliveryDateChange","deliveryDate","getCheckoutCartLineGroupDeliveryOptions","requestDeliveryDateEnabled","enableRequestDeliveryDate","groupDeliveryOption","cartLine1","_cartLine$LineId2","_ref2","_cartLine$LineId3","_this$cartLineSelecte","_cartLine1$ShippingAd","_cartLine1$ShippingAd2","_groupDeliveryOption$","isNewLine","isShowLabel","cartLineGroupShippingAddressLabel","FullAddress","cartLineGroupDeliveryOptionsLabel","cartLineGroupDeliveryOptionsText","CheckoutCartLineDeliveryDate","cartLineGroupDeliveryRequestDeliveryDateText","cartLineGroupDeliveryRequestDeliveryDateDisclaimerText","cartLineGroupDeliveryRequestDeliveryDate","_this$cartLineSelecte2","_ref3","_cartLine$LineId4","selectedDeliveryOption1","shippingChargesString","_this$props$data$chec18","getGroupByDelivery","_item$ShippingAddress","GetDeliveryOptionsForCartLineAddressInput","getDeliveryOptionsForCartLineAddress","_group$cartLineIds","_unused3","multipleAddressShippingEnabled","timeoutRetailCall","timeoutToCallRetail","properties","ExtensionProperties","property","Key","StringValue","JSON","parse","_this$expressPaymentD","_this$expressPaymentD2","expressPaymentDetailsFromCartPage","isExpressCheckoutAppliedInCartPage","_this$props$data$chec26","when","isDataReady","_this$props$data$chec19","setTimeout","_this$props$data$chec20","_this$props$data$chec21","_this$props$data$chec22","_this$props$data$chec23","_this$props$data$chec24","_this$props$data$chec25","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec27","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec28","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","feature","isReady","isUpdating","isError","isShowList","isShowSelected","deliveryOptionAriaLabel","deliveryOptionsData","alert","ErrorComponent","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","moduleProps","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","checkoutCartLineGroupDeliveryOptions","enableCheckoutCartLineDeliveryOptions","saveButton","editButton","cancelButton","observable","computed","withModuleState","DeliveryOptionList","DeliveryOptionSelected","Module","onApplyHandler","onApplyGiftCard","preventDefault","onChangeNumberHandler","onEnterGiftCardNumber","RegExp","onChangePinHandler","onEnterGiftCardPin","onChangeExpHandler","onEnterGiftCardExp","getForm","options","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardPin","giftCardExp","supportExternalGiftCard","additionalFields","disableAddGiftCard","applyGiftCardButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","formProps","label","inputPinLabel","inputExpLabel","alertFieldLabel","fade","includeAlertClass","inputNumber","inputPin","placeholder","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","onRemoveHandler","onRemoveGiftCard","_giftCard$Id","getItem","getFormattedPrice","canRemove","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","Balance","CardCurrencyCode","giftCardLast4Digit","substr","selectedGiftCard","removeButton","itemProps","getList","giftCards","listProps","SupportedGiftCardType","CheckoutGiftCard","_this","isFetchingGiftCard","isRequired","isEnabled","giftCardExtends","onSkip","couldPaidByGiftCard","TotalAmount","giftCardSupported","External","shouldBeEnabledForGuest","handleCancelOrSubmit","hasSelectedItem","cultureFormatter","formatCurrency","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","getGiftCard","addGiftCard","Pin","ExpirationDate","TenderTypeId","current","focus","findGiftcardTenderTypes","tenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","tenderType","OperationId","ConnectorId","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","getTenderTypesAsync","internalGiftcardTenderTypes","OPERATIONS","PayGiftCertificate","externalGiftcardTenderTypes","Both","month","Number","parseInt","year","getGiftCardAsync","activeGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","card","resolveCardTypesAsync","CardType","GiftCard","loyaltyAmount","customerAccountAmount","reduce","getLoyaltyAmount","getGiftCardTotalAmount","getCustomerAccountAmount","componentDidMount","showAdditionalFields","shouldPayGiftCard","isOBORequest","EnabledPaymentsForOBO","moduleClassName","checkoutGiftCardProps","showGiftCard","TitleCompoent","form","From","SelectedGiftCard","GiftCardList","_ref4","_objectWithoutProperties","_excluded","AddResource","_ref5","ShowResource","_ref6","max","step","ariaValueMax","ariaValueMin","ariaValueNow","onBlur","text","htmlFor","CheckoutLoyalty","_defaultLoyaltyPoints","loyaltyCard","CardNumber","LoyaltyCardId","updateLoyaltyCardId","loyaltyCardNumber","shouldPayLoyalty","_setErrorMessage","_clearError","_dialogToggleRef","_applyLoyaltyPoints","_removeLoyaltyPoints","_onInputChange","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","Loyalty","isShowLoyalty","isShowAddLoyalty","disableAddLoyaltyComponent","checkoutLoyalty","showLoyalty","Heading","headingTag","loyaltyHeadingText","coveredAmountText","TextComponent","loyaltyCoveredAmountText","amount","addLoyalty","drawer","Drawer","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","cardNumber","rewardPoints","RewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","LabelComponent","payWithLoyaltyAmountLabel","loyaltyAmountInput","InputComponent","loyaltyAmountApplyButton","applyCheckoutLoyaltyPaymentText","isNaN","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","removeCheckoutLoyaltyPaymentText","innerRef","point","RewardPointId","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","ActivePoints","expiringPointsText","expiringPoints","PointsExpiringSoon","updateLoyaltyAmount","newAmount","parseFloat","num","toFixed","document","getElementById","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","callActionOrExecute","_points$MaxCurrencyVa","update","GetLoyaltyTransactionEstimationInput","newMaxPoints","AddCheckoutLoyalty","rewardPoint","ShowCheckoutLoyalty","isValidationPassed","isPlaceOrderLoading","isPlaceOrderClicked","handleCheckoutHeadingChange","checkoutHeading","cartStatus","isEmptyCart","getSlotItems","triggerPaymentWithPlaceOrder","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","onPlaceOrder","checkoutOutOfStockErrorMessage","orderConfirmation","isOverMaxQuantity","_checkout$result","hasOrderConfirmation","updatedCartVersion","updateCartLineEmailAddress","guestCheckoutEmail","placeOrder","handleCheckoutError","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","electronicDeliveryInvoiceAddress","hasShippingAddress","useShippingAddressAsElectronicDeliveryInvoiceAddress","emailDeliveryCartLines","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","updatedCart","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","_cartlineProduct$Beha","cartlineProduct","isStockedItem","IsStockedProduct","isEmailDelivery","productInventory","_productInventory$Pro","cartLinesInventoryValidation","getActiveChildModuleStates","childIds","getModule","hasModuleState","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","Msdyn365","validateForCheckout","retry","_shouldValidateQuantityLimits","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","isB2BSite","isOrderQuantityLimitsFeatureEnabledInSiteSettings","_saveShippingAndBillingAddress","tokenizedPaymentCard","Zip","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","TwoLetterISORegionName","Country","NameOnCard","Street","Address1","StreetNumber","Address2","City","State","ZipCode","Phone","invalidCartVersionErrorMessage","missingRequiredCartTenderLinesErrorMessage","checkoutApiFailureErrorMessage","invoiceCheckoutApiFailureErrorMessage","checkoutResult","apiError","statusCode","errorCode","setCheckoutErrors","_error$data","shouldEnableSinglePaymentAuthorizationCheckout","AdditionalContext","isEditorialMode","params","isEditor","isTermsAndConditionAccepted","disableForOBO","isPaidOffByCustomerAccount","amountDue","asyncResultStatus","AsyncResultStatusCode","LOADING","_this$props$data$chec29","email","tenderLine","paymentTenderType","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newTenderLine","newTokenizedPaymentCard","newPaymentTenderType","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","isCartReady","_this$props$data$chec30","isPaymentSectionContainerReady","_this$props$data$chec31","_this$props$data$chec32","_this$props$data$chec33","_this$props$data$chec34","redirectAdditionalContext","isPaymentVerificationRequired","_this$props$data$chec35","isPaymentSectionContainerHasError","_this$props$data$chec36","_this$props$data$chec37","isBillingAddressHasError","_this$props$data$chec38","_this$props$data$chec39","updateIsBillingAddressHasError","newIsBillingAddressHasError","canPlaceOrder","_this$props$data$chec40","_this$props$data$chec41","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","_this$props$data$chec42","_this$props$data$chec43","checkoutErrorLocation","checkoutPaymentErrorLocation","ErrorCode","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","CheckoutPaymentInstrument","componentDidUpdate","_this$props$data$chec44","_this$props$data$chec45","shouldFocusOnCheckoutError","_this$props$data$chec46","_this$props$data$chec47","_this$props$data$chec48","_this$props$data$chec49","_this$props$data$chec50","_this$props$data$chec51","_this$props$data$chec52","_this$props$data$chec53","_this$props$data$chec54","_this$props$data$chec55","_this$props$data$chec56","_this$props$data$chec57","_this$props$data$chec58","_this$props$data$chec59","_document","_this$props$data$chec60","disableGuidedCheckoutFlow","backToShopping","placeOrderText","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","allCheckoutInformation","checkoutInformation","info","checkoutExpressPaymentContainer","isConsentGiven","cookies","isMobile","device","Type","termsAndConditions","backToShoppingAttributes","checkoutBtnText","hasCartDeliveryMode","hasGuestCheckoutEmail","hasExpressPaymentContainer","getElementsByClassName","style","display","hasSalesOrder","salesOrder","checkoutProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","renderMsdyn365Text","AlertComponent","loading","_this$props$data$chec61","_this$props$data$chec62","canShow","guidedForm","GuidedFormComponent","resource","orderSummary","getOrderSummary","invoicePaymentSummary","getInvoicePaymentSummary","lineItems","getLineItems","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","checkoutGuidedFormHasError","values","every","SUCCESS","FAILED","editProps","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","EmailDelivery","LineItemComponent","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","LineItemDeliveryGroup","LineItemList","lineItem","LineItemGroupComponentWithMultiplePickUp","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","OrderSummaryComponent","_ref9","lines","customerAccount","PaymentSummaryComponent","_ref10","_getDeliveryLocation","locationMatch","_input$data$catalogs","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","_getEmailDeliveryComponents","emailDeliveryText","_getLineItemsComponents","isPickUp","_getCartPickDeliveryMode","cartLineItem","_channelDeliveryOptio","isNullOrWhitespace","_countItems","_filterItemsByDiliveryType","_channelDeliveryOptio2","_getLineItemsByDeliveryType","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","_productDeliveryOptio","suffix","handleLineItemHeadingChange","lineItemsHeading","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","cartLinesGrp","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","iconClass","_getLineItems","editCartText","EditCart","attribute","groupClass","loyaltyLabel","giftcardLabel","customerAccountLabel","showLineItems","orderSummaryProps","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","isCancelAllowed","hasControlGroup","saveAndContinueBtnLabel","canSubmit","canCancel","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","focusOnFirstFocusableElement","node","child","querySelector","focusOnEditButton","scrollToTitle","formCard","scrollIntoView","getTitle","Tag","_getModules","_getId","prevProps","isActive","onNext","shouldFocus","children","childrenModules","childModule","childId","childState","setCheckoutErrorFocus","isExpanded","isPending","hasInitialized","changeBtnLabel","CheckoutChange","changeBtnAttributes","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","paymentInstrumentModuleId","CheckoutGuidedForm","currentStep","getEnabledModules","_enableAfterModule","Boolean","nextChildId","_isPaymentSectionContainer","_sectionState$childId","sectionState","currentId","getStep","indexOf","getId","getHeading","moduleChildId","_state$childIds","shouldCollapseAfterRedirect","hasMissingInfo","hasOrderError","previousModuleHasError","_this$props$requestCo","GuidedCard","enableControl","buttonsStates","onPlaceOrderHandler","isBusy","buttonSetState","setIsBusy","Purchase","PayCard","PayLoyalty","PayCustomerAccount","orderedProducts","redirect","PlaceOrder","balanceCheckButton","GiftCardBalanceCheck","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","Form","Item","CatalogLabelComponent","isB2b","catalog","CartLineItemFunctions","renderProductDimensions","Product","DimensionStrings","productDimension","IsGiftCard","DiscountLines","discountLine","OfferId","isSalesLine","PeriodicDiscount","EffectiveAmount","BasePrice","EffectivePercentage","inventoryCssName","unitOfMeasureDisplayType","DefaultUnitOfMeasure","_props$context$reques","hasShippingMethod","shippingChargeLines","ChargeLines","chargeLine","IsShipping","freightFee","chargeTotal","CalculatedAmount","priceComponent","_cartline$ChargeLines","chargeline","SalesAgreementLineRecordId","_props$context$reques2","_props$primaryImageUr","destructDimensionStrings","fallbackImageUrl","getFallbackImageUrl","ItemId","OmniChannelMedia","productDimensions","cropFocalRegion","renderDisountLines","renderInventoryLabel","renderUnitOfMeasure","renderShippingLabel","renderOtherCharges","renderSalesAgreementPrompt","productAttribute","productName","imgeClassName","newValue","Image","src","fallBackSrc","altText","loadFailureBehavior","NetAmountWithAllInclusiveTax","GrossAmount","ExtendedPrice","NetPrice","salesAgreementLineId","_generateQuantityandPrice","nodes","IncrementalQuantity","currentCount","isGiftCard","classNames","DiscountAmount","CartLinePriceEditor","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","invoiceLine","InvoiceAmount","format","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","Math","totalAmountAfterGiftCard","MediaGallery","_props$config$zoomedI","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","player","defaultGalleryImageSettings","md","defaultThumbnailImageSettings","onExiting","animating","onExited","next","removeInlineZoomStyle","isLastItem","nextIndex","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","autoplay","currentIndex","mediaItems","_mediaItems","_this$player$current","mediaTypeValue","MediaType","Video","play","_this$player$current2","pause","getImagesData","skipImageValidation","_this$props$config$im","_this$props$config$im2","source","imageSource","mediaLocations","mediaLocationsForSelectedVariant","mediaLocation","_mediaLocation$Uri","Uri","getAltText","shouldUseCmsAltText","AltText","IsApplicableForChildEntities","isApplicableForChildEntities","curatedImages","_filterMasterImageFromVariant","_renderCarouselItemVideo","mediaData","videoData","_videoData$_links","playerResources","videoMetaData","videoId","duration","playTime","thumbnail","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","Player","playerData","_renderEmptyImage","_getCarouselItem","image","isInPopup","fallbackImage","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","getVideoThumbNailItem","classes","_refHandler","divRef","which","KeyCodes","Enter","Space","_renderVideoThumbnail","fullScreenTitleText","openModalDialog","_toggleModal","imageModalSlider","ZoomView","_mapProductToImageData","carouselprops","Carousel","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","ImagefullView","altTextSource","mediaGalleryImages","isImageZoomed","isInitialLoad","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","variant","VariantType","Viewport","_this$props$config$im3","_this$props$context$r3","shouldUpdateOnPartialDimensionSelection","_setRenderType","_this$props$config$th","validateProductImages","thumbnailImageSettings","_setImages","_this$props$config$th2","getValidProductImages","productVariant","_product$productVaria","_this$props$context$a","_this$props$config$th3","getProductImages","fireImmediately","_this$props$config$th4","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","_this$props$context$r4","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","stringify","lastUpdate","defaultKey","_getEmptyThumbnailItem","zoomView","curatedImage","mediaToSet","all","getVideoMetadataFromApi","now","media","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","MasterProductId","itemId","_item$additionalPrope","_this$props$config$da","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","mobileZoomedInImageClassName","transform","classList","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","positionX","clientX","left","positionY","clientY","top","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","innerWidth","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","_this$props$config$da5","onMouseOut","onMouseMoveLensContainer","onMouseOverImageContainer","_product$PrimaryImage","_this$fullScreenOverl","parentDiv","removeAttribute","removeContainerZoomStyle","_renderThumbnails","thumbnails","_renderThumbnailItem","imageAltText","_context$app","validateMediaLocationAsync","imageData","http","XMLHttpRequest","open","addEventListener","send","selectedProduct","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","pairs","pair","_actionContext$reques","isPreview","commerceApiRequest","previewImageData","displayOrder","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","commerceVideoMetadataRequest","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","OtherChargeAmount","hasDeliveryMethod","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","ProductCollection","handleHeadingChange","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","validValues","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","initProductState","productPrices","productCollectionProducts","productCollection","equals","listType","getProductPriceForSelectedProducts","ProductPriceForSelectedProductsInput","p","IsMasterProduct","productPrice","_this$state$productsD","trace","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","TotalRatings","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","priceResources","priceRangeSeparator","ProductContainer","productComponent","ProductComponent","ratingAriaLabel","quickViewButton","dimensionAvailabilities","dimensionAvailability","_product$MasterProduc","masterProductId","_getActivePrice","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSeeAllButton","headingLabel","recommendation","discountIds","searchPageLink","url","seeAllButtonText","enableAffiliationBasedPricing","shouldDisplaySeeAllButton","recommendationListId","isCarousel","layout","headingComponent","updatedProducts","getProductData","productCollectionViewProps","flipperPrevious","flipperNext","ProductCollectionContainer","GridComponentProps","seeAllButton","_renderCarousel","carouselContainer","_renderProduct","_renderGrid","gridContainer","_renderNoProduct","noProductToRenderText","HistogramItems","ratingsSummary","totalRatingsCount","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","stars","totalCount","percentage","formattedPercent","Intl","NumberFormat","locale","barItemAriaLabel","starLabel","bar","Progress","buttonProps","AverageRatingNumber","summary","averageRating","TotalReviews","RatingsHistogram","selectFilterBy","ratingCount","completeClass","histogramItems","RatingComponent","avgRating","averageRatingAriaLabel","readOnly","hideCount","averageNumber","totalReviews","ratingsSummaryProps","histogramProps","filterKey","createRatingsReviewsStateInput","histogramItem","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Decimal","isRangeTypeForInteger","Integer","isCustomRangeTypeIntegerSelected","selectedRefinementCriterion","parentProductRefinerHierarchy","RowNumber","DataTypeValue","DisplayTemplateValue","DisplayTemplate","Range","isSingleSelectRangeTypeIntegerSelected","productRefinerValue","LeftValueBoundString","RightValueBoundString","findMatchingRefinementCriterion","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","parent","RefinerRecordId","RefinerSourceValue","getIntegerRangeName","rangeValue","RightValueBoundLocalizedString","LeftValueBoundLocalizedString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","r","selectedCriterion","isSelecting","rangeStart","rangeEnd","Text","TrueFalse","RefinerTypeValue","RefinerType","SingleSelect","Values","matchingIndex","findIndex","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","e","stopPropagation","clearAll","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","hierarchy","_rangeParentDisplay$","rangeParentDisplay","_getKeyForRefinerValue","rangeDisplayType","clearAllText","choiceAriaLabel","closeAriaLabel","selectedRefinersMap","clearAllAttributes","newIntRange","urlBuilder","_parent","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","KeyName","_formatPrice","UnitText","filterValue","refiner","currency","selected","ErrorMessage","FeatureSearchResultItem","_context$request$app","productRecordId","getProductPageUrlSync","featureSimilarDescriptionTitle","featureSimilarLooksTitle","onTelemetryClick","imageUrl","img","imageProps","renderProductPlacementImage","Link","ModalToggle","modalNode","autoFocus","applicationNode","returnFocusRef","returnRef","onModalToggle","zIndex","modalHeaderNode","modalTitle","modalFooterNode","modalCloseButtonText","getInventoryLabel","AttributeValues","inventoryAttribute","TextValue","ProductSearchResultItems","moduleType","inventoryLabel","swatchItemAriaLabel","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","initialMin","initialMax","minValue","maxValue","labels","sliderKeyString","sliderThumbs","validationErrorMin","validationErrorMax","touchedMin","touchedMax","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_this$props$selectedR5","_this$props$selectedR6","_this$props$selectedR7","_this$props$selectedR8","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onFocus","maxLabel","placeholderTextMax","ariaAttributes","Slider","inForm","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","onToggle","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","touched","validationError","validationErrorRange","inputAsNum","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","attrs","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productText","productCount","Count","refineMenuItemAriaLabel","dimensionType","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","colorHexCode","SwatchComponent","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","isMobileView","moduleTypeName","RangeRefineItemInput","_changeMinInputRange","_changeMaxInputRange","_applyCustom","invalidData","updateInputRangerProps","_isUndefined","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpandedOnInitialLoad","productRefinerHierarchy","hideRating","Collapse","timeout","_renderChildItems","_renderSingleMultiSelect","_renderRange","refinerValuesList","listItems","_getRangeType","SliderWithBars","onUpdateRefiners","prevState","Separator","separator","Title","SearchResultContainer","SearchResultContainer_1","sortByDropdownOptions","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","_viewport","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","_updateVariantAvailability","includeAttributes","_updateListPageState","listPageState","_this$props$config$it","_this$props$config$it2","querySorting","query","sorting","decodeURIComponent","currentPageNumber","skip","itemsPerPage","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","featureProduct","_this$props$data$list","_this$props$data$list2","_this$props$data$list3","_this$props$data$list4","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","SearchResultModal","_modalToggleRef","_getCollectionTitle","collectionTitle","category","getFriendlyName","NameTranslations","productCountNumber","productCountText","numberOfProducts","oneProduct","TitleContainer","titlePrefix","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","skipCount","totalItems","previousText","nextText","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","refiners","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandRefinersCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","channelInventoryConfiguration","isInventorySortableAttribute","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","isInventoryProductAttribute","InventoryProductAttributeRecordId","_getChoiceSummary","_this$props$data$refi","selectedRefiners","rating","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$prod5","shouldAllowBackNavigation","breadCrumbType","shouldAllowBack","isPriceMinMaxFeatureState","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list6","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","paginationPreviousText","paginationNextText","_updateViewport","validationErrorNotNumber","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","StoreOperationsDataActions","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r5","_this$props$context$r6","_this$props$context$r7","newListPageState","GetFullProductsByCollectionInput","Paging","Top","Skip","Sorting","recordId","Recommendation","productResults","getCollectionProducts","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r8","_this$props$context$r9","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","removeEventListener","_listPageState$result","_listPageState$result2","_this$props$context$r10","_this$props$data$list7","_this$props$data$list8","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","FeatureSearchContainer","similarLookProduct","_getViewport","Browser","createSearchResultModal","modalProps","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","SocialShareItem","_getSocialShareItem","viewprops","SocialShareItemElement","icon","socialMedia","SocialMediaComponent","SocialMedia","Facebook","postUrl","Twitter","Pinterest","Linkedin","Mail","SocialShareItemView","CartIconView","cartIconRef","_modalContainer","placement","hideArrow","wrapClassName","isModalOpen","closeModal","_openModal","_this$cartIconRef$cur","_renderCartCloseIcon","_renderCartItemCount","cartItemCount","totalItemsInCart","_escFunction","keyCode","Escape","isAutoDisplayTriggered","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","miniCartWrapper","cartIcon","flyoutTitle","emptyCart","cartLineIndex","miniCartItemWrapper","storeLocation","promoContentItem","_props$data$cart$resu","totalPrice","emptyPrice","totalPriceFormatString","renderTotalPrice","_props$data$cart$resu2","subTotalMessage","renderSubtotalMessage","goToCartButton","continueShoppingButtonTitle","renderCartlines","renderThumbnailItem","GetThumbnailItemComponent","imageId","_props$context$app$co","_props$config$thumbna","_props$callbackToggle","_props$callbackThumbn","call","handleKeyDown","playVideoTitleText","GetEmptyThumbnailItemComponent","_props$context$app$co2","_props$config$thumbna2","_props$context$reques3","xl","renderThumbnails","getMediaGalleryItems","_item$videoData","videoThumbnail","RenderVideo","NewSingleSlideCarouselComponentProps","NewThumbnails","componentId","_data$ratingsSummary$","_data$ratingsSummary$2","_data$ratingsSummary$3","_data$ratingsSummary$4","_data$ratingsSummary$5","_data$ratingsSummary$6","reviewsCount","reviewsCountString","numberOfReviewsString"],"sourceRoot":""}