{"version":3,"file":"static/js/210cdb82e93a0ee61410.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/evet_b2b_theme/views/media-gallery.view.tsx?de9a","webpack://Msdyn365.Commerce.Online/./lib/media-gallery/module-registration.js?47e5","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/helper.ts?b895","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://Msdyn365.Commerce.Online/./src/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":["/*!\r\n * Copyright (c) HSO.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Module, Node, NodeTag, Button, IComponentNodeProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport classnames from 'classnames';\r\nimport { ICarouselProps } from '@msdyn365-commerce/components';\r\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps, IMediaGalleryState } from '@msdyn365-commerce-modules/media-gallery';\r\nimport { IMediaGalleryProps } from '../definition-extensions/media-gallery.ext.props.autogenerated';\r\nimport { IMediaGalleryData } from './media-gallery.data';\r\nimport { StringExtensions, ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {XMLParser} from 'fast-xml-parser';\r\n\r\nconst MediaGalleryView: React.FC> = props => {\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal, state } = props;\r\n\r\n const {\r\n data: {\r\n productAttributes: { result: productAttributes }\r\n }\r\n } = props;\r\n const videoURLAttributes: string = productAttributes &&\r\n ArrayExtensions.firstOrDefault(productAttributes?.filter(att => {\r\n return att.Name?.trim()?.toUpperCase()?.includes('VIDEO'.trim().toUpperCase());\r\n }))?.TextValue || '';\r\n\r\n let videoURLs: string[] = [];\r\n if (!StringExtensions.isNullOrEmpty(videoURLAttributes) && !StringExtensions.isNullOrWhitespace(videoURLAttributes)) {\r\n try {\r\n const parser = new XMLParser();\r\n let jObj = parser.parse(videoURLAttributes);\r\n let urlArray = jObj.Url;\r\n for(let url of urlArray){\r\n videoURLs.push(url);\r\n console.log(url);\r\n }\r\n\r\n } catch (error) {\r\n videoURLs = [props?.config?.defaultVideoURL || ''];\r\n }\r\n } else if (!StringExtensions.isNullOrEmpty(props?.config?.defaultVideoURL) && !StringExtensions.isNullOrWhitespace(props?.config?.defaultVideoURL)) {\r\n videoURLs = [props?.config?.defaultVideoURL || ''];\r\n } else {\r\n videoURLs = [];\r\n }\r\n\r\n debugger;\r\n if (videoURLs && ArrayExtensions.hasElements(videoURLs)) {\r\n let counter = 0;\r\n videoURLs.forEach((videoURL) => {\r\n (CarouselProps as IComponentNodeProps)?.items?.push(_getVideoCarouselItem(props, videoURL, Thumbnails.items?.length || 0));\r\n (CarouselProps as IComponentNodeProps)?.keys?.push(counter.toString());\r\n counter = counter + 1;\r\n });\r\n }\r\n\r\n return (\r\n \r\n \r\n {Modal}\r\n {_renderThumbnails(props, state, Thumbnails, videoURLs)}\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnails = (props: IMediaGalleryViewProps & IMediaGalleryProps, state: IMediaGalleryState, thumbnails: IMediaGalleryThumbnailsViewProps, videoURLs: string[]): JSX.Element => {\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\r\n\r\n if (videoURLs && ArrayExtensions.hasElements(videoURLs)) {\r\n videoURLs.forEach((videoURL, index, videoURLs) => {\r\n items?.push(_getVideoThumbnailItem(props, state, items.length, videoURL, index));\r\n });\r\n }\r\n\r\n return (\r\n \r\n {items && items.map(_renderThumbnailItem)}\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return {Picture};\r\n};\r\n\r\nconst _getVideoCarouselItem = (props: IMediaGalleryViewProps & IMediaGalleryProps, videoURL: string, index: number): React.ReactNode => {\r\n const size = _getVideoPlayerWidth(props);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst _getVideoThumbnailItem = (props: IMediaGalleryViewProps & IMediaGalleryProps, state: IMediaGalleryState, index: number, videoUrl: string, position: number): IMediaGalleryThumbnailItemViewProps => {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n state.activeIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n const currPosition = position + 1;\r\n let thumbnailImageString = \"Products/\"+props.data.product.result?.RecordId.toString()+'_V_'+currPosition+'.'+props.config.customVideoThumbnailsExtension;\r\n const thumbnailUrl = generateImageUrl(thumbnailImageString, props.context.actionContext.requestContext.apiSettings);\r\n\r\n if (props.config.useCustomVideoThumbnails) {\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'custom-image-thumbnail-video',\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: index,\r\n onClick: props && props.callbackThumbnailClick && props.callbackThumbnailClick(index),\r\n onKeyDown: props && props.callbackThumbnailKeyDown && props.callbackThumbnailKeyDown(index),\r\n },\r\n Picture: (\r\n text\r\n )\r\n };\r\n } else {\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 onClick: props && props.callbackThumbnailClick && props.callbackThumbnailClick(index),\r\n onKeyDown: props && props.callbackThumbnailKeyDown && props.callbackThumbnailKeyDown(index),\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n }\r\n \r\n};\r\n\r\nconst _getVideoPlayerWidth = (props: IMediaGalleryViewProps & IMediaGalleryProps): { width: number; height: number } => {\r\n const size = isMobile({ variant: VariantType.Viewport, context: props.context.request });\r\n \r\n switch (size) {\r\n case 'xs':\r\n return { width: 350, height: 350 };\r\n case 'sm':\r\n return { width: 450, height: 400 };\r\n case 'md':\r\n return { width: 550, height: 450 };\r\n case 'lg':\r\n return { width: 700, height: 450 };\r\n case 'xl':\r\n default:\r\n return { width: 850, height: 450 };\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['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|evet_b2b_theme|views|media-gallery'] = {\n c: () => require('partner/themes/evet_b2b_theme/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 { IRequestContext } from '@msdyn365-commerce/core';\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param productName Product name.\n * @param context Current request context.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { commerceApiRequest, 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';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n","/*!\n * 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 { getProductImages, getValidProductImages, validateProductImages } from './utils';\nimport { getAltText } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: 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 (!this.props.context.request.app?.config?.OmniChannelMedia) {\n if (source === imageSource.pageContext) {\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocationsForSelectedVariant.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n 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 }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n this._setImages(images);\n } else {\n this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n 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(\n this.props.data.product.result.ItemId,\n this.props.context.request.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage},${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: getAltText(\n this.props.context.actionContext.requestContext,\n this.shouldUseCmsAltText(),\n this.props.data.product.result?.Name,\n mediaLocation.AltText\n )\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 );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n
\n {}\n \n
\n
\n );\n }\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n
\n \n
\n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, 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(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n /**\n * OnClick method of media gallery item.\n */\n const onClick = () => {\n props.callbackToggle?.();\n props.callbackThumbnailClick?.(imageId);\n props.state.activeIndex = imageId;\n };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n /**\n * Keydown event of media gallery item.\n * @param event - React.KeyboardEvent.\n */\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Enter) {\n event.preventDefault();\n onClick();\n }\n };\n const defaultIndex = 0;\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'presentation',\n key: imageId\n },\n Picture: (\n \n \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(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n 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":["_renderThumbnails","props","state","thumbnails","videoURLs","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","items","ArrayExtensions","hasElements","forEach","videoURL","index","push","_getVideoThumbnailItem","length","React","Node","Object","assign","map","_renderThumbnailItem","thumbnail","ThumbnailItemContainerProps","Picture","_getVideoCarouselItem","size","_getVideoPlayerWidth","className","title","width","height","src","key","allowFullScreen","videoUrl","position","_props$data$product$r","classes","classnames","activeIndex","currPosition","thumbnailImageString","data","product","result","RecordId","toString","config","customVideoThumbnailsExtension","thumbnailUrl","generateImageUrl","context","actionContext","requestContext","apiSettings","useCustomVideoThumbnails","tag","role","tabIndex","onClick","callbackThumbnailClick","onKeyDown","callbackThumbnailKeyDown","alt","Button","style","padding","margin","background","borderWidth","borderStyle","borderColor","isMobile","variant","VariantType","Viewport","request","_ArrayExtensions$firs","_props$config2","_props$config3","CarouselProps","Thumbnails","MediaGallery","Modal","productAttributes","videoURLAttributes","firstOrDefault","filter","att","_att$Name","Name","trim","toUpperCase","includes","TextValue","StringExtensions","isNullOrEmpty","isNullOrWhitespace","defaultVideoURL","_props$config4","urlArray","XMLParser","parse","Url","url","console","log","error","_props$config","counter","_CarouselProps$items","_Thumbnails$items","_CarouselProps$keys","keys","Module","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","viewDictionary","cn","getAltText","shouldUseCmsAltText","productName","imageAltText","_context$app","app","OmniChannelMedia","async","validateMediaLocationAsync","mediaLocation","imageData","Uri","altText","AltText","IsApplicableForChildEntities","additionalProperties","isApplicableForChildEntities","Promise","resolve","http","XMLHttpRequest","open","addEventListener","status","send","_unused","getValidProductImages","productId","channelId","imageSettings","selectedProduct","catalogId","getCatalogId","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","then","mediaLocations","all","pairs","pair","catch","telemetry","exception","debug","validateProductImages","constructor","_this","_ref","_props$config$zoomedI","super","this","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","mediaGalleryImages","defaultGalleryImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","cropFocalRegion","defaultThumbnailImageSettings","onExiting","setState","animating","onExited","next","removeInlineZoomStyle","undefined","isLastItem","nextIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","_getCarouselItem","image","isInPopup","arguments","Image","fallBackSrc","fallbackImage","gridSettings","loadFailureBehavior","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","_generateOnThumbnailClick","_generateOnThumbnailKeyDown","imageFallbackOptimize","shouldUseOptimizedImage","_refHandler","divRef","set","event","which","KeyCodes","Enter","Space","preventDefault","openModalDialog","_toggleModal","imageModalSlider","ZoomView","resources","_mapProductToImageData","carouselprops","Carousel","item","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","classNames","ImagefullView","altTextSource","bind","isImageZoomed","isInitialLoad","skipImageValidation","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","_this$props$config$im","_this$props$context$r","source","imageSource","shouldUpdateOnPartialDimensionSelection","_setRenderType","mediaLocationsForSelectedVariant","_this$props$config$th","thumbnailImageSettings","_setImages","_this$props$config$th2","productVariant","reaction","_product$productVaria","_this$props$context$a","_this$props$config$th3","_actionContext$reques","params","isPreview","response","commerceApiRequest","previewImageData","_mediaLocation$Uri","_mediaLocation$Uri2","getProductImages","fireImmediately","_this$props$config$th4","shouldComponentUpdate","nextProps","nextState","render","_this$props$config$im2","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","_this$props$context$r2","getFallbackImageUrl","ItemId","_this$props$config$im3","_this$props$data$prod","curatedImages","_filterMasterImageFromVariant","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","moduleProps","callbackToggle","indicatorAriaText","ariaLabelForSlide","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","renderView","_this$state$mediaGall","lastUpdate","defaultKey","_getEmptyThumbnailItem","_this$state$mediaGall2","zoomView","_renderEmptyImage","curatedImage","imagesToSet","Date","now","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","ObjectExtensions","isNullOrUndefined","MasterProductId","itemId","_item$additionalPrope","_this$props$config$da","ref","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","target","currentTarget","mobileZoomedInImageClassName","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","fullScreenTitleText","_product$PrimaryImage","PrimaryImageUrl","_this$fullScreenOverl","current","focus","parentDiv","get","children","querySelector","removeAttribute","removeContainerZoomStyle","renderThumbnailItem","GetEmptyThumbnailItemComponent","_props$context$app$co2","_props$config$thumbna2","_props$context$reques2","xl","renderThumbnails","getMediaGalleryItems","GetThumbnailItemComponent","imageId","_props$context$app$co","_props$config$thumbna","_props$context$reques","_props$callbackToggle","_props$callbackThumbn","call","handleKeyDown","keyCode","module","exports","ReactDOM"],"sourceRoot":""}