{"version":3,"file":"static/js/d058cfd4cf6dd7a0fa3e.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