{"version":3,"file":"static/js/aef53fb5ff2ab7f3b169.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./lib/media-gallery/module-registration.js?47e5","webpack://henrys-ecommerce/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://henrys-ecommerce/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://henrys-ecommerce/./src/modules/media-gallery/utils/helper.ts?b895","webpack://henrys-ecommerce/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://henrys-ecommerce/./src/modules/adventureworks/views/media-gallery.view.tsx?7624","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["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['@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 { Carousel, ICarouselProps, Player, IPlayerData, IPlayerOptions, IVideoMetadata } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport { MediaLocation, MediaType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n defaultDataScale,\n IComponentNodeProps,\n ImagefullView,\n IModalViewProps,\n IModuleProps,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInitClick,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n KeyCodes,\n NodeTag,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IMediaGalleryData } from './media-gallery.data';\nimport { imageSource, imageZoom, IMediaGalleryProps, thumbnailsOrientation } from './media-gallery.props.autogenerated';\nimport { getProductImages, getValidProductImages, getVideoMetadataFromApi, validateProductImages } from './utils';\nimport { getAltText, IMediaData } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: IMediaData[];\n isInitialLoad?: boolean;\n shouldUseOptimizedImage?: boolean;\n}\n\n/**\n * IMediaGalleryThumbnailsViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IMediaGalleryThumbnailItemViewProps[];\n}\n\n/**\n * IMediaGalleryThumbnailItemViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * IMediaGalleryViewProps Interface.\n */\nexport interface IMediaGalleryViewProps extends IMediaGalleryProps {\n state: IMediaGalleryState;\n MediaGallery: IModuleProps;\n CarouselProps: INodeProps;\n Thumbnails: IMediaGalleryThumbnailsViewProps;\n Modal?: React.ReactElement | null;\n callbackToggle?(): void;\n callbackThumbnailClick?(index: number): void;\n callbackThumbnailKeyDown?(index: number): void;\n}\n\n/**\n * Props for carousel.\n */\ninterface IMediaGalleryCarouselItems {\n items: ItemType[];\n keys: (string | undefined)[];\n}\n\n/**\n * Media gallery component.\n */\nclass MediaGallery extends React.Component, IMediaGalleryState> {\n private readonly _inlineZoomDivRef: Map = new Map();\n\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\n private readonly player: React.RefObject = React.createRef();\n\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 await this._setImages(images);\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\n const product = this.props.data.product.result;\n const images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant\n );\n\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n }\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n }\n }\n\n public shouldComponentUpdate(nextProps: IMediaGalleryProps, nextState: IMediaGalleryState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { id, config, resources } = this.props;\n\n const { className, showPaginationTooltip } = config;\n\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\n const zoomViewMode: string =\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\n 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 const { autoplay } = this.props.config;\n const currentIndex = this.state.activeIndex;\n const mediaItems = this.state.mediaGalleryItems;\n if (autoplay && mediaItems) {\n if (mediaItems[`${index}`]?.mediaTypeValue === MediaType.Video) {\n this.player.current?.play();\n } else if (mediaItems[`${currentIndex}`].mediaTypeValue === MediaType.Video) {\n this.player.current?.pause();\n }\n }\n this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems ?? 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: IMediaData, index: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n return this.getVideoThumbNailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n } else {\n return this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n }\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private _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: IMediaData, index: number) => {\n return this._renderCarouselItemImageView(\n zoomView,\n item,\n galleryImageSettings ?? this.defaultGalleryImageSettings,\n index\n );\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private async _setImages(images?: IMediaData[]): Promise {\n const curatedImage = this.props.config.images || [];\n const mediaToSet: IMediaData[] = this._filterMasterImageFromVariant(images);\n\n void Promise.all(\n mediaToSet.map(async mediaData => {\n if (mediaData.mediaTypeValue === MediaType.Video && mediaData.src) {\n try {\n const url = new URL(mediaData.src);\n const videoId = url.searchParams.get('CVID');\n if (videoId) {\n mediaData.videoData = await getVideoMetadataFromApi(videoId, this.props.context.actionContext);\n }\n } catch (error) {\n if (this.props.telemetry) {\n this.props.telemetry.debug('Error while fetching videoId');\n }\n }\n }\n return mediaData;\n })\n ).then(mediaData => {\n const mediaItems = mediaData.filter(element => {\n return (\n element.mediaTypeValue !== MediaType.Video ||\n (element.mediaTypeValue === MediaType.Video && element.videoData !== undefined)\n );\n });\n\n this.setState({\n mediaGalleryItems: [...mediaItems, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n });\n\n this.setState({\n mediaGalleryItems: [...mediaToSet, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n }\n\n private _setRenderType(): void {\n this.setState({\n isInitialLoad: false\n });\n }\n\n private _renderCarouselItemImageView(\n zoomView: string,\n media: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (media.mediaTypeValue === MediaType.Video) {\n if (isInPopup || zoomView !== 'fullscreen') {\n return <>{this._renderCarouselItemVideo(media, index, imageSettings)};\n }\n return <>{this._renderVideoThumbnail(media, index, imageSettings)};\n } else {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(media, imageSettings, index, isInPopup)};\n }\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\n const itemId = this.props.data.product.result?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _renderCarouselItemVideo = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = this.props.config as IPlayerOptions;\n const playerResources = this.props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n const attributes = {\n id: `${this.props.id}__carousel-item__${index}`\n };\n return (\n \n );\n }\n return this._renderEmptyImage(imageSettings);\n };\n\n private readonly _getCarouselItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Gets the video thumbnail item to display media gallery.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render video.\n */\n private readonly getVideoThumbNailItem = (\n mediaData: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Ref Handler.\n * @param index -Remove item click function.\n * @returns Set inline zoom.\n */\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\n this._inlineZoomDivRef.set(index, divRef);\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n\n this.goToIndex(index);\n };\n };\n\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n \n );\n }\n\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\n }\n\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\n if (!this.state.isMobileImageZoomed) {\n const bounds = target.getBoundingClientRect();\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\n\n const positionX = event.clientX - bounds.left;\n const positionY = event.clientY - bounds.top;\n const scaledPositionX = positionX * dataScale;\n const scaledPositionY = positionY * dataScale;\n\n target.style.transform = `scale(${dataScale})`;\n target.classList.add(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = 'auto';\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\n this.setState({\n isMobileImageZoomed: true\n });\n } else {\n target.style.transform = '';\n target.classList.remove(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = '';\n this.setState({\n isMobileImageZoomed: false\n });\n }\n }\n\n private _onInlineImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onImageMouseOut(event: React.MouseEvent): void {\n inlineZoomImageOnMouseOut(event);\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n\n onContainerZoomInit(event);\n\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\n onMouseOutLensContainer(event);\n\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n \n
\n );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n
\n {}\n \n
\n
\n );\n }\n\n /**\n * Render the video thumbnail in full screen.\n * @param mediaData - Media Data.\n * @param index - Index\n * @param imageSettings - Image settings.\n * @returns - JSX.Element\n */\n private readonly _renderVideoThumbnail = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return (\n
\n \n
\n {}\n \n
\n
\n );\n };\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n
\n \n
\n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IRequestContext, IVideoData } from '@msdyn365-commerce/core';\n\nexport enum MediaType {\n /**\n * The None.\n */\n None = 0,\n /**\n * The Image type.\n */\n Image = 1,\n /**\n * The video type.\n */\n Video = 2,\n /**\n * The file type.\n */\n File = 3\n}\n\nexport interface IMediaData extends IImageData {\n mediaTypeValue?: MediaType;\n displayOrder?: number;\n videoData?: IVideoData;\n}\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param productName Product name.\n * @param context Current request context.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n commerceApiRequest,\n commerceVideoMetadataRequest,\n getCatalogId,\n IActionContext,\n IImageData,\n IImageSettings,\n IVideoData\n} from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n getMediaLocationsForSelectedVariant,\n MediaLocationsForSelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n\n/**\n * GetVideoMetadataFromAPI - Makes API call to get video metadata.\n * @param videoId: Video Id\n * @param actionContext: Action context\n * @returns: Returns the meta data of the video.\n */\nexport async function getVideoMetadataFromApi(videoId: string, actionContext: IActionContext): Promise {\n let videoPlayerData: IVideoData | undefined;\n if (videoId) {\n const response = await commerceVideoMetadataRequest(actionContext.requestContext, [videoId]);\n\n if (response.status !== 200) {\n actionContext.telemetry.debug(`Unable to get video metadata for videoId: ${videoId}`);\n return;\n }\n\n const videoData = response.data as [];\n if (videoData && ArrayExtensions.hasElements(videoData)) {\n videoPlayerData = videoData[0];\n }\n }\n return videoPlayerData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport {\n IMediaData,\n IMediaGalleryThumbnailItemViewProps,\n IMediaGalleryThumbnailsViewProps,\n IMediaGalleryViewProps,\n MediaType\n} from '@msdyn365-commerce-modules/media-gallery';\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\nimport { IPlayerData, IPlayerOptions, IVideoMetadata, Player } from '@msdyn365-commerce-modules/video-player-utilities';\n\ninterface IMediaGalleryItemsProps extends IMediaGalleryThumbnailItemViewProps {\n Video?: React.ReactElement;\n}\n\n/**\n * Render the thumbnail item images.\n * @param thumbnail - The carousel thumbnail line props.\n * @returns Return HTML having thumbnail container props with image.\n */\nconst renderThumbnailItem = (thumbnail: IMediaGalleryItemsProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailItemContainerProps, Picture, Video } = thumbnail;\n\n return {Video ? Video : 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 mediaTypeValue?: MediaType\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n /**\n * OnClick method of media gallery item.\n */\n const onClick = () => {\n props.callbackToggle?.();\n props.callbackThumbnailClick?.(imageId);\n props.state.activeIndex = imageId;\n };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n /**\n * Keydown event of media gallery item.\n * @param event - React.KeyboardEvent.\n */\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Enter) {\n event.preventDefault();\n onClick();\n }\n };\n const defaultIndex = 0;\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'presentation',\n key: imageId\n },\n Picture: (\n \n \n \n \n \n \n \n \n )\n };\n};\n\n/**\n * Render the video player.\n * @param mediaData - Media Data\n * @param index - Index of the video\n * @param activeIndex - Active Index\n * @param imageSettings - Image settings\n * @param props - Media gallery view props\n * @returns - JSX.Element.\n */\nconst RenderVideo = (\n mediaData: IMediaData,\n index: number,\n activeIndex: number,\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryItemsProps => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = props.config as IPlayerOptions;\n const playerResources = props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n index === activeIndex ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'presentation',\n key: index\n },\n Picture: <>,\n Video: (\n \n )\n };\n }\n return GetEmptyThumbnailItemComponent(imageSettings, props);\n};\n\n/**\n * Gets the empty thumbnail item to display media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render empty images.\n */\nconst GetEmptyThumbnailItemComponent = (\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: 'ms-media-gallery__thumbnail-item',\n role: '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?: IMediaData[]): IMediaData[] | undefined => {\n return items?.map(item => {\n return {\n displayOrder: item.displayOrder,\n mediaTypeValue: item.mediaTypeValue,\n altText: item.altText,\n src: item.src,\n videoData: item.videoData\n };\n });\n};\n\nconst defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Render the Media gallery thumbnails to represent images in grid view.\n * @param thumbnails - The thumbnail view props.\n * @param props - The media gallery view props.\n * @returns - The single slide carousel component to render as media gallery image.\n */\nconst renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps, props: IMediaGalleryViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\n const { state } = props;\n const mediaGalleryItems = getMediaGalleryItems(state.mediaGalleryItems);\n\n const items: IMediaGalleryItemsProps[] | undefined =\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\n state.lastUpdate && ArrayExtensions.hasElements(mediaGalleryItems) && mediaGalleryItems[0].src === 'empty'\n ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)]\n : // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\n mediaGalleryItems?.map((item: IMediaData, id: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n if (props.config.allowFullScreen) {\n const videoThumbnail = item.videoData?.thumbnail;\n if (videoThumbnail) {\n return GetThumbnailItemComponent(\n videoThumbnail,\n defaultThumbnailImageSettings,\n id,\n state.activeIndex,\n props,\n item.mediaTypeValue\n );\n } else {\n return GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props);\n }\n } else {\n return RenderVideo(item, id, state.activeIndex, defaultThumbnailImageSettings, props);\n }\n } else {\n return GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props);\n }\n });\n\n return (\n \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":["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","MediaGallery","React","constructor","props","_this","_ref","_props$config$zoomedI","super","this","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","player","mediaGalleryImages","defaultGalleryImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","cropFocalRegion","defaultThumbnailImageSettings","onExiting","setState","animating","onExited","next","removeInlineZoomStyle","undefined","isLastItem","nextIndex","state","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","length","index","autoplay","config","currentIndex","mediaItems","_mediaItems","_this$player$current","mediaTypeValue","MediaType","Video","current","play","_this$player$current2","pause","_renderCarouselItemVideo","mediaData","imageSettings","videoData","_videoData$_links","options","playerResources","resources","videoMetaData","videoId","title","duration","playTime","thumbnail","posterframeUrl","src","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","attributes","className","editProps","key","requestContext","context","request","Player","Object","assign","ref","playerData","isEditor","params","_renderEmptyImage","_getCarouselItem","image","isInPopup","arguments","Image","actionContext","fallBackSrc","fallbackImage","gridSettings","loadFailureBehavior","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","tag","classnames","role","tabIndex","altText","onClick","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","getVideoThumbNailItem","classes","_refHandler","divRef","set","event","which","KeyCodes","Enter","Space","preventDefault","_renderVideoThumbnail","fullScreenTitleText","openModalDialog","_toggleModal","imageModalSlider","ZoomView","data","product","result","_mapProductToImageData","carouselprops","Carousel","items","map","item","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","classNames","ImagefullView","shouldUseCmsAltText","altTextSource","bind","isImageZoomed","isInitialLoad","skipImageValidation","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","isMobile","variant","VariantType","Viewport","_this$props$config$im","_this$props$context$r","source","imageSource","shouldUpdateOnPartialDimensionSelection","_setRenderType","app","OmniChannelMedia","mediaLocationsForSelectedVariant","_this$props$config$th","validateProductImages","thumbnailImageSettings","_setImages","_this$props$config$th2","getValidProductImages","RecordId","apiSettings","channelId","productVariant","reaction","_product$productVaria","async","_this$props$context$a","_this$props$config$th3","getProductImages","Name","fireImmediately","mediaLocations","_this$props$config$th4","shouldComponentUpdate","nextProps","nextState","render","_this$props$config$im2","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","_this$props$context$r2","getFallbackImageUrl","ItemId","_this$props$config$im3","mediaLocation","_mediaLocation$Uri","_this$props$data$prod","Uri","getAltText","AltText","curatedImages","_filterMasterImageFromVariant","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","moduleProps","Modal","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","keys","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","renderView","_this$state$mediaGall","ArrayExtensions","hasElements","lastUpdate","defaultKey","_getEmptyThumbnailItem","_this$state$mediaGall2","zoomView","curatedImage","mediaToSet","Promise","all","URL","searchParams","get","getVideoMetadataFromApi","error","telemetry","debug","then","filter","element","Date","now","media","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","ObjectExtensions","isNullOrUndefined","MasterProductId","itemId","_item$additionalPrope","additionalProperties","isApplicableForChildEntities","_this$props$config$da","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","focus","parentDiv","children","querySelector","removeAttribute","removeContainerZoomStyle","_renderThumbnails","thumbnails","Node","_renderThumbnailItem","Module","productName","imageAltText","_context$app","validateMediaLocationAsync","imageData","IsApplicableForChildEntities","resolve","http","XMLHttpRequest","open","addEventListener","status","send","_unused","productId","selectedProduct","catalogId","getCatalogId","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","pairs","pair","catch","exception","_actionContext$reques","isPreview","response","commerceApiRequest","previewImageData","displayOrder","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","commerceVideoMetadataRequest","renderThumbnailItem","GetThumbnailItemComponent","imageId","_props$context$app$co","_props$config$thumbna","_props$context$reques","_props$callbackToggle","_props$callbackThumbn","call","handleKeyDown","keyCode","Button","playVideoTitleText","GetEmptyThumbnailItemComponent","_props$context$app$co2","_props$config$thumbna2","_props$context$reques2","xl","renderThumbnails","getMediaGalleryItems","_item$videoData","videoThumbnail","RenderVideo","module","exports","ReactDOM"],"sourceRoot":""}