{"version":3,"file":"static/js/2850b956ccd6fe386acc.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/rwb-adventureworks/views/media-gallery.view.tsx?3230","webpack://Msdyn365.Commerce.Online/./lib/media-gallery/module-registration.js?47e5","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","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/adventureworks/views/media-gallery.view.tsx?7624","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport {\n IMediaGalleryThumbnailItemViewProps,\n IMediaGalleryThumbnailsViewProps,\n IMediaGalleryViewProps\n} from '@msdyn365-commerce-modules/media-gallery';\nimport { 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';\n\n/**\n * Render the thumbnail item images.\n * @param thumbnail - The carousel thumbnail line props.\n * @returns Return HTML having thumnailcontainer props with image.\n */\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\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): 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(props.data.product.result.ItemId, props.context.request.apiSettings);\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: 'presentation',\n key: imageId\n },\n Picture: (\n \n \n \n \n \n \n )\n };\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 if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(props.data.product.result.ItemId, props.context.request.apiSettings);\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: 'ms-media-gallery__thumbnail-item',\n role: 'tab',\n tabIndex: 0,\n key: 0,\n 'aria-label': '',\n 'aria-selected': true\n },\n Picture: (\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?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\n return items?.map(item => {\n return {\n altText: item.Picture.props.altText,\n src: item.Picture.props.src\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, Thumbnails } = props;\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\n\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\n state.lastUpdate && 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: IImageData, id: number) =>\n GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props)\n );\n\n return (\n \n {items?.map(renderThumbnailItem)}\n \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 = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n return (\n \n \n {Modal}\n {renderThumbnails(Thumbnails, props)}\n \n );\n};\n\nexport default mediaGalleryView;\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['media-gallery'] = {\n c: () => require('@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery'),\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:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'media-gallery',\n p: 'media-gallery',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/media-gallery/dist/lib/modules/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 = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/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__|themes|rwb-adventureworks|views|media-gallery'] = {\n c: () => require('partner/themes/rwb-adventureworks/views/media-gallery.view.tsx'),\n cn: '__local__-__local__-media-gallery'\n };\nviewDictionary['@msdyn365-commerce-modules|media-gallery|modules|media-gallery|media-gallery'] = {\n c: () => require('@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery.view.js'),\n cn: '@msdyn365-commerce-modules-media-gallery-media-gallery'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|media-gallery'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/media-gallery.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-media-gallery'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCatalogId, IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\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\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 * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel, ICarouselProps } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { MediaLocation, 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 { getValidProductImages, validateProductImages } from './utils';\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?: IImageData[];\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\n private mediaGalleryImages: IImageData[] = [];\n\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 this.state = {\n activeIndex: 0,\n animating: false,\n isImageZoomed: false,\n modalIsOpen: false,\n isInitialLoad: true,\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation\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 (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 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 this._setImages(images);\n } else {\n this._setImages([]);\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || ObjectExtensions.isNullOrUndefined(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 if (product) {\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 shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n this._setImages(images);\n } else {\n this._setImages([]);\n }\n }\n );\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 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 const source = this.props.config.imageSource ?? imageSource.pageContext;\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(this.props.data.product.result.ItemId, this.props.context.request.apiSettings);\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage},${emptyPlaceHolderImage}`;\n }\n if (this.props.config.skipImageValidation && !this.state.mediaGalleryItems && this.state.isInitialLoad) {\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: mediaLocation.AltText ?? ''\n };\n });\n const curatedImages = this.props.config.images ?? [];\n this.mediaGalleryImages = [...this._filterMasterImageFromVariant(images), ...curatedImages];\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 this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\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: IImageData, index: number) =>\n this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\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 _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\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: IImageData, index: number) =>\n this._renderCarouselItemImageView(zoomView, item, galleryImageSettings ?? this.defaultGalleryImageSettings, index)\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 _setImages(images?: IImageData[]): void {\n const curatedImage = this.props.config.images || [];\n const imagesToSet = this._filterMasterImageFromVariant(images);\n\n this.setState({\n mediaGalleryItems: [...imagesToSet, ...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 image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(image, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(image, imageSettings, index, isInPopup)}>;\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 _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 * 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 private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\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\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, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport {\n IMediaGalleryThumbnailItemViewProps,\n IMediaGalleryThumbnailsViewProps,\n IMediaGalleryViewProps\n} from '@msdyn365-commerce-modules/media-gallery';\nimport { 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';\n\n/**\n * Render the thumbnail item images.\n * @param thumbnail - The carousel thumbnail line props.\n * @returns Return HTML having thumnailcontainer props with image.\n */\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\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): 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(props.data.product.result.ItemId, props.context.request.apiSettings);\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: 'presentation',\n key: imageId\n },\n Picture: (\n \n \n \n \n \n \n )\n };\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 if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(props.data.product.result.ItemId, props.context.request.apiSettings);\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: 'ms-media-gallery__thumbnail-item',\n role: 'tab',\n tabIndex: 0,\n key: 0,\n 'aria-label': '',\n 'aria-selected': true\n },\n Picture: (\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?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\n return items?.map(item => {\n return {\n altText: item.Picture.props.altText,\n src: item.Picture.props.src\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, Thumbnails } = props;\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\n\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\n state.lastUpdate && 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: IImageData, id: number) =>\n GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props)\n );\n\n return (\n \n {items?.map(renderThumbnailItem)}\n \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 = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n return (\n \n \n {Modal}\n {renderThumbnails(Thumbnails, props)}\n \n );\n};\n\nexport default mediaGalleryView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["renderThumbnailItem","thumbnail","ThumbnailItemContainerProps","Picture","React","Node","Object","assign","GetEmptyThumbnailItemComponent","imageSettings","props","_props$context$app$co2","_props$config$thumbna2","fallbackImage","emptyPlaceHolderImage","context","app","config","placeholderImageName","data","product","result","getFallbackImageUrl","ItemId","request","apiSettings","tag","className","role","tabIndex","key","Image","requestContext","actionContext","src","gridSettings","thumbnailImageSettings","loadFailureBehavior","imageFallbackOptimize","skipImageValidation","fallBackSrc","defaultThumbnailImageSettings","viewports","xs","q","w","h","xl","lazyload","cropFocalRegion","renderThumbnails","thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","state","Thumbnails","mediaGalleryItems","items","map","item","altText","getMediaGalleryItems","lastUpdate","id","GetThumbnailItemComponent","image","imageId","modifiedActiveIndex","_props$context$app$co","_props$config$thumbna","onClick","_props$callbackToggle","_props$callbackThumbn","callbackToggle","call","callbackThumbnailClick","activeIndex","handleKeyDown","event","keyCode","KeyCodes","Enter","preventDefault","classnames","Button","onKeyDown","shouldUseOptimizedImage","bypassHideOnFailure","title","resources","fullScreenTitleText","CarouselProps","MediaGallery","Modal","Module","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","viewDictionary","cn","async","validateMediaLocationAsync","mediaLocation","imageData","Uri","AltText","IsApplicableForChildEntities","additionalProperties","isApplicableForChildEntities","Promise","resolve","http","XMLHttpRequest","open","addEventListener","status","send","_unused","getValidProductImages","productId","channelId","selectedProduct","catalogId","getCatalogId","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","then","mediaLocations","all","pairs","filter","pair","catch","error","telemetry","exception","debug","validateProductImages","constructor","_this","_ref","_props$config$zoomedI","super","this","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","mediaGalleryImages","defaultGalleryImageSettings","sm","lg","onExiting","setState","animating","onExited","next","removeInlineZoomStyle","undefined","isLastItem","nextIndex","goToIndex","updateZoomedInImage","previous","images","isFirstItem","length","index","_getCarouselItem","isInPopup","arguments","shouldSkipToMainImage","_getThumbnailItem","_generateOnThumbnailClick","_generateOnThumbnailKeyDown","_refHandler","divRef","set","which","Space","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","classNames","ImagefullView","bind","isImageZoomed","isInitialLoad","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","isMobile","variant","VariantType","Viewport","_this$props$config$im","source","imageSource","shouldUpdateOnPartialDimensionSelection","_setRenderType","mediaLocationsForSelectedVariant","_this$props$config$th","_setImages","_this$props$config$th2","RecordId","productVariant","reaction","_product$productVaria","ObjectExtensions","isNullOrUndefined","_this$props$config$th3","_this$props$config$th4","shouldComponentUpdate","nextProps","nextState","render","_this$props$config$im2","_this$props$context$a","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","_this$props$config$im3","_mediaLocation$Uri","_mediaLocation$AltTex","curatedImages","_filterMasterImageFromVariant","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","moduleProps","callbackThumbnailKeyDown","indicatorAriaText","ariaLabelForSlide","keys","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","renderView","_this$state$mediaGall","ArrayExtensions","hasElements","defaultKey","_getEmptyThumbnailItem","_this$state$mediaGall2","zoomView","_renderEmptyImage","curatedImage","imagesToSet","Date","now","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod","_this$props$data$prod2","_this$props$data$prod3","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","MasterProductId","itemId","_item$additionalPrope","_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","href","_product$PrimaryImage","PrimaryImageUrl","_this$fullScreenOverl","current","focus","parentDiv","get","children","querySelector","removeAttribute","removeContainerZoomStyle","_renderThumbnails","_renderThumbnailItem","module","exports","ReactDOM"],"sourceRoot":""}