{"version":3,"file":"static/js/1e884cd47cbd084269b7.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./src/modules/product-media-gallery/product-media-gallery.props.autogenerated.ts?dda1","webpack://henrys-ecommerce/./src/modules/product-media-gallery/utils/get-valid-product-images.ts?db6b","webpack://henrys-ecommerce/./src/modules/product-media-gallery/product-media-gallery.tsx?e62b","webpack://henrys-ecommerce/./src/modules/product-media-gallery/product-media-gallery.view.tsx?bdb7","webpack://henrys-ecommerce/./lib/product-media-gallery/module-registration.js?7720","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IProductMediaGallery contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum imageSource {\r\n pageContext = 'pageContext',\r\n productId = 'productId'\r\n}\r\n\r\nexport const enum imageZoom {\r\n inline = 'inline',\r\n container = 'container'\r\n}\r\n\r\nexport const enum thumbnailsOrientation {\r\n vertical = 'vertical',\r\n horizontal = 'horizontal'\r\n}\r\n\r\nexport interface IProductMediaGalleryConfig extends Msdyn365.IModuleConfig {\r\n channelId?: string;\r\n videoAttributeName: string;\r\n imageSource?: imageSource;\r\n images?: Msdyn365.IImageData[];\r\n productId?: string;\r\n imageZoom?: imageZoom;\r\n allowFullScreen?: boolean;\r\n dataScale?: string;\r\n zoomedImageSettings?: Msdyn365.IImageSettings;\r\n thumbnailsOrientation?: thumbnailsOrientation;\r\n thumbnailImageSettings?: Msdyn365.IImageSettings;\r\n galleryImageSettings?: Msdyn365.IImageSettings;\r\n shouldHideMasterProductImagesForVariant?: boolean;\r\n showPaginationTooltip?: boolean;\r\n shouldUpdateOnPartialDimensionSelection?: boolean;\r\n className?: string;\r\n skipImageValidation?: boolean;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IProductMediaGalleryResources {\r\n nextScreenshotFlipperText: string;\r\n previousScreenshotFlipperText: string;\r\n fullScreenTitleText: string;\r\n ariaLabelForSlide: string;\r\n}\r\n\r\nexport interface IProductMediaGalleryProps extends Msdyn365.IModule {\r\n resources: IProductMediaGalleryResources;\r\n config: IProductMediaGalleryConfig;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getCatalogId, IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nexport async function getValidProductImages(\r\n productId: number,\r\n channelId: number,\r\n actionContext: IActionContext,\r\n imageSettings: IImageSettings,\r\n selectedProduct?: SimpleProduct\r\n): Promise {\r\n const catalogId = getCatalogId(actionContext.requestContext);\r\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\r\n\r\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\r\n .then(mediaLocations => {\r\n if (mediaLocations) {\r\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings))).then(\r\n pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n }\r\n );\r\n }\r\n\r\n return [];\r\n })\r\n .catch(error => {\r\n actionContext.telemetry.exception(error);\r\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\r\n return [];\r\n });\r\n}\r\n\r\nexport async function validateProductImages(\r\n mediaLocations: MediaLocation[],\r\n actionContext: IActionContext,\r\n imageSettings: IImageSettings\r\n): Promise {\r\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings)))\r\n .then(pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n })\r\n .catch(error => {\r\n actionContext.telemetry.exception(error);\r\n actionContext.telemetry.debug('Unable to validate prodcut images');\r\n return [];\r\n });\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unused-vars-experimental -- .\r\nasync function validateMediaLocaionAsync(mediaLocation: MediaLocation, imageSettings?: IImageSettings): Promise<[IImageData, boolean]> {\r\n const imageData = {\r\n src: mediaLocation.Uri || '',\r\n altText: mediaLocation.AltText || ''\r\n };\r\n\r\n if (imageData.src === '') {\r\n return [imageData, false];\r\n }\r\n\r\n return new Promise<[IImageData, boolean]>(resolve => {\r\n try {\r\n const http = new XMLHttpRequest();\r\n http.open('HEAD', imageData.src, true);\r\n\r\n http.addEventListener('load', () => {\r\n resolve([imageData, http.status === 200 || http.status === 201]);\r\n });\r\n\r\n http.addEventListener('error', () => {\r\n resolve([imageData, false]);\r\n });\r\n\r\n http.send();\r\n } catch {\r\n resolve([imageData, false]);\r\n }\r\n });\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport YouTubePlayer from 'react-player/youtube';\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Carousel, ICarouselProps, IVideoMetadata, Player } from '@msdyn365-commerce/components';\r\nimport { commerceVideoMetadataRequest, IImageData, IImageSettings, Image, IVideoFileDataLinks, Video } from '@msdyn365-commerce/core';\r\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n defaultDataScale,\r\n IComponentNodeProps,\r\n ImagefullView,\r\n IModalViewProps,\r\n IModuleProps,\r\n inlineZoomImageOnHover,\r\n inlineZoomImageOnMouseMove,\r\n inlineZoomImageOnMouseOut,\r\n inlineZoomInitClick,\r\n INodeProps,\r\n ISingleSlideCarouselProps,\r\n isMobile,\r\n KeyCodes,\r\n NodeTag,\r\n onContainerZoomInit,\r\n onMouseMoveLensContainer,\r\n onMouseOutLensContainer,\r\n onMouseOverImageContainer,\r\n removeContainerZoomStyle,\r\n removeInlineZoomStyle,\r\n SingleSlideCarousel,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { IProductMediaGalleryData } from './product-media-gallery.data';\r\nimport { imageSource, imageZoom, IProductMediaGalleryProps, thumbnailsOrientation } from './product-media-gallery.props.autogenerated';\r\nimport { getValidProductImages, validateProductImages } from './utils';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\ninterface IPlayerOptions {\r\n autoplay?: boolean;\r\n mute?: boolean;\r\n loop?: boolean;\r\n playPauseTrigger?: boolean;\r\n controls?: boolean;\r\n maskLevel?: number;\r\n market?: string;\r\n playbackSpeed?: boolean;\r\n download?: boolean;\r\n playFullScreen?: boolean;\r\n hidePosterFrame?: boolean;\r\n autoCaptions?: string;\r\n flexSize?: boolean;\r\n aspectRatio?: number;\r\n userMinimumAge?: number;\r\n showEndImage?: boolean;\r\n showImageForVideoError?: boolean;\r\n inviewPlay?: boolean;\r\n inviewThreshold?: number;\r\n inViewWidthFraction?: number;\r\n inViewHeightFraction?: number;\r\n controlPanelTimeout?: number;\r\n thumbnailFullWidth?: boolean;\r\n ageGate?: boolean;\r\n lazyLoad?: boolean;\r\n}\r\n\r\ninterface IVideoData {\r\n _links?: IVideoFileDataLinks;\r\n playtime?: number;\r\n subtitle?: string;\r\n thumbnail?: IImageData;\r\n title?: string;\r\n description?: string;\r\n interactiveTriggersEnabled?: boolean;\r\n minimumAge?: number;\r\n _id?: string;\r\n locale?: string;\r\n}\r\n\r\n/**\r\n * IMediaGalleryState Interface.\r\n */\r\nexport interface IMediaGalleryState {\r\n animating: boolean;\r\n activeIndex: number;\r\n isImageZoomed: boolean;\r\n modalIsOpen: boolean;\r\n lastUpdate?: number;\r\n isMobileImageZoomed?: boolean;\r\n mediaGalleryItems?: IImageData[];\r\n isInitialLoad?: boolean;\r\n shouldUseOptimizedImage?: boolean;\r\n youtubeVideoId?: string;\r\n videoData?: IVideoData;\r\n siteBuilderAttributeId?: string;\r\n}\r\n\r\n/**\r\n * IMediaGalleryThumbnailsViewProps Interface.\r\n */\r\nexport interface IMediaGalleryThumbnailsViewProps {\r\n ThumbnailsContainerProps: INodeProps;\r\n SingleSlideCarouselComponentProps: INodeProps;\r\n items?: IMediaGalleryThumbnailItemViewProps[];\r\n videos?: IMediaGalleryThumbnailItemViewProps[];\r\n}\r\n\r\n/**\r\n * IMediaGalleryThumbnailItemViewProps Interface.\r\n */\r\nexport interface IMediaGalleryThumbnailItemViewProps {\r\n ThumbnailItemContainerProps: INodeProps;\r\n Picture: React.ReactElement;\r\n}\r\n\r\n/**\r\n * IMediaGalleryViewProps Interface.\r\n */\r\nexport interface IMediaGalleryViewProps extends IProductMediaGalleryProps {\r\n state: IMediaGalleryState;\r\n MediaGallery: IModuleProps;\r\n CarouselProps: INodeProps;\r\n Thumbnails: IMediaGalleryThumbnailsViewProps;\r\n Modal?: React.ReactElement | null;\r\n callbackToggle?(): void;\r\n callbackThumbnailClick?(index: number): void;\r\n callbackThumbnailKeyDown?(index: number): void;\r\n}\r\n\r\n/**\r\n * Props for carousel.\r\n */\r\ninterface IMediaGalleryCarouselItems {\r\n items: ItemType[];\r\n keys: (string | undefined)[];\r\n}\r\n\r\n/**\r\n * Media gallery component.\r\n */\r\nclass MediaGallery extends React.Component, IMediaGalleryState> {\r\n private readonly _inlineZoomDivRef: Map = new Map();\r\n\r\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\r\n\r\n private mediaGalleryImages: IImageData[] = [];\r\n\r\n private fallbackImage?: string;\r\n\r\n private readonly defaultGalleryImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\r\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\r\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n private readonly defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\r\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n private readonly _zoomedImageSettings: IImageSettings;\r\n\r\n public constructor(props: IProductMediaGalleryProps) {\r\n super(props);\r\n this._toggleModal = this._toggleModal.bind(this);\r\n this.state = {\r\n activeIndex: 0,\r\n animating: false,\r\n isImageZoomed: false,\r\n modalIsOpen: false,\r\n isInitialLoad: true,\r\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation\r\n };\r\n\r\n this._zoomedImageSettings =\r\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\r\n\r\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\r\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\r\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\r\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\r\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\r\n }\r\n\r\n public isMobile(): boolean {\r\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\r\n return size === 'xs';\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const source = this.props.config.imageSource ?? imageSource.pageContext;\r\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\r\n this._setRenderType();\r\n if (source === imageSource.pageContext) {\r\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\r\n const images = await validateProductImages(\r\n this.props.data.mediaLocationsForSelectedVariant.result,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\r\n );\r\n this._setImages(images);\r\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\r\n const product = this.props.data.product.result;\r\n const images = await getValidProductImages(\r\n product.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n product.productVariant\r\n );\r\n\r\n this._setImages(images);\r\n } else {\r\n this._setImages([]);\r\n }\r\n\r\n reaction(\r\n () => {\r\n const product = this.props.data.product.result;\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n if (!shouldUpdateOnPartialDimensionSelection || ObjectExtensions.isNullOrUndefined(product.productVariant?.RecordId)) {\r\n return `${product.RecordId}`;\r\n }\r\n\r\n return `${product.RecordId}-${product.productVariant!.RecordId}`;\r\n },\r\n async () => {\r\n const product = this.props.data.product.result;\r\n if (product) {\r\n const images = await getValidProductImages(\r\n product.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\r\n );\r\n this._setImages(images);\r\n } else {\r\n this._setImages([]);\r\n }\r\n }\r\n );\r\n }\r\n\r\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\r\n const images = await validateProductImages(\r\n this.props.data.mediaLocations.result,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\r\n );\r\n this._setImages(images);\r\n }\r\n\r\n if (source === imageSource.pageContext && this.props.data.product.result) {\r\n const attributes = await getAttributeValuesAsync(\r\n { callerContext: this.props.context.actionContext },\r\n this.props.data.product.result.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n +this.props.context.request.apiSettings.catalogId\r\n );\r\n\r\n const attributeName = this.props.config.videoAttributeName || 'Product Page - Video';\r\n const videoId = attributes.find(av => av.Name === attributeName)?.TextValue;\r\n const siteBuilderVideoId = attributes.find(av => av.Name === 'productVideoId')?.TextValue;\r\n\r\n this.setState(\r\n {\r\n youtubeVideoId: videoId,\r\n siteBuilderAttributeId: siteBuilderVideoId\r\n },\r\n async () => {\r\n await this.getVideoMetadataFromApi();\r\n }\r\n );\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IProductMediaGalleryProps, nextState: IMediaGalleryState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { id, config, resources } = this.props;\r\n\r\n const { className, showPaginationTooltip } = config;\r\n\r\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\r\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\r\n const zoomViewMode: string =\r\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\r\n const source = this.props.config.imageSource ?? imageSource.pageContext;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\r\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\r\n if (this.props.data.product.result) {\r\n this.fallbackImage = getFallbackImageUrl(this.props.data.product.result.ItemId, this.props.context.request.apiSettings);\r\n }\r\n if (emptyPlaceHolderImage && this.fallbackImage) {\r\n this.fallbackImage = `${this.fallbackImage},${emptyPlaceHolderImage}`;\r\n }\r\n if (this.props.config.skipImageValidation && !this.state.mediaGalleryItems && this.state.isInitialLoad) {\r\n let images: IImageData[] = [];\r\n let mediaLocations: MediaLocation[] = [];\r\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\r\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\r\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\r\n mediaLocations = this.props.data.mediaLocations.result;\r\n }\r\n images = mediaLocations.map(mediaLocation => {\r\n return {\r\n src: mediaLocation.Uri ?? '',\r\n altText: mediaLocation.AltText ?? ''\r\n };\r\n });\r\n const curatedImages = this.props.config.images ?? [];\r\n this.mediaGalleryImages = [...this._filterMasterImageFromVariant(images), ...curatedImages];\r\n }\r\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\r\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\r\n\r\n const youtubeVideoId = this.state.youtubeVideoId;\r\n if (youtubeVideoId) {\r\n mediaGalleryCarouselItems.items.push(this._renderCarouselItemYoutubeVideoView(youtubeVideoId));\r\n mediaGalleryCarouselItems.keys.push(youtubeVideoId);\r\n }\r\n if (this.state.videoData) {\r\n mediaGalleryCarouselItems.items.push(this._renderSiteBuilderVideo(this.state.videoData));\r\n mediaGalleryCarouselItems.keys.push(this.state.videoData._id);\r\n }\r\n\r\n const viewProps: IMediaGalleryViewProps = {\r\n ...(this.props as IProductMediaGalleryProps),\r\n state: this.state,\r\n MediaGallery: {\r\n moduleProps: this.props,\r\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\r\n },\r\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\r\n callbackToggle: this.openModalDialog,\r\n callbackThumbnailClick: this._generateOnThumbnailClick,\r\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\r\n CarouselProps: {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items: mediaGalleryCarouselItems.items,\r\n activeIndex: this.state.activeIndex,\r\n next: this.next,\r\n previous: this.previous,\r\n interval: false,\r\n directionTextPrev: resources.previousScreenshotFlipperText,\r\n directionTextNext: resources.nextScreenshotFlipperText,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n showPaginationTooltip: showPaginationTooltip === true,\r\n indicatorAriaText: resources.ariaLabelForSlide,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting,\r\n key: mediaGalleryCarouselItems.keys\r\n } as IComponentNodeProps,\r\n Thumbnails: {\r\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\r\n SingleSlideCarouselComponentProps: {\r\n tag: SingleSlideCarousel,\r\n className: 'ms-media-gallery__thumbnails',\r\n vertical: isVertical,\r\n flipperPrevLabel: resources.previousScreenshotFlipperText,\r\n flipperNextLabel: resources.nextScreenshotFlipperText,\r\n parentId: id,\r\n useTabList: true,\r\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\r\n } as IComponentNodeProps,\r\n items: mediaGalleryThumbnailCarouselItems.items,\r\n videos: this._getVideoThumbnailItems(\r\n mediaGalleryThumbnailCarouselItems.items?.length || 0,\r\n mediaGalleryThumbnailCarouselItems.items\r\n )\r\n }\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Zoomed out image on previous/next click.\r\n */\r\n public updateZoomedInImage(): void {\r\n this.setState({ isImageZoomed: false });\r\n }\r\n\r\n private readonly onExiting = () => {\r\n this.setState({ animating: true });\r\n };\r\n\r\n private readonly onExited = () => {\r\n this.setState({ animating: false });\r\n };\r\n\r\n /**\r\n * On click next in carousel.\r\n */\r\n private readonly next = (): void => {\r\n removeInlineZoomStyle();\r\n if (this.isLastItem() === undefined) {\r\n return;\r\n }\r\n\r\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\r\n this.goToIndex(nextIndex);\r\n\r\n this.updateZoomedInImage();\r\n };\r\n\r\n /**\r\n * On click previous in carousel.\r\n */\r\n private readonly previous = (): void => {\r\n removeInlineZoomStyle();\r\n const images = this.state.mediaGalleryItems;\r\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\r\n this.goToIndex(nextIndex);\r\n this.updateZoomedInImage();\r\n };\r\n\r\n private readonly goToIndex = (index: number): void => {\r\n this.setState({ activeIndex: index });\r\n };\r\n\r\n private _getVideoThumbnailItems = (startIndex: number, carouselItems: React.ReactNode[]) => {\r\n const items = [];\r\n\r\n if (this.state.youtubeVideoId) {\r\n items.push(\r\n this._getVideoThumbnailItem(\r\n {\r\n src: `https://img.youtube.com/vi/${this.state.youtubeVideoId}/default.jpg`\r\n },\r\n startIndex++,\r\n this.state.activeIndex\r\n )\r\n );\r\n }\r\n\r\n if (this.state.videoData) {\r\n const video = this.getSiteBuilderVideoThumbnail(startIndex++);\r\n if (video) {\r\n items.push(video);\r\n carouselItems.push(this._renderSiteBuilderVideo(this.state.videoData));\r\n }\r\n }\r\n\r\n return items;\r\n };\r\n\r\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\r\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\r\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\r\n if (thumbnailImageSettings) {\r\n thumbnailImageSettings.cropFocalRegion = true;\r\n }\r\n\r\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\r\n\r\n if (!hasMediaGalleryItems) {\r\n if (this.state.lastUpdate) {\r\n const defaultKey = 0;\r\n return {\r\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\r\n keys: ['empty']\r\n };\r\n }\r\n return { items: [], keys: [] };\r\n }\r\n\r\n return {\r\n items: [\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n ...mediaGalleryItems!.map((item: IImageData, index: number) =>\r\n this._getThumbnailItem(\r\n item,\r\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n index,\r\n this.state.activeIndex\r\n )\r\n )\r\n ],\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n keys: [...mediaGalleryItems!.map(item => item.src)]\r\n };\r\n }\r\n\r\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\r\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\r\n const galleryImageSettings = this.props.config.galleryImageSettings;\r\n if (galleryImageSettings) {\r\n galleryImageSettings.cropFocalRegion = true;\r\n }\r\n\r\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\r\n\r\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\r\n\r\n if (!hasMediaGalleryItems) {\r\n if (this.state.lastUpdate) {\r\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\r\n }\r\n return { items: [], keys: [] };\r\n }\r\n\r\n return {\r\n items: [\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n ...mediaGalleryItems!.map((item: IImageData, index: number) =>\r\n this._renderCarouselItemImageView(zoomView, item, galleryImageSettings ?? this.defaultGalleryImageSettings, index)\r\n )\r\n ],\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n keys: [...mediaGalleryItems!.map(item => item.src)]\r\n };\r\n }\r\n\r\n private _setImages(images?: IImageData[]): void {\r\n const curatedImage = this.props.config.images ?? [];\r\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\r\n\r\n let imagesToSet = images ?? [];\r\n if (shouldHidePrimaryImages) {\r\n // Currently returned image response is having duplicate image\r\n // along with non-selected variant and previous selection is not getting cleared. With the help of index we\r\n // select item from 0 index till it is having non repeating image source name ending with index number.\r\n // Here we are keeping '.' to make sure that we are considering any digit just before '.' in image source path\r\n imagesToSet = imagesToSet.filter((item, index) => {\r\n let incrementedIndex = index;\r\n const imageIndex = `${++incrementedIndex}.`;\r\n return item.src?.includes(imageIndex);\r\n });\r\n }\r\n this.setState({\r\n mediaGalleryItems: [...imagesToSet, ...curatedImage],\r\n activeIndex: 0,\r\n lastUpdate: Date.now(),\r\n shouldUseOptimizedImage: false\r\n });\r\n }\r\n\r\n private _setRenderType(): void {\r\n this.setState({\r\n isInitialLoad: false\r\n });\r\n }\r\n\r\n private _renderCarouselItemYoutubeVideoView(youtubeVideoId: string): React.ReactNode {\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _renderSiteBuilderVideo(video: IVideoData): React.ReactNode {\r\n const videoData: IVideoData = video;\r\n const options: IPlayerOptions = {\r\n controls: true,\r\n playPauseTrigger: true\r\n };\r\n const videoMetaData: IVideoMetadata = {};\r\n videoMetaData.videoId = video._id;\r\n videoMetaData.title = video.title;\r\n videoMetaData.duration = video.playtime;\r\n videoData.interactiveTriggersEnabled = true;\r\n if (videoData.thumbnail) {\r\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\r\n }\r\n if (videoData._links?.binaryReferences) {\r\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\r\n }\r\n // @ts-ignore\r\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _getVideoThumbnailItem = (\r\n image: IImageData,\r\n index: number,\r\n modifiedActiveIndex: number\r\n ): IMediaGalleryThumbnailItemViewProps => {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: index,\r\n 'aria-label': image.altText,\r\n 'aria-selected': modifiedActiveIndex === index,\r\n 'aria-controls': `${this.props.id}__carousel-item__${index}`,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n // Video: (

Video

),\r\n };\r\n };\r\n\r\n private _renderCarouselItemImageView(\r\n zoomView: string,\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n isInPopup: boolean = false\r\n ): React.ReactNode {\r\n if (this.isMobile()) {\r\n if (isInPopup) {\r\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\r\n }\r\n\r\n switch (zoomView) {\r\n case 'container': {\r\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n case 'inline': {\r\n return this._renderImageInlineOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n case 'fullscreen': {\r\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\r\n }\r\n\r\n // No default\r\n }\r\n return <>{this._getCarouselItem(image, imageSettings, index, isInPopup)};\r\n }\r\n\r\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\r\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\r\n let variantImages = images ?? [];\r\n const isVariantProduct =\r\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\r\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\r\n const itemId = this.props.data.product.result?.ItemId;\r\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\r\n // Currently returned image response is having duplicate image\r\n // along with non-selected variant and previous selection is not getting cleared. With the help of index we\r\n // select item from 0 index till it is having non repeating image source name ending with index number.\r\n // Here we are keeping '.' to make sure that we are considering any digit just before '.' in image source path\r\n variantImages = variantImages.filter(item => {\r\n const imagePattern = `${itemId}_000`;\r\n return !item.src?.includes(imagePattern);\r\n });\r\n if (!ArrayExtensions.hasElements(variantImages)) {\r\n variantImages = images ?? [];\r\n }\r\n }\r\n return variantImages;\r\n }\r\n\r\n private readonly _getCarouselItem = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n isInPopup: boolean = false\r\n ): React.ReactNode => (\r\n \r\n );\r\n\r\n private readonly _getThumbnailItem = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n modifiedActiveIndex: number\r\n ): IMediaGalleryThumbnailItemViewProps => {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: index,\r\n 'aria-label': image.altText,\r\n 'aria-selected': modifiedActiveIndex === index,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n };\r\n\r\n /**\r\n * Ref Handler.\r\n * @param index -Remove item click function.\r\n * @returns Set inline zoom.\r\n */\r\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\r\n this._inlineZoomDivRef.set(index, divRef);\r\n };\r\n\r\n private readonly getSiteBuilderVideoThumbnail = (index: number): IMediaGalleryThumbnailItemViewProps | null => {\r\n const video = this.state.videoData;\r\n if (video) {\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'msc-ss-carousel-vert-item ms-media-gallery__thumbnail-item',\r\n role: 'presentation',\r\n key: imageSource?.productId,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\r\n return (event: React.KeyboardEvent) => {\r\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n }\r\n };\r\n };\r\n\r\n private readonly _generateOnThumbnailClick = (index: number) => {\r\n return (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n };\r\n };\r\n\r\n /**\r\n * GetVideoMetadataFromAPI - Makes API call to get video metadata.\r\n * @returns - Promise.\r\n */\r\n private readonly getVideoMetadataFromApi = async (): Promise => {\r\n if (this.props.config.channelId) {\r\n this.props.context.actionContext.requestContext.apiSettings.eCommerceChannelId = this.props.config.channelId;\r\n }\r\n const videoId = this.state.siteBuilderAttributeId;\r\n if (videoId) {\r\n await commerceVideoMetadataRequest(this.props.context.request, [videoId]).then(result => {\r\n // @ts-ignore\r\n const videoData = result;\r\n if (videoData && videoData.data) {\r\n this.setState({ videoData: videoData.data[0] });\r\n }\r\n });\r\n }\r\n };\r\n\r\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\r\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\r\n }\r\n\r\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\r\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\r\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\r\n if (!this.state.isMobileImageZoomed) {\r\n const bounds = target.getBoundingClientRect();\r\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\r\n\r\n const positionX = event.clientX - bounds.left;\r\n const positionY = event.clientY - bounds.top;\r\n const scaledPositionX = positionX * dataScale;\r\n const scaledPositionY = positionY * dataScale;\r\n\r\n target.style.transform = `scale(${dataScale})`;\r\n target.classList.add(mobileZoomedInImageClassName);\r\n target.parentElement!.style.overflow = 'auto';\r\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\r\n this.setState({\r\n isMobileImageZoomed: true\r\n });\r\n } else {\r\n target.style.transform = '';\r\n target.classList.remove(mobileZoomedInImageClassName);\r\n target.parentElement!.style.overflow = '';\r\n this.setState({\r\n isMobileImageZoomed: false\r\n });\r\n }\r\n }\r\n\r\n private _onInlineImageClick(event: React.MouseEvent): void {\r\n if (window.innerWidth <= 768) {\r\n // $msv-breakpoint-m\r\n this._handleMobileViewZoomedImageClick(event);\r\n return;\r\n }\r\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\r\n this.setState({\r\n isImageZoomed: true\r\n });\r\n }\r\n\r\n private _onImageMouseOut(event: React.MouseEvent): void {\r\n inlineZoomImageOnMouseOut(event);\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n\r\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\r\n if (window.innerWidth <= 768) {\r\n // $msv-breakpoint-m\r\n this._handleMobileViewZoomedImageClick(event);\r\n return;\r\n }\r\n\r\n onContainerZoomInit(event);\r\n\r\n this.setState({\r\n isImageZoomed: true\r\n });\r\n }\r\n\r\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\r\n onMouseOutLensContainer(event);\r\n\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n\r\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n return (\r\n
\r\n \r\n
\r\n {}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n private _mapProductToImageData(product: SimpleProduct): IImageData {\r\n return {\r\n src: product.PrimaryImageUrl ?? ''\r\n };\r\n }\r\n\r\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _getEmptyThumbnailItem(\r\n imageSettings: IImageSettings | undefined,\r\n index: number,\r\n modifiedActiveIndex: number\r\n ): IMediaGalleryThumbnailItemViewProps {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 'empty',\r\n 'aria-label': '',\r\n 'aria-selected': modifiedActiveIndex === index,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n }\r\n\r\n private readonly isFirstItem = () => this.state.activeIndex === 0;\r\n\r\n private readonly isLastItem = () => {\r\n const images = this.state.mediaGalleryItems;\r\n return images && this.state.activeIndex === images.length - 1;\r\n };\r\n\r\n private readonly openModalDialog = (): void => {\r\n this._toggleModal();\r\n };\r\n\r\n private _toggleModal(): void {\r\n if (this.state.modalIsOpen) {\r\n this.fullScreenOverlayButtonRef.current?.focus();\r\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\r\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\r\n const image = parentDiv.children[1].querySelector('img');\r\n if (image) {\r\n image.removeAttribute('style');\r\n }\r\n }\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n this.setState({\r\n isImageZoomed: false,\r\n modalIsOpen: !this.state.modalIsOpen\r\n });\r\n removeInlineZoomStyle();\r\n removeContainerZoomStyle();\r\n }\r\n\r\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\r\n const {\r\n data: {\r\n product: { result: product }\r\n },\r\n resources\r\n } = this.props;\r\n let mediaGalleryItems = this.state.mediaGalleryItems;\r\n\r\n if (!mediaGalleryItems && product) {\r\n mediaGalleryItems = [this._mapProductToImageData(product)];\r\n }\r\n const carouselprops = {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items:\r\n mediaGalleryItems &&\r\n mediaGalleryItems.map((item: IImageData, index: number) =>\r\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\r\n ),\r\n activeIndex: this.state.activeIndex,\r\n next: this.next,\r\n previous: this.previous,\r\n interval: false,\r\n directionTextPrev: resources.previousScreenshotFlipperText,\r\n directionTextNext: resources.nextScreenshotFlipperText,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n showPaginationTooltip: true,\r\n hideIndicator: false,\r\n keyboard: false,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting,\r\n isDisabledFunctionality: this.state.isMobileImageZoomed\r\n } as IComponentNodeProps;\r\n const carousel = ;\r\n\r\n const imageModalSliderProps: IModalViewProps = {\r\n modalIsOpen: this.state.modalIsOpen,\r\n ontoggle: this._toggleModal,\r\n galleryCarousel: carousel,\r\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\r\n };\r\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\r\n };\r\n}\r\n\r\nexport default MediaGallery;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryViewProps } from '@msdyn365-commerce-modules/media-gallery';\r\n\r\nimport { IMediaGalleryThumbnailsViewProps } from './product-media-gallery';\r\n\r\nconst MediaGalleryView: React.FC = props => {\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n\r\n return (\r\n \r\n \r\n {Modal}\r\n {_renderThumbnails(Thumbnails)}\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items, videos } = thumbnails;\r\n\r\n let thumbnailItems = items ?? [];\r\n if (videos) {\r\n thumbnailItems = [...thumbnailItems, ...videos];\r\n }\r\n\r\n return (\r\n \r\n {thumbnailItems.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\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['product-media-gallery'] = {\n c: () => require('partner/modules/product-media-gallery/product-media-gallery.tsx'),\n $type: 'contentModule',\n da: [{name:'mediaLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id', runOn: 0},{name:'mediaLocationsForSelectedVariant', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'product-media-gallery',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/product-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__|modules|product-media-gallery|product-media-gallery'] = {\n c: () => require('partner/modules/product-media-gallery/product-media-gallery.view.tsx'),\n cn: '__local__-__local__-product-media-gallery'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["imageSource","imageZoom","thumbnailsOrientation","async","getValidProductImages","productId","channelId","actionContext","imageSettings","selectedProduct","catalogId","getCatalogId","requestContext","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","then","mediaLocations","Promise","all","map","mediaLocation","validateMediaLocaionAsync","pairs","filter","pair","catch","error","telemetry","exception","debug","validateProductImages","imageData","src","Uri","altText","AltText","resolve","http","XMLHttpRequest","open","addEventListener","status","send","_unused","MediaGallery","React","constructor","props","_this","_ref","_props$config$zoomedI","super","this","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","mediaGalleryImages","defaultGalleryImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","cropFocalRegion","defaultThumbnailImageSettings","onExiting","setState","animating","onExited","next","removeInlineZoomStyle","undefined","isLastItem","nextIndex","state","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","length","index","_getVideoThumbnailItems","startIndex","carouselItems","items","youtubeVideoId","push","_getVideoThumbnailItem","videoData","video","getSiteBuilderVideoThumbnail","_renderSiteBuilderVideo","image","modifiedActiveIndex","ThumbnailItemContainerProps","tag","className","classnames","role","tabIndex","key","id","onClick","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","Image","Object","assign","gridSettings","context","request","config","thumbnailImageSettings","loadFailureBehavior","bypassHideOnFailure","_getCarouselItem","isInPopup","arguments","fallBackSrc","fallbackImage","shouldSkipToMainImage","_getThumbnailItem","imageFallbackOptimize","shouldUseOptimizedImage","_refHandler","divRef","set","_video$thumbnail","thumbnail","event","which","KeyCodes","Enter","Space","preventDefault","getVideoMetadataFromApi","apiSettings","eCommerceChannelId","videoId","siteBuilderAttributeId","commerceVideoMetadataRequest","result","data","openModalDialog","_toggleModal","imageModalSlider","ZoomView","product","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","bind","isImageZoomed","isInitialLoad","skipImageValidation","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","isMobile","variant","VariantType","Viewport","_this$props$config$im","source","pageContext","shouldUpdateOnPartialDimensionSelection","_setRenderType","mediaLocationsForSelectedVariant","_this$props$config$th","_setImages","_this$props$config$th2","RecordId","productVariant","reaction","_product$productVaria","ObjectExtensions","isNullOrUndefined","_this$props$config$th3","_this$props$config$th4","_attributes$find","_attributes$find2","attributes","getAttributeValuesAsync","callerContext","attributeName","videoAttributeName","find","av","Name","TextValue","siteBuilderVideoId","shouldComponentUpdate","nextProps","nextState","render","_this$props$config$im2","_this$props$context$a","_mediaGalleryThumbnai","isVertical","vertical","isFullscreenAllowed","allowFullScreen","zoomViewMode","inline","container","emptyPlaceHolderImage","app","placeholderImageName","getFallbackImageUrl","ItemId","_this$props$config$im3","_mediaLocation$Uri","_mediaLocation$AltTex","curatedImages","_filterMasterImageFromVariant","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","_renderCarouselItemYoutubeVideoView","keys","_id","viewProps","_objectSpread","moduleProps","Modal","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","videos","renderView","_this$state$mediaGall","ArrayExtensions","hasElements","lastUpdate","defaultKey","_getEmptyThumbnailItem","_this$state$mediaGall2","zoomView","_renderEmptyImage","_this$props$config$im4","_this$props$config$sh","curatedImage","imagesToSet","shouldHideMasterProductImagesForVariant","_item$src","incrementedIndex","imageIndex","includes","Date","now","YouTubePlayer","width","height","url","_videoData$_links","videoMetaData","title","duration","playtime","interactiveTriggersEnabled","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","options","controls","playPauseTrigger","metaData","Video","editProps","Player","playerData","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh2","_this$props$data$prod","_this$props$data$prod2","_this$props$data$prod3","shouldHidePrimaryImages","variantImages","isVariantProduct","MasterProductId","itemId","_item$src2","imagePattern","_this$props$config$da","ref","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","target","currentTarget","mobileZoomedInImageClassName","style","transform","classList","remove","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","Number","positionX","clientX","left","positionY","clientY","top","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","window","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","_renderThumbnails","thumbnails","thumbnailItems","Node","_renderThumbnailItem","Module","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}