{"version":3,"file":"static/js/99a3e9ecbbc14eeb7070.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/get-selected-variant.ts?43b0","webpack://Msdyn365.Commerce.Online/./src/modules/lobas-media-gallery/lobas-media-gallery.props.autogenerated.ts?0549","webpack://Msdyn365.Commerce.Online/./src/modules/lobas-media-gallery/utils/get-valid-product-images.ts?2ce5","webpack://Msdyn365.Commerce.Online/./src/modules/components/lobas-glb-viewer.tsx?ebb4","webpack://Msdyn365.Commerce.Online/./src/modules/lobas-media-gallery/lobas-media-gallery.tsx?55b7","webpack://Msdyn365.Commerce.Online/./src/modules/lobas-media-gallery/lobas-media-gallery.view.tsx?0d0c","webpack://Msdyn365.Commerce.Online/./lib/lobas-media-gallery/module-registration.js?ab39","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n getCatalogId,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric,\r\n IRequestContext\r\n} from '@msdyn365-commerce/core';\r\nimport {\r\n BypassCache,\r\n ProductDimension,\r\n ProductDimensionAvailabilitySearchCriteria,\r\n ProductsDataActions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport {\r\n ArrayExtensions,\r\n createInventoryAvailabilitySearchCriteria,\r\n QueryResultSettingsProxy,\r\n generateProductImageUrl,\r\n getDimensionValuesFromQuery,\r\n getSelectedProductIdFromActionInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { lOBGetDimensionValuesWithEstimatedAvailabilitiesAsync } from './DataActionExtension.g';\r\n//import { createInventoryAvailabilitySearchCriteria } from './utilities/product-inventory-utils';\r\n//import { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\r\n//import { generateProductImageUrl, getDimensionValuesFromQuery, getSelectedProductIdFromActionInput } from './utilities/utils';\r\n\r\n/**\r\n * Stores data about the selected product.\r\n */\r\nexport interface ISelectedProduct extends SimpleProduct {\r\n productVariant?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * Get selected variant action input class.\r\n */\r\nexport class SelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n\r\n public channelId: number;\r\n\r\n public matchingDimensionValues?: ProductDimension[];\r\n\r\n public bypassCache?: BypassCache;\r\n\r\n public catalogId?: number;\r\n\r\n public constructor(\r\n productId: number,\r\n channelId: number,\r\n matchingDimensionValues?: ProductDimension[],\r\n bypassCache?: BypassCache,\r\n requestContext?: IRequestContext\r\n ) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.matchingDimensionValues = matchingDimensionValues;\r\n this.bypassCache = bypassCache;\r\n\r\n if (requestContext) {\r\n this.catalogId = getCatalogId(requestContext);\r\n }\r\n }\r\n\r\n /**\r\n * Cache key.\r\n * @returns String.\r\n */\r\n public getCacheKey: () => string = () => 'SelectedVariant';\r\n\r\n /**\r\n * Cache object type.\r\n * @returns String.\r\n */\r\n public getCacheObjectType: () => string = () => 'SimpleProduct';\r\n\r\n /**\r\n * Cache type.\r\n * @returns String.\r\n */\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the getSelectedVariant data action.\r\n * @param inputData - The input data passed to the createInput method.\r\n * @returns The input for the ata action getSelectedVariantNewAction.\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): SelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n\r\n if (productId) {\r\n return new SelectedVariantInput(\r\n +productId,\r\n +inputData.requestContext.apiSettings.channelId,\r\n undefined,\r\n undefined,\r\n inputData.requestContext\r\n );\r\n }\r\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\r\n};\r\n\r\n/**\r\n * Checks if given product has any unmatched dimensions.\r\n * Modifies product entity to use matched dimension values.\r\n * @param product - The product to analyze and modify.\r\n * @param matchingDimensionValues - Matched dimensions.\r\n * @returns True if has any unmatched dimension, false if all dimensions are specified.\r\n */\r\nconst checkIfHasUnmatchedDimensions = (product: SimpleProduct, matchingDimensionValues: ProductDimension[]): boolean => {\r\n let hasUnmatchedDimension: boolean = false;\r\n if (product.Dimensions) {\r\n product.Dimensions = product.Dimensions.map(dimension => {\r\n return { ...dimension };\r\n });\r\n for (const dimension of product.Dimensions) {\r\n const matchedTargetDimension = matchingDimensionValues.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n\r\n if (matchedTargetDimension) {\r\n dimension.DimensionValue = matchedTargetDimension.DimensionValue;\r\n } else {\r\n hasUnmatchedDimension = true;\r\n }\r\n }\r\n }\r\n return hasUnmatchedDimension;\r\n};\r\n\r\n/**\r\n * Retrieves product dimensions with availabilities.\r\n * @param product - Product for which the dimensions need to be retrieved.\r\n * @param matchingDimensionValues - Selected dimensions - filter criteria for the dimensions API.\r\n * @param context - Action context.\r\n * @param catalogId - Catalog id.\r\n * @returns Array of dimensions.\r\n */\r\nconst getFullDimensions = async (\r\n product: SimpleProduct,\r\n matchingDimensionValues: ProductDimension[],\r\n context: IActionContext,\r\n catalogId?: number\r\n) => {\r\n let fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = [];\r\n const fullDimensionPromises = (product.Dimensions ?? []).map(dimension => {\r\n const shippingInventoryConfiguration = createInventoryAvailabilitySearchCriteria(context, [], true, undefined, undefined);\r\n const searchCriteria: ProductDimensionAvailabilitySearchCriteria = {\r\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\r\n MatchingDimensionValues: matchingDimensionValues,\r\n DefaultWarehouseOnly: shippingInventoryConfiguration.DefaultWarehouseOnly,\r\n FilterByChannelFulfillmentGroup: shippingInventoryConfiguration.FilterByChannelFulfillmentGroup,\r\n DeliveryModeTypeFilterValue: shippingInventoryConfiguration.DeliveryModeTypeFilterValue,\r\n CatalogId: catalogId\r\n };\r\n const dimensionValuesPromise = lOBGetDimensionValuesWithEstimatedAvailabilitiesAsync(\r\n { callerContext: context, queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context) },\r\n product.MasterProductId ? product.MasterProductId : product.RecordId,\r\n searchCriteria\r\n );\r\n\r\n return dimensionValuesPromise.then(dimensionValues => {\r\n const fullDimension: IProductDimensionsWithAvailabilitiesFull = {\r\n ...dimension,\r\n dimensionValuesWithInventory: dimensionValues\r\n };\r\n return fullDimension;\r\n });\r\n });\r\n fullDimensions = await Promise.all(fullDimensionPromises);\r\n return fullDimensions;\r\n};\r\n\r\n/**\r\n * Retrieves product variant for the given input or undefined if not found.\r\n * @param input - Action input.\r\n * @param context - Action context.\r\n * @param fullDimensions - Product dimensions with availabilities.\r\n * @returns A product variant that is available or undefined.\r\n */\r\nconst getProductVariant = async (\r\n input: SelectedVariantInput,\r\n context: IActionContext,\r\n fullDimensions: IProductDimensionsWithAvailabilitiesFull[]\r\n) => {\r\n let productVariant: SimpleProduct | undefined;\r\n if (\r\n ArrayExtensions.hasElements(fullDimensions) &&\r\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory) &&\r\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory[0].ProductIds)\r\n ) {\r\n const variantProductId = fullDimensions[0].dimensionValuesWithInventory[0].ProductIds[0];\r\n const result = await ProductsDataActions.getByIdsAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context),\r\n bypassCache: input.bypassCache\r\n },\r\n input.channelId,\r\n [variantProductId],\r\n null,\r\n input.catalogId ?? 0\r\n );\r\n productVariant = result[0];\r\n productVariant = { ...productVariant };\r\n const variantImageUrl = generateProductImageUrl(productVariant, context.requestContext.apiSettings);\r\n\r\n if (variantImageUrl) {\r\n productVariant.PrimaryImageUrl = variantImageUrl;\r\n }\r\n }\r\n\r\n return productVariant;\r\n};\r\n\r\n/**\r\n * Action method for the getSelectedVariant data action.\r\n * @param input - The action input class.\r\n * @param context - The action context.\r\n * @returns Simple product.\r\n */\r\nasync function getSelectedVariantAction(input: SelectedVariantInput, context: IActionContext): Promise {\r\n const matchingDimensionValues = input.matchingDimensionValues ?? getDimensionValuesFromQuery(context.requestContext.url.requestUrl);\r\n\r\n const result = await ProductsDataActions.getByIdsAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context),\r\n bypassCache: input.bypassCache\r\n },\r\n input.channelId,\r\n [input.productId],\r\n null,\r\n input.catalogId ?? 0\r\n );\r\n let product = result[0];\r\n\r\n // Need to dereference this before editing it. Otherwise we might not\r\n // properly get the mobx events because if things aren't properly observable\r\n // they won't fire when you set them, and then if you don't deref the value in\r\n // the cache will match the value when you try to save it, so it won't detect any\r\n // changes there either\r\n product = { ...product };\r\n const hasUnmatchedDimension = checkIfHasUnmatchedDimensions(product, matchingDimensionValues);\r\n\r\n const newImageUrl = generateProductImageUrl(product, context.requestContext.apiSettings);\r\n\r\n if (newImageUrl) {\r\n product.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n const fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = await getFullDimensions(\r\n product,\r\n matchingDimensionValues,\r\n context,\r\n input.catalogId\r\n );\r\n\r\n // Retrieve product variants only if matching dimensions are provided.\r\n const productVariant: SimpleProduct | undefined = ArrayExtensions.hasElements(matchingDimensionValues)\r\n ? await getProductVariant(input, context, fullDimensions)\r\n : undefined;\r\n\r\n // Update dimension value back to the one that comes from API since the URL query might have a different format for the dimension values.\r\n if (productVariant?.Dimensions && product.Dimensions) {\r\n for (const dimension of product.Dimensions) {\r\n const matchedTargetDimensionFromApi = productVariant.Dimensions.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n const matchedTargetDimensionFromSearch = matchingDimensionValues.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n\r\n if (matchedTargetDimensionFromSearch && matchedTargetDimensionFromApi) {\r\n dimension.DimensionValue = matchedTargetDimensionFromApi.DimensionValue;\r\n }\r\n }\r\n }\r\n\r\n if (!hasUnmatchedDimension && ArrayExtensions.hasElements(matchingDimensionValues) && productVariant) {\r\n return productVariant;\r\n }\r\n\r\n const selectedProduct: ISelectedProduct = product;\r\n selectedProduct.productVariant = productVariant;\r\n return selectedProduct;\r\n}\r\n\r\n/**\r\n * The complete getSelectedVariant data action.\r\n */\r\nexport const getSelectedVariantActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-selected-variant',\r\n action: getSelectedVariantAction as IAction,\r\n input: createInput\r\n});\r\n\r\nexport default getSelectedVariantActionDataAction;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ILobasMediaGallery contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum imageSource {\r\n pageContext = 'pageContext',\r\n productId = 'productId'\r\n}\r\n\r\nexport const enum imageZoom {\r\n inline = 'inline',\r\n container = 'container'\r\n}\r\n\r\nexport const enum thumbnailsOrientation {\r\n vertical = 'vertical',\r\n horizontal = 'horizontal'\r\n}\r\n\r\nexport interface ILobasMediaGalleryConfig extends Msdyn365.IModuleConfig {\r\n imageSource?: imageSource;\r\n images?: Msdyn365.IImageData[];\r\n productId?: string;\r\n imageZoom?: imageZoom;\r\n allowFullScreen?: boolean;\r\n dataScale?: string;\r\n zoomedImageSettings?: Msdyn365.IImageSettings;\r\n thumbnailsOrientation?: thumbnailsOrientation;\r\n thumbnailImageSettings?: Msdyn365.IImageSettings;\r\n galleryImageSettings?: Msdyn365.IImageSettings;\r\n shouldHideMasterProductImagesForVariant?: boolean;\r\n showPaginationTooltip?: boolean;\r\n shouldUpdateOnPartialDimensionSelection?: boolean;\r\n className?: string;\r\n skipImageValidation?: boolean;\r\n threeDViewerScriptURL?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface ILobasMediaGalleryResources {\r\n nextScreenshotFlipperText: string;\r\n previousScreenshotFlipperText: string;\r\n fullScreenTitleText: string;\r\n ariaLabelForSlide: string;\r\n glbViewerBtnLabel: string;\r\n closeGlbViewerBtnLabel: string;\r\n}\r\n\r\nexport interface ILobasMediaGalleryProps extends Msdyn365.IModule {\r\n resources: ILobasMediaGalleryResources;\r\n config: ILobasMediaGalleryConfig;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getCatalogId, IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nexport async function getValidProductImages(\r\n productId: number,\r\n channelId: number,\r\n actionContext: IActionContext,\r\n imageSettings: IImageSettings,\r\n selectedProduct?: SimpleProduct\r\n): Promise {\r\n const catalogId = getCatalogId(actionContext.requestContext);\r\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\r\n\r\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\r\n .then(mediaLocations => {\r\n if (mediaLocations) {\r\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings))).then(\r\n pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n }\r\n );\r\n }\r\n\r\n return [];\r\n })\r\n .catch(error => {\r\n actionContext.telemetry.exception(error);\r\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\r\n return [];\r\n });\r\n}\r\n\r\nexport async function validateProductImages(\r\n mediaLocations: MediaLocation[],\r\n actionContext: IActionContext,\r\n imageSettings: IImageSettings\r\n): Promise {\r\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings)))\r\n .then(pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n })\r\n .catch(error => {\r\n actionContext.telemetry.exception(error);\r\n actionContext.telemetry.debug('Unable to validate prodcut images');\r\n return [];\r\n });\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unused-vars-experimental -- .\r\nasync function validateMediaLocaionAsync(mediaLocation: MediaLocation, imageSettings?: IImageSettings): Promise<[IImageData, boolean]> {\r\n const imageData = {\r\n src: mediaLocation.Uri || '',\r\n altText: mediaLocation.AltText || ''\r\n };\r\n\r\n if (imageData.src === '') {\r\n return [imageData, false];\r\n }\r\n\r\n return new Promise<[IImageData, boolean]>(resolve => {\r\n try {\r\n const http = new XMLHttpRequest();\r\n http.open('HEAD', imageData.src, true);\r\n\r\n http.addEventListener('load', () => {\r\n resolve([imageData, http.status === 200 || http.status === 201]);\r\n });\r\n\r\n http.addEventListener('error', () => {\r\n resolve([imageData, false]);\r\n });\r\n\r\n http.send();\r\n } catch {\r\n resolve([imageData, false]);\r\n }\r\n });\r\n}\r\n","/* eslint-disable no-debugger */\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport * as React from 'react';\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\n//import Modal from 'reactstrap/lib/Modal';\r\n//import ModalBody from 'reactstrap/lib/ModalBody';\r\n\r\nexport interface ILobasGlbViewerProps {\r\n itemId: string;\r\n onClick?(): void;\r\n label: string;\r\n className: string;\r\n}\r\n\r\nexport interface ILobasGlbViewerState {\r\n show: boolean;\r\n modal: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * LobasGlbViewer component\r\n * @extends {React.PureComponent}\r\n */\r\nexport default class LobasGlbViewer extends React.PureComponent {\r\n public constructor(props: ILobasGlbViewerProps) {\r\n super(props);\r\n this.state = { show: false, modal: false };\r\n }\r\n\r\n public componentDidMount() {\r\n void fetch(`https://lob.as/3d/${this.props.itemId}.zip`).then(res => {\r\n console.log(res);\r\n if (res.status === 200) {\r\n this.setState({ show: true });\r\n }\r\n });\r\n }\r\n\r\n public render(): JSX.Element {\r\n if (this.state.show) {\r\n return (\r\n
\r\n \r\n {this.props.label}\r\n \r\n
\r\n );\r\n } else {\r\n return <>;\r\n }\r\n }\r\n}\r\n\r\nexport function AddScript(urlOfTheLibrary: string) {\r\n if (DoesScriptExist(urlOfTheLibrary)) {\r\n RemoveScript(urlOfTheLibrary);\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n const script = document.createElement('script');\r\n script.src = urlOfTheLibrary;\r\n script.async = true;\r\n document.body.appendChild(script);\r\n }\r\n}\r\n\r\nexport function RemoveScript(urlOfTheLibrary: string) {\r\n const scripts = document.getElementsByTagName('script');\r\n for (let i = 0; i < scripts.length; i++) {\r\n if (scripts[i].src.includes(urlOfTheLibrary)) {\r\n document.body.removeChild(scripts[i]);\r\n return;\r\n }\r\n }\r\n}\r\n\r\nexport function DoesScriptExist(urlOfTheLibrary: string) {\r\n const scripts = document.getElementsByTagName('script');\r\n for (let i = 0; i < scripts.length; i++) {\r\n if (scripts[i].src.includes(urlOfTheLibrary)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n","/* eslint-disable no-debugger */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Carousel, ICarouselProps } from '@msdyn365-commerce/components';\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n defaultDataScale,\r\n IComponentNodeProps,\r\n ImagefullView,\r\n IModalViewProps,\r\n IModuleProps,\r\n inlineZoomImageOnHover,\r\n inlineZoomImageOnMouseMove,\r\n inlineZoomImageOnMouseOut,\r\n inlineZoomInitClick,\r\n INodeProps,\r\n ISingleSlideCarouselProps,\r\n isMobile,\r\n KeyCodes,\r\n NodeTag,\r\n onContainerZoomInit,\r\n onMouseMoveLensContainer,\r\n onMouseOutLensContainer,\r\n onMouseOverImageContainer,\r\n removeContainerZoomStyle,\r\n removeInlineZoomStyle,\r\n SingleSlideCarousel,\r\n VariantType,\r\n Button\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { ILobasMediaGalleryData } from './lobas-media-gallery.data';\r\nimport { imageSource, imageZoom, ILobasMediaGalleryProps, thumbnailsOrientation } from './lobas-media-gallery.props.autogenerated';\r\nimport { getValidProductImages, validateProductImages } from './utils';\r\nimport LobasGlbViewer, { AddScript } from '../components/lobas-glb-viewer';\r\n\r\n/**\r\n * IMediaGalleryState Interface.\r\n */\r\nexport interface IMediaGalleryState {\r\n animating: boolean;\r\n activeIndex: number;\r\n isImageZoomed: boolean;\r\n modalIsOpen: boolean;\r\n show3D: boolean;\r\n lastUpdate?: number;\r\n isMobileImageZoomed?: boolean;\r\n mediaGalleryItems?: IImageData[];\r\n isInitialLoad?: boolean;\r\n shouldUseOptimizedImage?: boolean;\r\n}\r\n\r\n/**\r\n * IMediaGalleryThumbnailsViewProps Interface.\r\n */\r\nexport interface IMediaGalleryThumbnailsViewProps {\r\n ThumbnailsContainerProps: INodeProps;\r\n SingleSlideCarouselComponentProps: INodeProps;\r\n items?: IMediaGalleryThumbnailItemViewProps[];\r\n}\r\n\r\n/**\r\n * IMediaGalleryThumbnailItemViewProps Interface.\r\n */\r\nexport interface IMediaGalleryThumbnailItemViewProps {\r\n ThumbnailItemContainerProps: INodeProps;\r\n Picture: React.ReactElement;\r\n}\r\n\r\n/**\r\n * IMediaGalleryViewProps Interface.\r\n */\r\nexport interface IMediaGalleryViewProps extends ILobasMediaGalleryProps {\r\n state: IMediaGalleryState;\r\n MediaGallery: IModuleProps;\r\n CarouselProps: INodeProps;\r\n Thumbnails: IMediaGalleryThumbnailsViewProps;\r\n Modal?: React.ReactElement | null;\r\n callbackToggle?(): void;\r\n callbackThumbnailClick?(index: number): void;\r\n callbackThumbnailKeyDown?(index: number): void;\r\n Props3dViewer: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Props for carousel.\r\n */\r\ninterface IMediaGalleryCarouselItems {\r\n items: ItemType[];\r\n keys: (string | undefined)[];\r\n}\r\n\r\n/**\r\n * Media gallery component.\r\n */\r\nclass MediaGallery extends React.Component, IMediaGalleryState> {\r\n private readonly _inlineZoomDivRef: Map = new Map();\r\n\r\n private mediaGalleryImages: IImageData[] = [];\r\n\r\n private fallbackImage?: string;\r\n\r\n private readonly defaultGalleryImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\r\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\r\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: false,\r\n disableLazyLoad: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n private readonly defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\r\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\r\n },\r\n lazyload: false,\r\n disableLazyLoad: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n private readonly _zoomedImageSettings: IImageSettings;\r\n\r\n public constructor(props: ILobasMediaGalleryProps) {\r\n super(props);\r\n this._toggleModal = this._toggleModal.bind(this);\r\n this.state = {\r\n activeIndex: 0,\r\n animating: false,\r\n isImageZoomed: false,\r\n modalIsOpen: false,\r\n isInitialLoad: true,\r\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation,\r\n show3D: false\r\n };\r\n\r\n this._zoomedImageSettings =\r\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\r\n\r\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\r\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\r\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\r\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\r\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\r\n this.clickView3D = this.clickView3D.bind(this);\r\n }\r\n\r\n public isMobile(): boolean {\r\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\r\n return size === 'xs';\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const source = this.props.config.imageSource ?? imageSource.pageContext;\r\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\r\n this._setRenderType();\r\n if (source === imageSource.pageContext) {\r\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\r\n const images = await validateProductImages(\r\n this.props.data.mediaLocationsForSelectedVariant.result,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\r\n );\r\n this._setImages(images);\r\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\r\n const product = this.props.data.product.result;\r\n const images = await getValidProductImages(\r\n product.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings || this.defaultThumbnailImageSettings,\r\n product.productVariant\r\n );\r\n\r\n this._setImages(images);\r\n } else {\r\n this._setImages([]);\r\n }\r\n\r\n reaction(\r\n () => {\r\n const product = this.props.data.product.result;\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n if (!shouldUpdateOnPartialDimensionSelection || ObjectExtensions.isNullOrUndefined(product.productVariant?.RecordId)) {\r\n return `${product.RecordId}`;\r\n }\r\n\r\n return `${product.RecordId}-${product.productVariant!.RecordId}`;\r\n },\r\n async () => {\r\n const product = this.props.data.product.result;\r\n if (product) {\r\n const images = await getValidProductImages(\r\n product.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\r\n );\r\n this._setImages(images);\r\n } else {\r\n this._setImages([]);\r\n }\r\n }\r\n );\r\n }\r\n\r\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\r\n const images = await validateProductImages(\r\n this.props.data.mediaLocations.result,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\r\n );\r\n this._setImages(images);\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: ILobasMediaGalleryProps, nextState: IMediaGalleryState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n if (this.state.show3D) {\r\n this.setState({ show3D: false });\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { id, config, resources } = this.props;\r\n\r\n const { className, showPaginationTooltip } = config;\r\n\r\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\r\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\r\n const zoomViewMode: string =\r\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\r\n const source = this.props.config.imageSource ?? imageSource.pageContext;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\r\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\r\n if (this.props.data.product.result) {\r\n this.fallbackImage = getFallbackImageUrl(this.props.data.product.result.ItemId, this.props.context.request.apiSettings);\r\n }\r\n if (emptyPlaceHolderImage && this.fallbackImage) {\r\n this.fallbackImage = `${this.fallbackImage},${emptyPlaceHolderImage}`;\r\n }\r\n if (this.props.config.skipImageValidation && !this.state.mediaGalleryItems && this.state.isInitialLoad) {\r\n let images: IImageData[] = [];\r\n let mediaLocations: MediaLocation[] = [];\r\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\r\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\r\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\r\n mediaLocations = this.props.data.mediaLocations.result;\r\n }\r\n images = mediaLocations.map(mediaLocation => {\r\n return {\r\n src: mediaLocation.Uri ?? '',\r\n altText: mediaLocation.AltText ?? ''\r\n };\r\n });\r\n const curatedImages = this.props.config.images ?? [];\r\n this.mediaGalleryImages = [...this._filterMasterImageFromVariant(images), ...curatedImages];\r\n }\r\n //debugger;\r\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\r\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\r\n const viewProps: IMediaGalleryViewProps = {\r\n ...(this.props as ILobasMediaGalleryProps),\r\n state: this.state,\r\n MediaGallery: {\r\n moduleProps: this.props,\r\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\r\n },\r\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\r\n callbackToggle: this.openModalDialog,\r\n callbackThumbnailClick: this._generateOnThumbnailClick,\r\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\r\n CarouselProps: {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items: mediaGalleryCarouselItems.items,\r\n activeIndex: this.state.activeIndex,\r\n next: this.next,\r\n previous: this.previous,\r\n interval: false,\r\n directionTextPrev: resources.previousScreenshotFlipperText,\r\n directionTextNext: resources.nextScreenshotFlipperText,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n showPaginationTooltip: showPaginationTooltip === true,\r\n indicatorAriaText: resources.ariaLabelForSlide,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting,\r\n key: mediaGalleryCarouselItems.keys\r\n } as IComponentNodeProps,\r\n Thumbnails: {\r\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\r\n SingleSlideCarouselComponentProps: {\r\n tag: SingleSlideCarousel,\r\n className: 'ms-media-gallery__thumbnails',\r\n vertical: isVertical,\r\n flipperPrevLabel: resources.previousScreenshotFlipperText,\r\n flipperNextLabel: resources.nextScreenshotFlipperText,\r\n parentId: id,\r\n useTabList: true,\r\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\r\n } as IComponentNodeProps,\r\n items: mediaGalleryThumbnailCarouselItems.items\r\n },\r\n Props3dViewer: this.props.data.product.result && this.props.data.product.result.ItemId && (\r\n \r\n )\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public clickView3D(): void {\r\n if (this.state.show3D) {\r\n this.setState({ show3D: false });\r\n } else {\r\n AddScript(this.props.config.threeDViewerScriptURL ?? '');\r\n this.setState({ show3D: true });\r\n }\r\n }\r\n\r\n /**\r\n * Zoomed out image on previous/next click.\r\n */\r\n public updateZoomedInImage(): void {\r\n this.setState({ isImageZoomed: false });\r\n }\r\n\r\n private readonly onExiting = () => {\r\n this.setState({ animating: true });\r\n };\r\n\r\n private readonly onExited = () => {\r\n this.setState({ animating: false });\r\n };\r\n\r\n /**\r\n * On click next in carousel.\r\n */\r\n private readonly next = (): void => {\r\n removeInlineZoomStyle();\r\n if (this.isLastItem() === undefined) {\r\n return;\r\n }\r\n\r\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\r\n this.goToIndex(nextIndex);\r\n\r\n this.updateZoomedInImage();\r\n };\r\n\r\n /**\r\n * On click previous in carousel.\r\n */\r\n private readonly previous = (): void => {\r\n removeInlineZoomStyle();\r\n const images = this.state.mediaGalleryItems;\r\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\r\n this.goToIndex(nextIndex);\r\n this.updateZoomedInImage();\r\n };\r\n\r\n private readonly goToIndex = (index: number): void => {\r\n this.setState({ activeIndex: index });\r\n };\r\n\r\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\r\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\r\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\r\n\r\n if (thumbnailImageSettings) {\r\n if (thumbnailImageSettings.viewports.lg) {\r\n thumbnailImageSettings.viewports.lg.q = thumbnailImageSettings.viewports.lg.q?.replace('jpg', 'png');\r\n }\r\n if (thumbnailImageSettings.viewports.md) {\r\n thumbnailImageSettings.viewports.md.q = thumbnailImageSettings.viewports.md.q?.replace('jpg', 'png');\r\n }\r\n if (thumbnailImageSettings.viewports.sm) {\r\n thumbnailImageSettings.viewports.sm.q = thumbnailImageSettings.viewports.sm.q?.replace('jpg', 'png');\r\n }\r\n if (thumbnailImageSettings.viewports.xl) {\r\n thumbnailImageSettings.viewports.xl.q = thumbnailImageSettings.viewports.xl.q?.replace('jpg', 'png');\r\n }\r\n if (thumbnailImageSettings.viewports.xs) {\r\n thumbnailImageSettings.viewports.xs.q = thumbnailImageSettings.viewports.xs.q?.replace('jpg', 'png');\r\n }\r\n }\r\n\r\n if (thumbnailImageSettings) {\r\n thumbnailImageSettings.cropFocalRegion = true;\r\n }\r\n\r\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\r\n\r\n if (!hasMediaGalleryItems) {\r\n if (this.state.lastUpdate) {\r\n const defaultKey = 0;\r\n return {\r\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\r\n keys: ['empty']\r\n };\r\n }\r\n return { items: [], keys: [] };\r\n }\r\n\r\n return {\r\n items: [\r\n ...mediaGalleryItems.map((item: IImageData, index: number) =>\r\n this._getThumbnailItem(\r\n item,\r\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n index,\r\n this.state.activeIndex\r\n )\r\n )\r\n ],\r\n keys: [...mediaGalleryItems.map(item => item.src)]\r\n };\r\n }\r\n\r\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\r\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\r\n const galleryImageSettings = this.props.config.galleryImageSettings;\r\n\r\n if (galleryImageSettings) {\r\n if (galleryImageSettings.viewports.lg) {\r\n galleryImageSettings.viewports.lg.q = galleryImageSettings.viewports.lg.q?.replace('jpg', 'png');\r\n }\r\n if (galleryImageSettings.viewports.md) {\r\n galleryImageSettings.viewports.md.q = galleryImageSettings.viewports.md.q?.replace('jpg', 'png');\r\n }\r\n if (galleryImageSettings.viewports.sm) {\r\n galleryImageSettings.viewports.sm.q = galleryImageSettings.viewports.sm.q?.replace('jpg', 'png');\r\n }\r\n if (galleryImageSettings.viewports.xl) {\r\n galleryImageSettings.viewports.xl.q = galleryImageSettings.viewports.xl.q?.replace('jpg', 'png');\r\n }\r\n if (galleryImageSettings.viewports.xs) {\r\n galleryImageSettings.viewports.xs.q = galleryImageSettings.viewports.xs.q?.replace('jpg', 'png');\r\n }\r\n }\r\n\r\n if (galleryImageSettings) {\r\n galleryImageSettings.cropFocalRegion = true;\r\n }\r\n\r\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\r\n\r\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\r\n\r\n if (!hasMediaGalleryItems) {\r\n if (this.state.lastUpdate) {\r\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\r\n }\r\n return { items: [], keys: [] };\r\n }\r\n\r\n return {\r\n items: [\r\n ...mediaGalleryItems.map((item: IImageData, index: number) =>\r\n this._renderCarouselItemImageView(zoomView, item, galleryImageSettings ?? this.defaultGalleryImageSettings, index)\r\n )\r\n ],\r\n keys: [...mediaGalleryItems.map(item => item.src)]\r\n };\r\n }\r\n\r\n private _setImages(images?: IImageData[]): void {\r\n const curatedImage = this.props.config.images ?? [];\r\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\r\n\r\n let imagesToSet = images ?? [];\r\n if (shouldHidePrimaryImages) {\r\n // Currently returned image response is having duplicate image\r\n // along with non-selected variant and previous selection is not getting cleared. With the help of index we\r\n // select item from 0 index till it is having non repeating image source name ending with index number.\r\n // Here we are keeping '.' to make sure that we are considering any digit just before '.' in image source path\r\n imagesToSet = imagesToSet.filter((item, index) => {\r\n let incrementedIndex = index;\r\n const imageIndex = `${++incrementedIndex}.`;\r\n return item.src?.includes(imageIndex);\r\n });\r\n }\r\n this.setState({\r\n mediaGalleryItems: [...imagesToSet, ...curatedImage],\r\n activeIndex: 0,\r\n lastUpdate: Date.now(),\r\n shouldUseOptimizedImage: false\r\n });\r\n }\r\n\r\n private _setRenderType(): void {\r\n this.setState({\r\n isInitialLoad: false\r\n });\r\n }\r\n\r\n private _renderCarouselItemImageView(\r\n zoomView: string,\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n isInPopup: boolean = false\r\n ): React.ReactNode {\r\n /*if (this.isMobile()) {\r\n if (isInPopup) {\r\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\r\n }*/\r\n\r\n switch (zoomView) {\r\n case 'container': {\r\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n case 'inline': {\r\n return this._renderImageInlineOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n case 'fullscreen': {\r\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\r\n }\r\n\r\n // No default\r\n }\r\n return <>{this._getCarouselItem(image, imageSettings, index, isInPopup)};\r\n }\r\n\r\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\r\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\r\n let variantImages = images ?? [];\r\n\r\n const isVariantProduct =\r\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\r\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\r\n const itemId = this.props.data.product.result?.ItemId;\r\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\r\n // Currently returned image response is having duplicate image\r\n // along with non-selected variant and previous selection is not getting cleared. With the help of index we\r\n // select item from 0 index till it is having non repeating image source name ending with index number.\r\n // Here we are keeping '.' to make sure that we are considering any digit just before '.' in image source path\r\n variantImages = variantImages.filter(item => {\r\n const imagePattern = `${itemId}_000`;\r\n return !item.src?.includes(imagePattern);\r\n });\r\n if (!ArrayExtensions.hasElements(variantImages)) {\r\n variantImages = images ?? [];\r\n }\r\n }\r\n return variantImages;\r\n }\r\n\r\n private readonly _getCarouselItem = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n isInPopup: boolean = false\r\n ): React.ReactNode => {\r\n if (this.state.show3D) {\r\n const itemId = image.src\r\n ? image.src.replace(image.src.substring(0, image.src.indexOf('/Products%2F') + 12), '').substring(0, 6)\r\n : '';\r\n return
https://lob.as/3d/{itemId}.zip
;\r\n } else {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n private readonly _getThumbnailItem = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n modifiedActiveIndex: number\r\n ): IMediaGalleryThumbnailItemViewProps => {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: index,\r\n 'aria-label': image.altText,\r\n 'aria-selected': modifiedActiveIndex === index,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n };\r\n\r\n /**\r\n * Ref Handler.\r\n * @param index -Remove item click function.\r\n * @returns Set inline zoom.\r\n */\r\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\r\n this._inlineZoomDivRef.set(index, divRef);\r\n };\r\n\r\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\r\n return (event: React.KeyboardEvent) => {\r\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n }\r\n };\r\n };\r\n\r\n private readonly _generateOnThumbnailClick = (index: number) => {\r\n return (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n };\r\n };\r\n\r\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n if (this.state.show3D) {\r\n const itemId = image.src\r\n ? image.src.replace(image.src.substring(0, image.src.indexOf('/Products%2F') + 12), '').substring(0, 6)\r\n : '';\r\n return
https://lob.as/3d/{itemId}.zip
;\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n\r\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\r\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\r\n }\r\n\r\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\r\n const target = event.currentTarget;\r\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\r\n if (!this.state.isMobileImageZoomed) {\r\n const bounds = target.getBoundingClientRect();\r\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\r\n\r\n const positionX = event.clientX - bounds.left;\r\n const positionY = event.clientY - bounds.top;\r\n const scaledPositionX = positionX * dataScale;\r\n const scaledPositionY = positionY * dataScale;\r\n\r\n target.style.transform = `scale(${dataScale})`;\r\n target.classList.add(mobileZoomedInImageClassName);\r\n target.parentElement!.style.overflow = 'auto';\r\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\r\n this.setState({\r\n isMobileImageZoomed: true\r\n });\r\n } else {\r\n target.style.transform = '';\r\n target.classList.remove(mobileZoomedInImageClassName);\r\n target.parentElement!.style.overflow = '';\r\n this.setState({\r\n isMobileImageZoomed: false\r\n });\r\n }\r\n }\r\n\r\n private _onInlineImageClick(event: React.MouseEvent): void {\r\n if (window.innerWidth <= 768) {\r\n // $msv-breakpoint-m\r\n this._handleMobileViewZoomedImageClick(event);\r\n return;\r\n }\r\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\r\n this.setState({\r\n isImageZoomed: true\r\n });\r\n }\r\n\r\n private _onImageMouseOut(event: React.MouseEvent): void {\r\n inlineZoomImageOnMouseOut(event);\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n\r\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\r\n if (window.innerWidth <= 768) {\r\n // $msv-breakpoint-m\r\n this._handleMobileViewZoomedImageClick(event);\r\n return;\r\n }\r\n\r\n onContainerZoomInit(event);\r\n\r\n this.setState({\r\n isImageZoomed: true\r\n });\r\n }\r\n\r\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\r\n onMouseOutLensContainer(event);\r\n\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n\r\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n if (this.state.show3D) {\r\n const itemId = image.src\r\n ? image.src.replace(image.src.substring(0, image.src.indexOf('/Products%2F') + 12), '').substring(0, 6)\r\n : '';\r\n return
https://lob.as/3d/{itemId}.zip
;\r\n } else {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n if (this.state.show3D) {\r\n const itemId = image.src\r\n ? image.src.replace(image.src.substring(0, image.src.indexOf('/Products%2F') + 12), '').substring(0, 6)\r\n : '';\r\n return (\r\n
\r\n https://lob.as/3d/{itemId}.zip\r\n
\r\n );\r\n } else {\r\n return (\r\n
\r\n \r\n
\r\n {/* */}\r\n {\r\n \r\n }\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n private _mapProductToImageData(product: SimpleProduct): IImageData {\r\n return {\r\n src: product.PrimaryImageUrl ?? ''\r\n };\r\n }\r\n\r\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _getEmptyThumbnailItem(\r\n imageSettings: IImageSettings | undefined,\r\n index: number,\r\n modifiedActiveIndex: number\r\n ): IMediaGalleryThumbnailItemViewProps {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 'empty',\r\n 'aria-label': '',\r\n 'aria-selected': modifiedActiveIndex === index,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n }\r\n\r\n private readonly isFirstItem = () => this.state.activeIndex === 0;\r\n\r\n private readonly isLastItem = () => {\r\n const images = this.state.mediaGalleryItems;\r\n return images && this.state.activeIndex === images.length - 1;\r\n };\r\n\r\n private readonly openModalDialog = (): void => {\r\n this._toggleModal();\r\n };\r\n\r\n private _toggleModal(): void {\r\n if (this.state.modalIsOpen) {\r\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\r\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\r\n const image = parentDiv.children[1].querySelector('img');\r\n if (image) {\r\n image.removeAttribute('style');\r\n }\r\n }\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n this.setState({\r\n isImageZoomed: false,\r\n modalIsOpen: !this.state.modalIsOpen\r\n });\r\n removeInlineZoomStyle();\r\n removeContainerZoomStyle();\r\n }\r\n\r\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\r\n const {\r\n data: {\r\n product: { result: product }\r\n },\r\n resources\r\n } = this.props;\r\n let mediaGalleryItems = this.state.mediaGalleryItems;\r\n\r\n if (!mediaGalleryItems && product) {\r\n mediaGalleryItems = [this._mapProductToImageData(product)];\r\n }\r\n const carouselprops = {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items:\r\n mediaGalleryItems &&\r\n mediaGalleryItems.map((item: IImageData, index: number) =>\r\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\r\n ),\r\n activeIndex: this.state.activeIndex,\r\n next: this.next,\r\n previous: this.previous,\r\n interval: false,\r\n directionTextPrev: resources.previousScreenshotFlipperText,\r\n directionTextNext: resources.nextScreenshotFlipperText,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n showPaginationTooltip: true,\r\n hideIndicator: false,\r\n keyboard: false,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting,\r\n isDisabledFunctionality: this.state.isMobileImageZoomed\r\n } as IComponentNodeProps;\r\n\r\n const carousel = ;\r\n\r\n const imageModalSliderProps: IModalViewProps = {\r\n modalIsOpen: this.state.modalIsOpen,\r\n ontoggle: this._toggleModal,\r\n galleryCarousel: carousel,\r\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\r\n };\r\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\r\n };\r\n}\r\n\r\nexport default MediaGallery;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IMediaGalleryViewProps } from './lobas-media-gallery';\r\n\r\nconst MediaGalleryView: React.FC = props => {\r\n const { CarouselProps, MediaGallery, Modal, Props3dViewer } = props;\r\n\r\n return (\r\n \r\n \r\n {Modal}\r\n {Props3dViewer}\r\n \r\n );\r\n};\r\n\r\nexport default MediaGalleryView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['lobas-media-gallery'] = {\n c: () => require('partner/modules/lobas-media-gallery/lobas-media-gallery.tsx'),\n $type: 'contentModule',\n da: [{name:'mediaLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id', runOn: 0},{name:'mediaLocationsForSelectedVariant', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant', runOn: 0},{name:'product', path:'actions/get-selected-variant', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'lobas-media-gallery',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/lobas-media-gallery'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-selected-variant';\n let dataAction = require('partner/actions/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|lobas-media-gallery|lobas-media-gallery'] = {\n c: () => require('partner/modules/lobas-media-gallery/lobas-media-gallery.view.tsx'),\n cn: '__local__-__local__-lobas-media-gallery'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["SelectedVariantInput","constructor","productId","channelId","matchingDimensionValues","bypassCache","requestContext","getCacheKey","getCacheObjectType","dataCacheType","this","catalogId","getCatalogId","getSelectedVariantActionDataAction","createObservableDataAction","id","action","async","input","context","_input$matchingDimens","_input$catalogId2","getDimensionValuesFromQuery","url","requestUrl","product","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","_objectSpread","hasUnmatchedDimension","checkIfHasUnmatchedDimensions","Dimensions","map","dimension","matchedTargetDimension","find","targetDimension","DimensionTypeValue","DimensionValue","newImageUrl","generateProductImageUrl","apiSettings","PrimaryImageUrl","fullDimensions","_product$Dimensions","fullDimensionPromises","shippingInventoryConfiguration","createInventoryAvailabilitySearchCriteria","undefined","searchCriteria","RequestedDimensionTypeValue","MatchingDimensionValues","DefaultWarehouseOnly","FilterByChannelFulfillmentGroup","DeliveryModeTypeFilterValue","CatalogId","lOBGetDimensionValuesWithEstimatedAvailabilitiesAsync","MasterProductId","RecordId","then","dimensionValues","dimensionValuesWithInventory","Promise","all","getFullDimensions","productVariant","ArrayExtensions","ProductIds","_input$catalogId","variantProductId","variantImageUrl","getProductVariant","matchedTargetDimensionFromApi","selectedProduct","inputData","getSelectedProductIdFromActionInput","Error","imageSource","imageZoom","thumbnailsOrientation","getValidProductImages","actionContext","imageSettings","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","mediaLocations","mediaLocation","validateMediaLocaionAsync","pairs","filter","pair","catch","error","telemetry","exception","debug","validateProductImages","imageData","src","Uri","altText","AltText","resolve","http","XMLHttpRequest","open","addEventListener","status","send","_unused","LobasGlbViewer","React","props","super","state","show","modal","componentDidMount","fetch","itemId","res","console","log","setState","render","className","Button","classnames","title","label","onClick","AddScript","urlOfTheLibrary","scripts","document","getElementsByTagName","i","length","includes","DoesScriptExist","body","removeChild","RemoveScript","window","script","createElement","appendChild","MediaGallery","_this","_ref","_props$config$zoomedI","_inlineZoomDivRef","Map","mediaGalleryImages","defaultGalleryImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","disableLazyLoad","cropFocalRegion","defaultThumbnailImageSettings","onExiting","animating","onExited","next","removeInlineZoomStyle","isLastItem","nextIndex","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","index","_getCarouselItem","image","isInPopup","arguments","show3D","replace","substring","indexOf","Image","Object","assign","gridSettings","request","loadFailureBehavior","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","tag","role","tabIndex","key","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","fallBackSrc","fallbackImage","imageFallbackOptimize","shouldUseOptimizedImage","_refHandler","divRef","set","event","which","KeyCodes","preventDefault","openModalDialog","_toggleModal","imageModalSlider","ZoomView","data","result","resources","_mapProductToImageData","carouselprops","Carousel","items","item","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","classNames","ImagefullView","bind","isImageZoomed","isInitialLoad","config","skipImageValidation","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","clickView3D","isMobile","variant","VariantType","_this$props$config$im","source","pageContext","shouldUpdateOnPartialDimensionSelection","_setRenderType","mediaLocationsForSelectedVariant","_this$props$config$th","thumbnailImageSettings","_setImages","reaction","_product$productVaria","ObjectExtensions","_this$props$config$th2","_this$props$config$th3","shouldComponentUpdate","nextProps","nextState","_this$props$config$im2","_this$props$context$a","isVertical","vertical","isFullscreenAllowed","allowFullScreen","zoomViewMode","inline","container","emptyPlaceHolderImage","app","placeholderImageName","getFallbackImageUrl","ItemId","_this$props$config$im3","_mediaLocation$Uri","_mediaLocation$AltTex","curatedImages","_filterMasterImageFromVariant","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","moduleProps","Modal","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","keys","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","Props3dViewer","closeGlbViewerBtnLabel","glbViewerBtnLabel","renderView","_this$props$config$th4","threeDViewerScriptURL","_this$state$mediaGall","_thumbnailImageSettin","_thumbnailImageSettin2","_thumbnailImageSettin3","_thumbnailImageSettin4","_thumbnailImageSettin5","xl","lastUpdate","defaultKey","_getEmptyThumbnailItem","_this$state$mediaGall2","_galleryImageSettings","_galleryImageSettings2","_galleryImageSettings3","_galleryImageSettings4","_galleryImageSettings5","zoomView","_renderEmptyImage","_this$props$config$im4","_this$props$config$sh","curatedImage","imagesToSet","shouldHideMasterProductImagesForVariant","_item$src","incrementedIndex","imageIndex","Date","now","_renderImageInContainerOnZoom","_renderImageInlineOnZoom","_renderImageFullScreenOnZoom","_this$props$config$sh2","_this$props$data$prod","_this$props$data$prod2","_this$props$data$prod3","shouldHidePrimaryImages","variantImages","isVariantProduct","_item$src2","imagePattern","_this$props$config$da","ref","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","target","currentTarget","mobileZoomedInImageClassName","style","transform","classList","remove","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","Number","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","fullScreenTitleText","_product$PrimaryImage","parentDiv","get","children","querySelector","removeAttribute","removeContainerZoomStyle","Module","Node","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}