{"version":3,"file":"static/js/9b071ca591094398bb7f.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/data-actions/get-attributes-for-selected-variant.ts?4859","webpack://mattressfirm/./src/modules/mfrm-media-gallery/mfrm-media-gallery.props.autogenerated.ts?5d9e","webpack://mattressfirm/./src/modules/mfrm-media-gallery/utils/get-valid-product-images.ts?6d84","webpack://mattressfirm/./src/modules/mfrm-media-gallery/mfrm-media-gallery.tsx?f5b1","webpack://mattressfirm/./src/modules/mfrm-media-gallery/mfrm-media-gallery.view.tsx?f3e1","webpack://mattressfirm/./lib/mfrm-media-gallery/module-registration.js?1477","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeValue, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\n/**\r\n * Chains getting the SelectedVariant with GetActivePrice\r\n */\r\nexport class AttributesForSelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n public channelId: number;\r\n public catalogId: number;\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.selectedProduct = selectedProduct;\r\n this.catalogId = catalogId || 0;\r\n }\r\n\r\n public getCacheKey = () => `AttributesForSelectedVariant`;\r\n public getCacheObjectType = () => 'ProductAttributeValue';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nexport const createAttributesForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): AttributesForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n if (productId) {\r\n return new AttributesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\r\n } else {\r\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Calls the Retail API a get a list of dimension values for a given product.\r\n */\r\nexport async function getAttributesForSelectedVariantAction(\r\n input: AttributesForSelectedVariantInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // @ts-ignore: Promise vs. ObservablePromise typing conflict\r\n return Promise.resolve()\r\n .then(() => {\r\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\r\n\r\n if (!activeProduct) {\r\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\r\n\r\n return getSelectedVariant(selectedVariantInput, ctx);\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then((productResult: SimpleProduct | null) => {\r\n const activeProduct: SimpleProduct | undefined = productResult;\r\n\r\n if (activeProduct) {\r\n return getAttributeValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n activeProduct.RecordId,\r\n input.channelId,\r\n input.catalogId\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .then((attributeValues: AttributeValue[] | null) => {\r\n const resultArray = attributeValues;\r\n if (resultArray) {\r\n return resultArray;\r\n }\r\n\r\n return [];\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(error.message);\r\n throw new Error(`[getPriceForSelectedVariantAction]Error executing action ${error.message}`);\r\n });\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/product-info/get-attributes-for-selected-variant',\r\n action: >getAttributesForSelectedVariantAction,\r\n input: createAttributesForSelectedVariantInput\r\n});\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IMfrmMediaGallery 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 IMfrmMediaGalleryConfig extends Msdyn365.IModuleConfig {\r\n imageSource?: imageSource;\r\n images?: Msdyn365.IImageData[];\r\n productId?: string;\r\n imageZoom?: imageZoom;\r\n allowFullScreen?: boolean;\r\n dataScale?: string;\r\n zoomedImageSettings?: Msdyn365.IImageSettings;\r\n thumbnailsOrientation?: thumbnailsOrientation;\r\n thumbnailImageSettings?: Msdyn365.IImageSettings;\r\n galleryImageSettings?: Msdyn365.IImageSettings;\r\n shouldHideMasterProductImagesForVariant?: boolean;\r\n showPaginationTooltip?: boolean;\r\n shouldUpdateOnPartialDimensionSelection?: boolean;\r\n className?: string;\r\n skipImageValidation?: boolean;\r\n clientRender?: boolean;\r\n videoSrcQueryString?: string;\r\n videoThumbnailUrlsConfig: string;\r\n}\r\n\r\nexport interface IMfrmMediaGalleryResources {\r\n nextScreenshotFlipperText: string;\r\n previousScreenshotFlipperText: string;\r\n fullScreenTitleText: string;\r\n ariaLabelForSlide: string;\r\n videoText: string;\r\n}\r\n\r\nexport interface IMfrmMediaGalleryProps extends Msdyn365.IModule {\r\n resources: IMfrmMediaGalleryResources;\r\n config: IMfrmMediaGalleryConfig;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getCatalogId, IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nexport async function getValidProductImages(\r\n productId: number, channelId: number,\r\n actionContext: IActionContext, imageSettings: IImageSettings,\r\n selectedProduct?: SimpleProduct): Promise {\r\n\r\n const catalogId = getCatalogId(actionContext.requestContext);\r\n const actionInput = new MediaLocationsForSelectedVariantInput(\r\n productId,\r\n channelId,\r\n selectedProduct,\r\n catalogId\r\n );\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)))\r\n .then(pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n });\r\n }\r\n\r\n return [];\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(mediaLocations: MediaLocation[], actionContext: IActionContext, imageSettings: IImageSettings): 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 }).catch(error => {\r\n actionContext.telemetry.exception(error);\r\n actionContext.telemetry.debug('Unable to validate prodcut images');\r\n return [];\r\n });\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unused-vars-experimental -- .\r\nasync function validateMediaLocaionAsync(mediaLocation: MediaLocation, imageSettings?: IImageSettings): Promise<[IImageData, boolean]> {\r\n const imageData = {\r\n src: mediaLocation.Uri || '',\r\n altText: mediaLocation.AltText || ''\r\n };\r\n\r\n if (imageData.src === '') {\r\n return [imageData, false];\r\n }\r\n\r\n return new Promise<[IImageData, boolean]>((resolve) => {\r\n try {\r\n const http = new XMLHttpRequest();\r\n http.open('HEAD', imageData.src, true);\r\n\r\n http.addEventListener('load', () => {\r\n resolve([imageData, http.status === 200 || http.status === 201]);\r\n });\r\n\r\n http.addEventListener('error', () => {\r\n resolve([imageData, false]);\r\n });\r\n\r\n http.send();\r\n } catch {\r\n resolve([imageData, false]);\r\n }\r\n });\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Carousel, ICarouselProps } from '@msdyn365-commerce/components';\r\nimport _getViewPort from '../../Utilities/get-view-port';\r\nimport { computed } from 'mobx';\r\n\r\n\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n defaultDataScale,\r\n IComponentNodeProps,\r\n ImagefullView,\r\n IModalViewProps,\r\n IModuleProps,\r\n inlineZoomImageOnHover,\r\n inlineZoomImageOnMouseMove,\r\n inlineZoomImageOnMouseOut,\r\n inlineZoomInitClick,\r\n INodeProps,\r\n ISingleSlideCarouselProps,\r\n 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} 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 { IMfrmMediaGalleryData } from './mfrm-media-gallery.data';\r\nimport { imageSource, imageZoom, IMfrmMediaGalleryProps, thumbnailsOrientation } from './mfrm-media-gallery.props.autogenerated';\r\nimport { getValidProductImages, validateProductImages } from './utils';\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 isMobile:boolean;\r\n isVideoUrlExist:boolean;\r\n}\r\n\r\n/**\r\n * IMediaGalleryThumbnailsViewProps Interface.\r\n */\r\nexport interface IMediaGalleryThumbnailsViewProps {\r\n ThumbnailsContainerProps: INodeProps;\r\n SingleSlideCarouselComponentProps: INodeProps;\r\n items?: IMediaGalleryThumbnailItemViewProps[];\r\n}\r\n\r\n/**\r\n * IMediaGalleryThumbnailItemViewProps Interface.\r\n */\r\nexport interface IMediaGalleryThumbnailItemViewProps {\r\n ThumbnailItemContainerProps: INodeProps;\r\n Picture: React.ReactElement;\r\n}\r\n\r\n/**\r\n * IMediaGalleryViewProps Interface.\r\n */\r\nexport interface IMediaGalleryViewProps extends IMfrmMediaGalleryProps {\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\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\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 private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\r\n private mediaGalleryImages: IImageData[] = [];\r\n private fallbackImage?: string;\r\n private _viewport: GridSize;\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: IMfrmMediaGalleryProps) {\r\n super(props);\r\n this._viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\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 isMobile:false,\r\n isVideoUrlExist:false\r\n };\r\n\r\n this._zoomedImageSettings = props.config.zoomedImageSettings ??\r\n props.config.galleryImageSettings ??\r\n 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 async componentDidMount(): Promise {\r\n this.setState({ isMobile: this.isMobile });\r\n const videoUrl= this.props.data.productSpecificationData.result?.find(attr => attr.Name?.trim() === \"ecom_video_urls\")?.TextValue;\r\n this.setState({isVideoUrlExist:(videoUrl && videoUrl.includes(\"https://www.youtube.com\")) ? true : false});\r\n const source = this.props.config.imageSource ?? imageSource.pageContext;\r\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\r\n this._setRenderType();\r\n if (source === imageSource.pageContext) {\r\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\r\n const images = await validateProductImages(\r\n this.props.data.mediaLocationsForSelectedVariant.result,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\r\n );\r\n this._setImages(images);\r\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\r\n const product = this.props.data.product.result;\r\n const images = await getValidProductImages(\r\n product.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n product.productVariant\r\n );\r\n\r\n this._setImages(images);\r\n } else {\r\n this._setImages([]);\r\n }\r\n\r\n reaction(\r\n () => {\r\n const product = this.props.data.product.result;\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n if (!shouldUpdateOnPartialDimensionSelection || ObjectExtensions.isNullOrUndefined(product.productVariant?.RecordId)) {\r\n return `${product.RecordId}`;\r\n }\r\n\r\n return `${product.RecordId}-${product.productVariant!.RecordId}`;\r\n },\r\n async () => {\r\n const product = this.props.data.product.result;\r\n if (product) {\r\n const images = await getValidProductImages(\r\n product.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\r\n );\r\n this._setImages(images);\r\n } else {\r\n this._setImages([]);\r\n }\r\n }\r\n );\r\n }\r\n\r\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\r\n const images = await validateProductImages(\r\n this.props.data.mediaLocations.result,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\r\n );\r\n this._setImages(images);\r\n }\r\n\r\n }\r\n @computed get isMobile(): boolean {\r\n return (this._viewport === 'xs' || this._viewport === 'sm');\r\n }\r\n\r\n\r\n public shouldComponentUpdate(nextProps: IMfrmMediaGalleryProps,\r\n 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 {\r\n id,\r\n config,\r\n resources\r\n } = 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.state.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 const viewProps: IMediaGalleryViewProps = {\r\n ...(this.props as IMfrmMediaGalleryProps),\r\n state: this.state,\r\n MediaGallery: {\r\n moduleProps: this.props,\r\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\r\n },\r\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\r\n callbackToggle: this.openModalDialog,\r\n callbackThumbnailClick: this._generateOnThumbnailClick,\r\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\r\n CarouselProps: {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items: mediaGalleryCarouselItems.items,\r\n activeIndex: this.state.activeIndex,\r\n next: this.next,\r\n previous: this.previous,\r\n interval: false,\r\n directionTextPrev: resources.previousScreenshotFlipperText,\r\n directionTextNext: resources.nextScreenshotFlipperText,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n showPaginationTooltip: showPaginationTooltip === true,\r\n indicatorAriaText: resources.ariaLabelForSlide,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting,\r\n key: mediaGalleryCarouselItems.keys\r\n } as IComponentNodeProps,\r\n Thumbnails: {\r\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\r\n SingleSlideCarouselComponentProps: {\r\n tag: SingleSlideCarousel,\r\n className: 'ms-media-gallery__thumbnails',\r\n vertical: isVertical,\r\n flipperPrevLabel: resources.previousScreenshotFlipperText,\r\n flipperNextLabel: resources.nextScreenshotFlipperText,\r\n parentId: id,\r\n useTabList: true,\r\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\r\n } as IComponentNodeProps,\r\n items: mediaGalleryThumbnailCarouselItems.items\r\n }\r\n };\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 /**\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\r\n private readonly goToIndex = (index: number): void => {\r\n this.setState({ activeIndex: index });\r\n };\r\n\r\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\r\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\r\n const items: IMediaGalleryThumbnailItemViewProps[] = [];\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 { items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)], keys: ['empty'] };\r\n }\r\n return { items: [], keys: [] };\r\n }\r\n mediaGalleryItems?.map((item: IImageData, index: number) => {\r\n if(item.altText === 'video Thumbnail' && item.src){\r\n items.push(this._getThumbnailItemForUrl(item.src, thumbnailImageSettings || this.defaultThumbnailImageSettings, index, this.state.activeIndex));\r\n }else{\r\n items.push(this._getThumbnailItem(item, thumbnailImageSettings || this.defaultThumbnailImageSettings, index, this.state.activeIndex));\r\n }\r\n });\r\n\r\n return {\r\n items,\r\n keys: [...items!.map((item,index) => index.toString())]\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 items: React.ReactNode[] = [];\r\n const galleryImageSettings = this.props.config.galleryImageSettings;\r\n if (galleryImageSettings) {\r\n galleryImageSettings.cropFocalRegion = true;\r\n }\r\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\r\n\r\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\r\n\r\n const videoUrl=this.props.data.productSpecificationData.result?.find(attr => attr.Name?.trim() === \"ecom_video_urls\")?.TextValue;\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 mediaGalleryItems?.map((item: IImageData, index: number) => {\r\n if(item.altText === 'video Thumbnail' && videoUrl && this.state.isVideoUrlExist){\r\n items.push(this._getVideoComponent(videoUrl, items.length, this.state.activeIndex, thumbnailImageSettings || this.defaultThumbnailImageSettings));\r\n }\r\n else{\r\n items.push(this._renderCarouselItemImageView(\r\n zoomView, item, galleryImageSettings ?? this.defaultGalleryImageSettings, index));\r\n }\r\n });\r\n return {\r\n items,\r\n keys: [...items!.map((item,index) =>index.toString() )]\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 const fallbackVideoThumbnailUrls = \"https://img.youtube.com,https://i.ytimg.com,http://i3.ytimg.com\";\r\n const { videoThumbnailUrlsConfig } = this.props.config;\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 const ecomVideoThumbnails = this.props.data.productSpecificationData.result?.find(attr => attr.Name?.trim() === \"ecom_video_thumbnails\")?.TextValue;\r\n const videoThumbnailUrls = videoThumbnailUrlsConfig ? videoThumbnailUrlsConfig : fallbackVideoThumbnailUrls;\r\n const videoThumbnailUrl = videoThumbnailUrls.split(',').find(url =>{\r\n return ecomVideoThumbnails?.includes(url);\r\n });\r\n const videoThumbnailImage:IImageData={\r\n src: videoThumbnailUrl && ecomVideoThumbnails?.includes(videoThumbnailUrl) ? ecomVideoThumbnails : '',\r\n altText:\"video Thumbnail\"\r\n };\r\n this.setState({\r\n mediaGalleryItems: (videoThumbnailImage && videoThumbnailImage.src)\r\n ? [...imagesToSet, ...curatedImage,videoThumbnailImage]\r\n : [...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 private _getThumbnailItemForUrl = (imageUrl: string, imageSettings: IImageSettings, index: number, modifiedActiveIndex: number): IMediaGalleryThumbnailItemViewProps => {\r\n const updatedModifiedActiveIndex = index;\r\n const thumbnailImageUrl = imageUrl.includes('https') ? imageUrl : imageUrl?.replace('http',\"https\");\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item product-video',\r\n modifiedActiveIndex === updatedModifiedActiveIndex ? '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': 'video thumbnail',\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

{this.props.resources.videoText}

\r\n \r\n )\r\n };\r\n };\r\n private _renderCarouselItemImageView(\r\n zoomView: string, image: IImageData, imageSettings: IImageSettings, index: number,\r\n isInPopup: boolean = false): React.ReactNode {\r\n\r\n if (this.state.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 (<>\r\n {this._getCarouselItem(image, imageSettings, index, isInPopup)}\r\n );\r\n\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 = !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 = (image: IImageData, imageSettings: IImageSettings, index: number, isInPopup: boolean = false): React.ReactNode => (\r\n \r\n );\r\n\r\n private readonly _getThumbnailItem = (image: IImageData, imageSettings: IImageSettings, index: number,\r\n modifiedActiveIndex: number): IMediaGalleryThumbnailItemViewProps => {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: index,\r\n 'aria-label': image.altText,\r\n 'aria-selected': modifiedActiveIndex === index,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n };\r\n\r\n /**\r\n * Ref Handler.\r\n * @param index -Remove item click function.\r\n * @returns Set inline zoom.\r\n */\r\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\r\n this._inlineZoomDivRef.set(index, divRef);\r\n };\r\n\r\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\r\n return (event: React.KeyboardEvent) => {\r\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n }\r\n };\r\n };\r\n\r\n private readonly _generateOnThumbnailClick = (index: number) => {\r\n return (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n };\r\n };\r\n\r\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n 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(\r\n event,\r\n 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) { // $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\r\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\r\n if (window.innerWidth <= 768) { // $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 const image: IImageData = {\r\n src:`${this.fallbackImage ? this.fallbackImage :'empty'}`,\r\n altText: 'no image available',\r\n fallBackSrc: this.fallbackImage\r\n };\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n private _getAllCarouselItems = () => {\r\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\r\n const videoUrl= this.props.data.productSpecificationData.result?.find(attr => attr.Name?.trim() === \"ecom_video_urls\")?.TextValue;\r\n const allItems: React.ReactNode[] = [];\r\n this.state.mediaGalleryItems?.map((item: IImageData, index: number) => {\r\n if(item.altText===\"video Thumbnail\" && videoUrl && this.state.isVideoUrlExist){\r\n allItems.push(this._getVideoComponent(videoUrl, allItems.length, this.state.activeIndex, thumbnailImageSettings || this.defaultThumbnailImageSettings));\r\n }\r\n else{\r\n allItems.push(this._getThumbnailItem(item, thumbnailImageSettings || this.defaultThumbnailImageSettings, index, this.state.activeIndex));\r\n }\r\n\r\n });\r\n return allItems;\r\n };\r\n private _getVideoComponent = (videoUrl: string, index: number, modifiedActiveIndex: number, imageSettings: IImageSettings) => {\r\n videoUrl = this.props.config.videoSrcQueryString ? videoUrl?.indexOf('?') === -1 ? `${videoUrl}?${this.props.config.videoSrcQueryString}` : `${videoUrl}&${this.props.config.videoSrcQueryString}` : videoUrl;\r\n // tslint:disable:react-iframe-missing-sandbox\r\n return (\r\n