{"version":3,"file":"static/js/926d575a0fc71a1ef94a.bundle.js","mappings":"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","sources":["webpack://sgi-bookstore/./src/modules/sgi-quickview/utilities/get-valid-product-images.ts?ffb4","webpack://sgi-bookstore/./src/modules/sgi-quickview/sgi-quickview.tsx?8c0c","webpack://sgi-bookstore/./src/modules/sgi-quickview/utilities/get-product-details.ts?32e3","webpack://sgi-bookstore/./src/modules/sgi-quickview/sgi-quickview.view.tsx?fac5","webpack://sgi-bookstore/./lib/sgi-quickview/module-registration.js?025e","webpack://sgi-bookstore/external var \"React\"?0d3b","webpack://sgi-bookstore/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\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,\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(async 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 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\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. 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 { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\r\nimport { Carousel, ICarouselProps } from '@msdyn365-commerce/components';\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n ProductDeliveryOptions,\r\n ProductDimension,\r\n ProductDimensionValue,\r\n ProductPrice,\r\n ReleasedProductType,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n FinitePromiseQueue,\r\n FinitePromiseQueueError,\r\n getDeliveryOptionsForSelectedVariant,\r\n GetDeliveryOptionsForSelectedVariantInput,\r\n getDimensionsForSelectedVariant,\r\n GetDimensionsForSelectedVariantInput,\r\n getPriceForSelectedVariant,\r\n getProductAvailabilitiesForSelectedVariant,\r\n getProductPageUrlSync,\r\n getSelectedVariant,\r\n IProductInventoryInformation,\r\n IPromiseQueue,\r\n ISelectedProduct,\r\n ObjectExtensions,\r\n PriceForSelectedVariantInput,\r\n ProductAvailabilitiesForSelectedVariantInput,\r\n SelectedVariantInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IComponentNodeProps,\r\n IModuleProps,\r\n IncrementalQuantity,\r\n INodeProps,\r\n ISingleSlideCarouselProps,\r\n isMobile,\r\n ITelemetryContent,\r\n KeyCodes,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n ModalHeader,\r\n NodeTag,\r\n onTelemetryClick,\r\n SingleSlideCarousel,\r\n TelemetryConstant,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\r\nimport React, { ReactNode } from 'react';\r\nimport { getAttributeByName } from '../../themes/sgi-theme/views/Utilities/utility';\r\nimport {\r\n getBuyboxAddToCart,\r\n getBuyBoxInventoryLabel,\r\n getBuyboxKeyInPrice,\r\n getBuyboxProductAddToWishlist,\r\n getBuyboxProductDescription,\r\n getBuyboxProductPrice,\r\n getBuyboxProductRating,\r\n getBuyboxProductTitle,\r\n getBuyboxProductUnitOfMeasure,\r\n getQuantityLimitsMessages,\r\n RetailDefaultOrderQuantityLimitsFeatureName\r\n} from '../../common/buybox-components';\r\n\r\nimport {\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxAddToOrderTemplateViewProps,\r\n IBuyboxAddToWishlistViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonData,\r\n IBuyboxExtentedProps,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxState,\r\n IErrorState\r\n} from '@msdyn365-commerce-modules/buybox';\r\n\r\nimport { getBuyboxProductConfigure } from '../../common/buybox-product-configure';\r\nimport { ISgiQuickviewData } from './sgi-quickview.data';\r\nimport { ISgiQuickviewProps, ISgiQuickviewResources } from './sgi-quickview.props.autogenerated';\r\nimport { getProductDetails, IQuickViewData } from './utilities/get-product-details';\r\nimport { getValidProductImages } from './utilities/get-valid-product-images';\r\n\r\n/**\r\n * QuickView props Interface.\r\n */\r\nexport interface IQuickviewViewProps extends ISgiQuickviewProps {\r\n quickView: IModuleProps;\r\n quickViewButton: React.ReactNode;\r\n ModalContainer: IModuleProps;\r\n ModalHeaderContainer: INodeProps;\r\n ModalHeaderContent: React.ReactNode;\r\n ModalFooterContainer: INodeProps;\r\n ModalBodyContainer: INodeProps;\r\n cartContainerProps: INodeProps;\r\n state: IBuyboxState;\r\n ModuleProps?: IModuleProps;\r\n ProductInfoContainerProps: INodeProps;\r\n MediaGalleryContainerProps: INodeProps;\r\n callbacks?: IBuyboxCallbacks;\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n configure?: IBuyboxProductConfigureViewProps;\r\n inventoryLabel?: React.ReactNode;\r\n rating?: React.ReactNode;\r\n price?: React.ReactNode;\r\n addToCart?: IBuyboxAddToCartViewProps;\r\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps;\r\n addToWishlist?: IBuyboxAddToWishlistViewProps;\r\n max: number | undefined;\r\n keyInPrice?: IBuyboxKeyInPriceViewProps;\r\n quantity?: IBuyboxProductQuantityViewProps;\r\n quantityLimitsMessages?: React.ReactNode;\r\n CarouselProps: INodeProps;\r\n Thumbnails: IQuickViewThumbnailsViewProps;\r\n seeDetailsbutton: React.ReactNode;\r\n isModalOpen: boolean;\r\n loading?: React.ReactNode;\r\n unitOfMeasure?: React.ReactNode;\r\n productDetails?: IQuickViewData | undefined;\r\n isMobileDevice?: boolean;\r\n isAmazonPay?: boolean;\r\n renderAmazonPay?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * QuickView extend props Interface.\r\n */\r\nexport interface IQuickviewExtentedProps extends ISgiQuickviewProps {\r\n selectedProductId?: number;\r\n selectedDimensions?: ProductDimension[];\r\n}\r\n\r\n/**\r\n * QuickView thumbnails props Interface.\r\n */\r\nexport interface IQuickViewThumbnailsViewProps {\r\n ThumbnailsContainerProps: INodeProps;\r\n SingleSlideCarouselComponentProps: INodeProps;\r\n items?: IQuickViewThumbnailItemViewProps[];\r\n}\r\n\r\n/**\r\n * QuickView thumbnail item view props Interface.\r\n */\r\nexport interface IQuickViewThumbnailItemViewProps {\r\n ThumbnailItemContainerProps: INodeProps;\r\n Picture: React.ReactElement;\r\n}\r\n\r\n/**\r\n * QuickView state Interface.\r\n */\r\nexport interface IQuickViewState extends IBuyboxState {\r\n isDataLoaded: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Quickview component.\r\n * @extends {React.Component>}\r\n */\r\nclass Quickview extends React.Component, IQuickViewState> {\r\n /**\r\n * A queue of tasks of processing the changes in the dimensions.\r\n * Limit to two processes:\r\n * 1 - for the current process, which is under execution at the moment.\r\n * 2 - next process, which will process the latest version of data.\r\n * @remark Enqueueing new promises will discard the previous ones (except the one which is under processing).\r\n */\r\n private readonly dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(2);\r\n\r\n private dimensions: { [id: number]: string } = {};\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private productDetails: IQuickViewData | undefined;\r\n\r\n private readonly quickViewCallbacks: IBuyboxCallbacks = {\r\n updateQuantity: (newQuantity: number): boolean => {\r\n const errorState = { ...this.state.errorState };\r\n errorState.quantityError = undefined;\r\n errorState.otherError = undefined;\r\n\r\n this.setState({ quantity: newQuantity, errorState });\r\n return true;\r\n },\r\n updateErrorState: (newErrorState: IErrorState): void => {\r\n this.setState({ errorState: newErrorState });\r\n },\r\n updateSelectedProduct: (\r\n newSelectedProduct: Promise,\r\n newInventory: IProductInventoryInformation | undefined,\r\n newPrice: ProductPrice | undefined,\r\n newDeliveryOptions: ProductDeliveryOptions | undefined\r\n ): void => {\r\n this.setState({\r\n selectedProduct: newSelectedProduct,\r\n productAvailableQuantity: newInventory,\r\n productDeliveryOptions: newDeliveryOptions\r\n });\r\n this._updatePrice(newPrice);\r\n },\r\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\r\n this.dimensions[selectedDimensionId] = selectedDimensionValueId;\r\n return this.dimensionUpdateQueue\r\n .enqueue(async () => {\r\n return this._updateDimensions();\r\n })\r\n .catch((error: any) => {\r\n // Ignore discarded processes.\r\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\r\n throw error;\r\n }\r\n });\r\n },\r\n getDropdownName: (dimensionType: number, resources: ISgiQuickviewResources): string => {\r\n return this._getDropdownName(dimensionType, resources);\r\n },\r\n changeModalOpen: (isModalOpen: boolean): void => {\r\n this._hideQuickViewDialog();\r\n },\r\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\r\n this.setState({ isUpdatingDimension });\r\n },\r\n updateKeyInPrice: (customPrice: number): void => {\r\n // Remove custom amount error when updating the custom price\r\n const errorState = { ...this.state.errorState };\r\n errorState.customAmountError = undefined;\r\n\r\n this.setState({ isPriceKeyedIn: true, keyInPriceAmount: customPrice, errorState });\r\n this._updatePrice(this.state.productPrice, customPrice);\r\n }\r\n };\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 public constructor(props: ISgiQuickviewProps) {\r\n super(props);\r\n this.state = {\r\n modalOpen: false,\r\n quantity: 1,\r\n min: undefined,\r\n max: undefined,\r\n errorState: {\r\n configureErrors: {}\r\n },\r\n selectedProduct: undefined,\r\n productPrice: undefined,\r\n productDeliveryOptions: undefined,\r\n isUpdatingDimension: false,\r\n activeIndex: 0,\r\n animating: false,\r\n mediaGalleryItems: undefined,\r\n isDataLoaded: false\r\n };\r\n\r\n this._quickViewCloseButtonclick = this._quickViewCloseButtonclick.bind(this);\r\n this.telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n }\r\n\r\n /**\r\n * React should component udpate function.\r\n * @param nextProps - Next Props.\r\n * @param nextState - Next State.\r\n * @returns Boolean - Whether the module will rerender or not.\r\n */\r\n public shouldComponentUpdate(nextProps: ISgiQuickviewProps, nextState: IBuyboxState): 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 | null {\r\n const {\r\n config: { className = '' },\r\n resources\r\n } = this.props;\r\n const { max } = this.state;\r\n const product = this.productDetails?.product ? this.productDetails.product : undefined;\r\n const props = this.props as IBuyboxExtentedProps;\r\n const defaultMinimumKeyInPrice = 10;\r\n const defaultMaximumKeyInPrice = 100;\r\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\r\n const amazonBuyAttrBasedURL: string | undefined =\r\n (this.productDetails &&\r\n this.productDetails?.attributes &&\r\n getAttributeByName(this.productDetails?.attributes, this.props.context.app.config.amazonBuyAttrKeyName)?.TextValue) ??\r\n undefined;\r\n const viewprops: IQuickviewViewProps = {\r\n ...(this.props as IQuickviewExtentedProps),\r\n state: this.state,\r\n productDetails: this.productDetails,\r\n isModalOpen: this.state.modalOpen!,\r\n quickView: {\r\n moduleProps: this.props,\r\n className: classnames('ms-quickView', className),\r\n tag: 'div'\r\n },\r\n isMobileDevice,\r\n quickViewButton: (\r\n \r\n ),\r\n ModalContainer: {\r\n moduleProps: this.props,\r\n tag: Modal,\r\n className: 'ms-quickView__dialog',\r\n isOpen: this.state.modalOpen,\r\n 'aria-label': format(resources.quickViewAriaLabel, this.productDetails?.product?.Name),\r\n toggle: this._quickViewCloseButtonclick,\r\n modalTransition: { timeout: 0 },\r\n shouldUpdateFocusToFirstElement: this.state.isDataLoaded\r\n },\r\n ModalHeaderContainer: {\r\n tag: ModalHeader,\r\n className: 'ms-quickView__header',\r\n toggle: this._quickViewCloseButtonclick\r\n },\r\n ModalFooterContainer: {\r\n tag: ModalFooter,\r\n className: 'ms-quickView__footer'\r\n },\r\n ModalHeaderContent: '',\r\n ModalBodyContainer: {\r\n tag: ModalBody,\r\n className: 'ms-quickView__body'\r\n },\r\n cartContainerProps: {\r\n className: 'ms-quickView__product-add-to-cart'\r\n },\r\n ProductInfoContainerProps: {\r\n className: 'ms-quickView__content'\r\n },\r\n MediaGalleryContainerProps: {\r\n className: 'ms-quickView__media-gallery'\r\n },\r\n seeDetailsbutton: this._renderSeeDetailButton(product),\r\n loading: !this.state.isDataLoaded && (\r\n \r\n ),\r\n callbacks: this.quickViewCallbacks,\r\n title: this.state.isDataLoaded && getBuyboxProductTitle(props, this.productDetails),\r\n description: this.state.isDataLoaded && getBuyboxProductDescription(props, this.productDetails),\r\n configure: this.state.isDataLoaded\r\n ? getBuyboxProductConfigure(props, this.state, this.quickViewCallbacks, this.productDetails, this.props.selectedDimensions)\r\n : undefined,\r\n price: this.state.isDataLoaded && getBuyboxProductPrice(props, this.state),\r\n unitOfMeasure: this.state.isDataLoaded && getBuyboxProductUnitOfMeasure(props, this.productDetails),\r\n rating:\r\n this.state.isDataLoaded && !this.props.context.app.config.hideRating && getBuyboxProductRating(props, this.productDetails),\r\n addToCart: this.state.isDataLoaded\r\n ? getBuyboxAddToCart(\r\n props,\r\n this.state,\r\n this.quickViewCallbacks,\r\n defaultMinimumKeyInPrice,\r\n defaultMaximumKeyInPrice,\r\n this.productDetails\r\n )\r\n : undefined,\r\n keyInPrice:\r\n this.state.isDataLoaded && this.props.config.enableKeyInPrice && this.state.isCustomPriceSelected\r\n ? getBuyboxKeyInPrice(props, this.state, this.quickViewCallbacks)\r\n : undefined,\r\n quantity: product?.IsGiftCard ? undefined : this._renderQuantity(this.props, this.state, this.quickViewCallbacks),\r\n inventoryLabel: this.state.isDataLoaded && getBuyBoxInventoryLabel(props, this.productDetails),\r\n addToWishlist: this.state.isDataLoaded\r\n ? getBuyboxProductAddToWishlist(props, this.state, this.quickViewCallbacks, this.productDetails)\r\n : undefined,\r\n quantityLimitsMessages: this.state.isDataLoaded && getQuantityLimitsMessages(props, this.state),\r\n max,\r\n CarouselProps: this._renderCarousel(),\r\n Thumbnails: this._renderThumbnails(),\r\n isAmazonPay: this.isAmazonPay(amazonBuyAttrBasedURL),\r\n renderAmazonPay: this.renderAmazonBuy(amazonBuyAttrBasedURL)\r\n };\r\n\r\n return this.props.renderView(viewprops) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Method to render detail button on quick view.\r\n * @param product - Simple product object.\r\n * @returns JSX element.\r\n */\r\n private readonly _renderSeeDetailButton = (product: SimpleProduct | undefined): JSX.Element => {\r\n const { config } = this.props;\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.seeDetails, '');\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n\r\n return (\r\n \r\n {config.seeDetailsLinkText}\r\n \r\n );\r\n };\r\n\r\n /**\r\n * Method to return carousel.\r\n * @returns Node props.\r\n */\r\n private readonly _renderCarousel = (): INodeProps => {\r\n const { config, resources } = this.props;\r\n let mediaGalleryItems: ReactNode[];\r\n let keys: (string | undefined)[];\r\n const galleryImageSettings = config.galleryImageSettings;\r\n if (galleryImageSettings) {\r\n galleryImageSettings.cropFocalRegion = true;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(this.state.mediaGalleryItems)) {\r\n mediaGalleryItems = this.state.mediaGalleryItems.map((item: IImageData, index: number) => {\r\n return this._renderCarouselItemImageView(item, galleryImageSettings || this.defaultGalleryImageSettings, index);\r\n });\r\n keys = [...this.state.mediaGalleryItems.map(item => item.src)];\r\n } else {\r\n mediaGalleryItems = [this._renderEmptyImage(galleryImageSettings)];\r\n keys = ['empty'];\r\n }\r\n\r\n const props: IComponentNodeProps = {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items: mediaGalleryItems,\r\n activeIndex: this.state.activeIndex ?? 0,\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 indicatorAriaText: resources.ariaLabelForSlide,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting,\r\n key: keys\r\n };\r\n\r\n return props;\r\n };\r\n\r\n /**\r\n * Method to render thumbnails.\r\n * @returns QuickView Thumbnails view props.\r\n */\r\n private readonly _renderThumbnails = (): IQuickViewThumbnailsViewProps => {\r\n const { config, id, resources } = this.props;\r\n\r\n const thumbnailImageSettings = config.thumbnailImageSettings;\r\n if (thumbnailImageSettings) {\r\n thumbnailImageSettings.cropFocalRegion = true;\r\n }\r\n\r\n let mediaGalleryItems: IQuickViewThumbnailItemViewProps[];\r\n let keys: (string | undefined)[];\r\n if (ArrayExtensions.hasElements(this.state.mediaGalleryItems)) {\r\n mediaGalleryItems = this.state.mediaGalleryItems.map((item: IImageData, index: number) => {\r\n return this._getThumbnailItem(\r\n item,\r\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n index,\r\n this.state.activeIndex!\r\n );\r\n });\r\n keys = [...this.state.mediaGalleryItems.map(item => item.src)];\r\n } else {\r\n mediaGalleryItems = [];\r\n keys = [];\r\n }\r\n\r\n return {\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 flipperPrevLabel: resources.previousScreenshotFlipperText,\r\n flipperNextLabel: resources.nextScreenshotFlipperText,\r\n parentId: id,\r\n useTabList: true,\r\n key: JSON.stringify(keys)\r\n } as IComponentNodeProps,\r\n items: mediaGalleryItems\r\n };\r\n };\r\n\r\n private _updateMediaItems(lastUpdatedTime: number): void {\r\n const product = this.productDetails?.product;\r\n if (!this.state.mediaGalleryItems && product?.PrimaryImageUrl) {\r\n this.setState({\r\n mediaGalleryItems: [this._mapProductToImageData(product)],\r\n lastUpdate: lastUpdatedTime\r\n });\r\n }\r\n }\r\n\r\n private _updatePrice(newPrice: ProductPrice | undefined, customPrice: number | undefined = this.state.keyInPriceAmount): void {\r\n if (this.state.isCustomPriceSelected && newPrice) {\r\n newPrice.CustomerContextualPrice = customPrice;\r\n }\r\n this.setState({ productPrice: newPrice });\r\n }\r\n\r\n private readonly _updateDimensions = async (): Promise => {\r\n const {\r\n context: {\r\n actionContext,\r\n request: {\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = this.props;\r\n\r\n const { product, productDimensions } = this.productDetails!;\r\n\r\n if (!product || !productDimensions) {\r\n return;\r\n }\r\n\r\n const dimensionsToUpdate: { [id: number]: string } = { ...this.dimensions };\r\n this.setState({ isUpdatingDimension: true });\r\n\r\n // Step 1: Clear error state to display relevant errors\r\n if (this.state.errorState.otherError || this.state.errorState.quantityError) {\r\n const clearErrorState = { ...this.state.errorState };\r\n clearErrorState.otherError = undefined;\r\n if (this.state.errorState.errorHost === 'ADDTOCART') {\r\n clearErrorState.quantityError = undefined;\r\n clearErrorState.errorHost = undefined;\r\n }\r\n this.setState({ errorState: clearErrorState });\r\n }\r\n\r\n // Step 2: Clear any errors indicating the dimension wasn't selected\r\n for (const key of Object.keys(dimensionsToUpdate)) {\r\n if (this.state.errorState.configureErrors[key]) {\r\n const errorState = { ...this.state.errorState };\r\n errorState.configureErrors[key] = undefined;\r\n\r\n this.setState({ errorState });\r\n }\r\n }\r\n\r\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\r\n // over the information in data\r\n const mappedDimensions = productDimensions\r\n .map(dimension => {\r\n return {\r\n DimensionTypeValue: dimension.DimensionTypeValue,\r\n DimensionValue:\r\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) || dimension.DimensionValue,\r\n ExtensionProperties: dimension.ExtensionProperties\r\n };\r\n })\r\n .filter(dimension => {\r\n return dimension && dimension.DimensionValue;\r\n });\r\n\r\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\r\n // so that places like add to cart can await it\r\n const selectedProduct = new Promise(async resolve => {\r\n const newProduct = await getSelectedVariant(\r\n new SelectedVariantInput(\r\n product.MasterProductId ? product.MasterProductId : product.RecordId,\r\n channelId,\r\n mappedDimensions,\r\n undefined,\r\n this.props.context.request\r\n ),\r\n actionContext\r\n );\r\n if (newProduct) {\r\n // @ts-expect-error\r\n this.productDetails.productDimensions = await getDimensionsForSelectedVariant(\r\n new GetDimensionsForSelectedVariantInput(\r\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\r\n channelId,\r\n mappedDimensions,\r\n this.props.context.request\r\n ),\r\n actionContext\r\n );\r\n }\r\n\r\n resolve(newProduct);\r\n });\r\n\r\n this.setState({ selectedProduct });\r\n const variantProduct = await selectedProduct;\r\n\r\n if (variantProduct && this.productDetails) {\r\n // Step 5. Use these dimensions hydrate the inventory. Wrap this in a promise\r\n // so that places like add to cart can await it\r\n this.productDetails.product = variantProduct;\r\n const images = await getValidProductImages(\r\n this.productDetails.product.RecordId || 0,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings || this.defaultThumbnailImageSettings,\r\n variantProduct.productVariant ?? variantProduct\r\n );\r\n this.setState({\r\n mediaGalleryItems: [...images],\r\n activeIndex: 0,\r\n lastUpdate: Date.now()\r\n });\r\n\r\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(\r\n new ProductAvailabilitiesForSelectedVariantInput(variantProduct.RecordId, channelId),\r\n actionContext\r\n );\r\n\r\n this.productDetails.productAvailableQuantity = newAvailableQuantity!;\r\n\r\n const isCustompriceSelected = variantProduct.Dimensions?.find(\r\n dimension => dimension.DimensionTypeValue === 4 && dimension.DimensionValue?.Value?.toLowerCase() === 'custom'\r\n );\r\n\r\n if (isCustompriceSelected) {\r\n this.setState({ isCustomPriceSelected: true });\r\n } else {\r\n // Remove custom amount error when unselect the custom amount\r\n const errorState = { ...this.state.errorState };\r\n errorState.customAmountError = undefined;\r\n\r\n this.setState({ isCustomPriceSelected: false, isPriceKeyedIn: false, errorState });\r\n }\r\n\r\n if (newAvailableQuantity && newAvailableQuantity.length > 0) {\r\n this.setState({ productAvailableQuantity: newAvailableQuantity[0] });\r\n } else {\r\n this.setState({ productAvailableQuantity: undefined });\r\n }\r\n\r\n // Step 6. Use these dimensions hydrate the product price.\r\n const newPrice = await getPriceForSelectedVariant(\r\n new PriceForSelectedVariantInput(variantProduct.RecordId, channelId),\r\n actionContext\r\n );\r\n\r\n if (newPrice) {\r\n this._updatePrice(newPrice);\r\n }\r\n\r\n const RetailMulitplePickupMFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n );\r\n\r\n // Step 7. Use these dimensions hydrate the product delivery options.\r\n const newDeliveryOptions = await getDeliveryOptionsForSelectedVariant(\r\n new GetDeliveryOptionsForSelectedVariantInput(\r\n variantProduct.RecordId,\r\n channelId,\r\n undefined,\r\n undefined,\r\n RetailMulitplePickupMFeatureState?.IsEnabled\r\n ),\r\n actionContext\r\n );\r\n\r\n if (newDeliveryOptions) {\r\n this.setState({ productDeliveryOptions: newDeliveryOptions });\r\n }\r\n\r\n this.setState({ isUpdatingDimension: false });\r\n await this._updateQuantitiesInState(variantProduct);\r\n }\r\n };\r\n\r\n private _getProductURL(product: SimpleProduct | undefined): string {\r\n if (product) {\r\n let producturl = ' ';\r\n producturl = getProductPageUrlSync(\r\n product.Name || '',\r\n product.RecordId,\r\n this.props.context && this.props.context.actionContext,\r\n undefined\r\n );\r\n return producturl;\r\n }\r\n return '';\r\n }\r\n\r\n private async _updateQuantitiesInState(product: SimpleProduct): Promise {\r\n const isOrderQuantityLimitsFeatureEnabled = await this._isOrderQuantityLimitsFeatureEnabled();\r\n const defaultQuantity = 1;\r\n const defaultMaxQuantity = 10;\r\n if (isOrderQuantityLimitsFeatureEnabled && product) {\r\n // For some of the products the DefaultQuantity is zero\r\n this.setState({\r\n min: product.Behavior?.MinimumQuantity || defaultQuantity,\r\n\r\n // If max by feature in default order settings is not defined then use max from site settings or default max 10.\r\n max:\r\n product.Behavior?.MaximumQuantity && product.Behavior?.MaximumQuantity > 0\r\n ? product.Behavior?.MaximumQuantity\r\n : this.props.context.app.config.maxQuantityForCartLineItem || defaultMaxQuantity\r\n });\r\n } else {\r\n this.setState({\r\n min: 1,\r\n max: this.props.context.app.config.maxQuantityForCartLineItem || 10\r\n });\r\n }\r\n }\r\n\r\n private readonly _updateDimensionValue = (\r\n productDimensionFull: ProductDimensionFull,\r\n newValueId: string | undefined\r\n ): ProductDimensionValue | undefined => {\r\n if (newValueId && productDimensionFull.DimensionValues) {\r\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n private readonly _getDropdownName = (dimensionType: number, resources: ISgiQuickviewResources): string => {\r\n const isGiftCard = this.productDetails?.product?.IsGiftCard;\r\n\r\n switch (dimensionType) {\r\n case 1: // ProductDimensionType.Color\r\n return resources.productDimensionTypeColor;\r\n case 2: // ProductDimensionType.Configuration\r\n return resources.productDimensionTypeConfiguration;\r\n case 3: // ProductDimensionType.Size\r\n return resources.productDimensionTypeSize;\r\n case 4: // ProductDimensionType.Style\r\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n private async _isOrderQuantityLimitsFeatureEnabled(): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context.request.app.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return false;\r\n }\r\n\r\n const featureStatuses = await this.props.data.featureState;\r\n const isFeatureEnabledInHq = featureStatuses.find(featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName)\r\n ?.IsEnabled;\r\n if (!isFeatureEnabledInHq) {\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return true;\r\n }\r\n let customerInfo;\r\n try {\r\n customerInfo = await this.props.data.customerInformation;\r\n } catch (error) {\r\n this.props.telemetry.information(error);\r\n this.props.telemetry.debug('Unable to receive Customer Information. May be user is not authorized');\r\n return false;\r\n }\r\n\r\n return (\r\n customerInfo !== undefined &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\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 private readonly next = (): void => {\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\r\n private readonly previous = (): void => {\r\n const nextIndex = this.isFirstItem()\r\n ? this.state.mediaGalleryItems\r\n ? this.state.mediaGalleryItems.length - 1\r\n : 0\r\n : this.state.activeIndex! - 1;\r\n this.goToIndex(nextIndex);\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 _renderCarouselItemImageView(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n return <>{this._getCarouselItem(image, imageSettings, index)};\r\n }\r\n\r\n private readonly _getCarouselItem = (image: IImageData, imageSettings: IImageSettings, index: number): 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 ): IQuickViewThumbnailItemViewProps => {\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 };\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 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 this.goToIndex(index);\r\n };\r\n };\r\n\r\n private _mapProductToImageData(product: SimpleProduct): IImageData {\r\n return {\r\n src: product.PrimaryImageUrl || '',\r\n altText: product.Name\r\n };\r\n }\r\n\r\n private readonly isFirstItem = () => this.state.activeIndex === 0;\r\n\r\n private readonly isLastItem = () => this.state.mediaGalleryItems && this.state.activeIndex === this.state.mediaGalleryItems.length - 1;\r\n\r\n private readonly onClickHandler = async (event: React.MouseEvent) => {\r\n return this._onClick(event, this.props);\r\n };\r\n\r\n private readonly _onClick = async (_event: React.MouseEvent, props: IQuickviewExtentedProps) => {\r\n if (!ObjectExtensions.isNullOrUndefined(props.selectedProductId)) {\r\n const {\r\n context: {\r\n actionContext,\r\n request: {\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = this.props;\r\n\r\n if (this.props.selectedProductId) {\r\n this.setState({ modalOpen: true });\r\n const productId = this.props.selectedProductId;\r\n const selectedDimensions = this.props.selectedDimensions;\r\n this.productDetails = await getProductDetails(productId, channelId, actionContext, selectedDimensions);\r\n const { product, productPrice } = this.productDetails;\r\n const currentTime: number = Date.now();\r\n this._updateMediaItems(currentTime);\r\n if (productPrice) {\r\n this._updatePrice(productPrice);\r\n }\r\n\r\n if (product) {\r\n // Check if the product is service or not by product type\r\n if (product.ItemTypeValue === ReleasedProductType.Service) {\r\n this.setState({ isServiceItem: true });\r\n }\r\n await this._updateQuantitiesInState(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 product.productVariant ?? product\r\n );\r\n\r\n this.setState({\r\n mediaGalleryItems: [...images],\r\n activeIndex: 0,\r\n lastUpdate: currentTime\r\n });\r\n }\r\n this.setState({ isDataLoaded: true });\r\n }\r\n }\r\n };\r\n\r\n private readonly _quickViewCloseButtonclick = () => {\r\n this._hideQuickViewDialog();\r\n };\r\n\r\n private _hideQuickViewDialog(): void {\r\n this.dimensions = [];\r\n this.setState({\r\n modalOpen: false,\r\n quantity: 1,\r\n min: undefined,\r\n max: undefined,\r\n errorState: {\r\n configureErrors: {}\r\n },\r\n selectedProduct: undefined,\r\n productPrice: undefined,\r\n productDeliveryOptions: undefined,\r\n isUpdatingDimension: false,\r\n productAvailableQuantity: undefined,\r\n lastUpdate: undefined,\r\n activeIndex: undefined,\r\n animating: undefined,\r\n mediaGalleryItems: [],\r\n isDataLoaded: false\r\n });\r\n }\r\n\r\n /**\r\n * Quantity Change Handler.\r\n * @param callbacks -Buybox callbacks.\r\n * @returns Update quantity.\r\n */\r\n private readonly onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\r\n if (callbacks.updateQuantity) {\r\n return callbacks.updateQuantity(newValue);\r\n }\r\n return true;\r\n };\r\n\r\n private readonly _renderQuantity = (\r\n props: IQuickviewExtentedProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n ): IBuyboxProductQuantityViewProps => {\r\n const { resources } = props;\r\n\r\n const {\r\n quantity,\r\n max,\r\n errorState: { quantityError }\r\n } = state;\r\n\r\n return {\r\n ContainerProps: {\r\n className: 'ms-quickView__quantity'\r\n },\r\n LabelContainerProps: {\r\n tag: 'label',\r\n className: 'ms-quickView__product-quantity-label',\r\n htmlFor: 'ms-quickView__product-quantity-input'\r\n },\r\n heading:
{resources.productQuantityHeading}
,\r\n errors: quantityError && (\r\n \r\n \r\n ),\r\n input: (\r\n \r\n )\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 private isAmazonPay = (amazonURL: string | undefined): boolean => {\r\n return amazonURL ? true : false;\r\n };\r\n\r\n private renderAmazonBuy = (amazonURL: string | undefined): JSX.Element | undefined => {\r\n if (amazonURL) {\r\n return (\r\n \r\n {this.props.config.amazonBuyBtnText || this.props.resources.amazonBuyBtnTextValue}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return undefined;\r\n };\r\n}\r\nexport default Quickview;\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 { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartStateData, GetCartStateDataInput } from '@msdyn365-commerce/global-state';\r\nimport { AttributeValue, ProductDimension } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getDimensionsForSelectedVariant,\r\n GetDimensionsForSelectedVariantInput,\r\n getPriceForSelectedVariant,\r\n getProductAvailabilitiesForSelectedVariant,\r\n getRatingsSummary,\r\n GetRatingsSummaryInput,\r\n getRnrEndpointId,\r\n getRnrPartnerId,\r\n getSelectedVariant,\r\n PriceForSelectedVariantInput,\r\n ProductAvailabilitiesForSelectedVariantInput,\r\n SelectedVariantInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\nimport { IProductDetails } from '@msdyn365-commerce-modules/buybox';\r\n\r\nexport interface IQuickViewData extends IProductDetails {\r\n attributes?: AttributeValue[];\r\n}\r\n/**\r\n * Calls the Retail API and returns the product details.\r\n * @param productId\r\n * @param channelId\r\n * @param ctx\r\n * @param selectedDimensions - Dimensions previously selected for the product variant.\r\n */\r\nexport async function getProductDetails(\r\n productId: number,\r\n channelId: number,\r\n ctx: IActionContext,\r\n selectedDimensions?: ProductDimension[]\r\n): Promise {\r\n const productDetails: IQuickViewData = {};\r\n\r\n if (productId > 0 && channelId > 0) {\r\n const tenantId = getRnrPartnerId(ctx);\r\n const serviceEndPoint = getRnrEndpointId(ctx);\r\n\r\n // Get Product Details\r\n await getSelectedVariant(new SelectedVariantInput(productId, channelId, selectedDimensions, 'get', ctx.requestContext), ctx)\r\n .then(async productResult => {\r\n if (productResult) {\r\n productDetails.product = productResult;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n await getAttributeValuesAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: {}\r\n },\r\n Number(productDetails.product?.RecordId),\r\n ctx.requestContext.apiSettings.channelId,\r\n ctx.requestContext.apiSettings.catalogId\r\n )\r\n .then(async productAttributes => {\r\n if (productAttributes) {\r\n productDetails.attributes = productAttributes;\r\n console.log('productAttributesproductAttributes', productAttributes);\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n // Get Product Availability\r\n await getProductAvailabilitiesForSelectedVariant(new ProductAvailabilitiesForSelectedVariantInput(productId, channelId), ctx)\r\n .then(productAvailabilities => {\r\n if (productAvailabilities) {\r\n productDetails.productAvailableQuantity = productAvailabilities;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get Product Price\r\n await getPriceForSelectedVariant(new PriceForSelectedVariantInput(productId, channelId, undefined), ctx)\r\n .then(productPrice => {\r\n if (productPrice) {\r\n productDetails.productPrice = productPrice;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get product dimensions\r\n await getDimensionsForSelectedVariant(\r\n new GetDimensionsForSelectedVariantInput(productId, channelId, selectedDimensions, ctx.requestContext),\r\n ctx\r\n )\r\n .then(productDimensions => {\r\n if (productDimensions) {\r\n productDetails.productDimensions = productDimensions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get Cart State\r\n await getCartStateData(new GetCartStateDataInput(ctx.requestContext.apiSettings, ctx.requestContext), ctx)\r\n .then(cartState => {\r\n productDetails.cart = cartState;\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get Product Ratings\r\n if (tenantId && serviceEndPoint) {\r\n await getRatingsSummary(new GetRatingsSummaryInput(productId.toString(), tenantId, serviceEndPoint), ctx)\r\n .then(ratingsSummaryData => {\r\n if (ratingsSummaryData) {\r\n productDetails.ratingsSummary = ratingsSummaryData;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n }\r\n }\r\n\r\n return productDetails;\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\nimport { AddToWishlistComponent, IWishlistActionErrorResult } from '@msdyn365-commerce/components';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getConfigureErrors,\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonResources,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxState\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport { IQuickviewViewProps } from './sgi-quickview';\r\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ISgiQuickviewProps as IQuickviewPropsExtend } from './sgi-quickview.props.autogenerated';\r\n\r\n/**\r\n * RenderAddToCart.\r\n * @param addToCart - AddToCart.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, errorBlock, button } = addToCart;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {button}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToWishlistFailed = (\r\n callbacks: IBuyboxCallbacks | undefined,\r\n resources: IBuyboxCommonResources,\r\n product: SimpleProduct | undefined\r\n) => (result: IWishlistActionErrorResult) => {\r\n callbacks?.updateErrorState({\r\n errorHost: 'WISHLIST',\r\n configureErrors:\r\n result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox viewprops.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @param product - Product data.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddtoWishlistButton = (\r\n props: IQuickviewViewProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks | undefined,\r\n product: SimpleProduct\r\n): React.ReactNode => {\r\n const { context, resources } = props;\r\n const wishlists = props.data.wishlists.result;\r\n const isShowWishlitButtonText = true;\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox viewprops.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToWishlist = (\r\n props: IQuickviewViewProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks | undefined\r\n): JSX.Element | null => {\r\n const product = props.productDetails?.product;\r\n if (!props.addToWishlist || !product) {\r\n return null;\r\n }\r\n\r\n const wishlistButton = renderAddtoWishlistButton(props, state, callbacks, product);\r\n return (\r\n \r\n {props.addToWishlist.errorBlock}\r\n {wishlistButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderQuantity.\r\n * @param quantity - Quantity.\r\n * @param quantityLimitsMessages - QuantityLimitsMessages.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuantity = (\r\n quantity: IBuyboxProductQuantityViewProps,\r\n quantityLimitsMessages: React.ReactNode,\r\n props: IQuickviewViewProps\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, LabelContainerProps, heading, input, errors } = quantity;\r\n const { unitOfMeasure } = props;\r\n\r\n return (\r\n \r\n {heading}\r\n {input}\r\n {unitOfMeasure}\r\n {quantityLimitsMessages}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * KenderKeyInPrice.\r\n * @param keyInPrice - KeyInPrice.\r\n * @returns -- Returns.\r\n */\r\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\r\n\r\n return (\r\n \r\n {heading}\r\n {input}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigureDropdown.\r\n * @param dropdown - Buybox product configure dropdown view props.\r\n * @returns -- Returns JSX.Element.\r\n */\r\nconst renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\r\n\r\n return (\r\n \r\n {heading}\r\n {select}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigure.\r\n * @param configure - Buybox product configure view props.\r\n * @returns -- Returns JSX.Element.\r\n */\r\nconst renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\r\n const { ContainerProps, dropdowns } = configure;\r\n\r\n return {dropdowns.map(renderConfigureDropdown)};\r\n};\r\n\r\n/**\r\n * RenderBodyContent.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderBodyContent = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>): JSX.Element => {\r\n const {\r\n price,\r\n keyInPrice,\r\n quantity,\r\n inventoryLabel,\r\n quantityLimitsMessages,\r\n loading,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n ProductInfoContainerProps,\r\n MediaGalleryContainerProps,\r\n CarouselProps,\r\n addToWishlist,\r\n configure,\r\n callbacks,\r\n state,\r\n isAmazonPay\r\n } = props;\r\n if (loading) {\r\n return <>{loading};\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.resources.priceText}\r\n {price}\r\n \r\n {addToWishlist && renderAddToWishlist(props, state, callbacks)}\r\n \r\n {configure && renderConfigure(configure)}\r\n {keyInPrice && renderKeyInPrice(keyInPrice)}\r\n {!isAmazonPay && quantity && renderQuantity(quantity, quantityLimitsMessages, props)}\r\n {inventoryLabel}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderQuickViewPopup.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuickViewPopup = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const {\r\n ModalContainer,\r\n ModalHeaderContainer,\r\n ModalFooterContainer,\r\n ModalHeaderContent,\r\n ModalBodyContainer,\r\n addToCart,\r\n cartContainerProps,\r\n seeDetailsbutton,\r\n isAmazonPay,\r\n renderAmazonPay\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {ModalHeaderContent}\r\n \r\n {props.title}\r\n {!props.loading && !StringExtensions.isNullOrEmpty(props.state.productPrice?.ItemId) ? (\r\n \r\n {props.resources.skuText}\r\n {props.state.productPrice?.ItemId}\r\n \r\n ) : (\r\n ''\r\n )}\r\n {props.rating}\r\n \r\n \r\n {renderBodyContent(props)}\r\n \r\n \r\n {!isAmazonPay && addToCart && seeDetailsbutton}\r\n {isAmazonPay && addToCart && seeDetailsbutton}\r\n {!isAmazonPay && addToCart && renderAddToCart(addToCart)}\r\n {isAmazonPay && renderAmazonPay}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Functional component which renders quick view button and popup based by the given props file.\r\n * @param props - Configuration for the quick view component.\r\n * @returns - Functional component of the quick view.\r\n */\r\nexport const QuickViewFunctionalComponent: React.FC> = (\r\n props: IQuickviewViewProps & IQuickviewPropsExtend<{}>\r\n) => {\r\n const { quickView, quickViewButton, isModalOpen } = props;\r\n const quickViewUpdatedProps: IModuleProps = { ...quickView, title: props.resources.quickViewbuttonText };\r\n return (\r\n \r\n {quickViewButton}\r\n {isModalOpen && renderQuickViewPopup(props)}\r\n \r\n );\r\n};\r\n\r\nexport default QuickViewFunctionalComponent;\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['sgi-quickview'] = {\n c: () => require('partner/modules/sgi-quickview/sgi-quickview.tsx'),\n $type: 'containerModule',\n da: [{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'sgi-quickview',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/sgi-quickview'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\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|sgi-quickview|sgi-quickview'] = {\n c: () => require('partner/modules/sgi-quickview/sgi-quickview.view.tsx'),\n cn: '__local__-__local__-sgi-quickview'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["async","getValidProductImages","productId","channelId","actionContext","imageSettings","selectedProduct","catalogId","getCatalogId","requestContext","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","then","mediaLocations","Promise","all","map","mediaLocation","imageData","src","Uri","altText","AltText","resolve","http","XMLHttpRequest","open","addEventListener","status","send","_unused","validateMediaLocaionAsync","pairs","filter","pair","catch","error","telemetry","exception","debug","Quickview","React","constructor","props","super","dimensionUpdateQueue","FinitePromiseQueue","dimensions","quickViewCallbacks","updateQuantity","newQuantity","errorState","_objectSpread","this","state","quantityError","undefined","otherError","setState","quantity","updateErrorState","newErrorState","updateSelectedProduct","newSelectedProduct","newInventory","newPrice","newDeliveryOptions","productAvailableQuantity","productDeliveryOptions","_updatePrice","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","resources","_getDropdownName","changeModalOpen","isModalOpen","_hideQuickViewDialog","changeUpdatingDimension","isUpdatingDimension","updateKeyInPrice","customPrice","customAmountError","isPriceKeyedIn","keyInPriceAmount","productPrice","defaultGalleryImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","cropFocalRegion","defaultThumbnailImageSettings","_renderSeeDetailButton","product","config","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","seeDetails","attributes","getTelemetryAttributes","Button","Object","assign","className","onClick","onTelemetryClick","seeDetailsLinkText","href","_getProductURL","_renderCarousel","_this$state$activeInd","mediaGalleryItems","keys","galleryImageSettings","ArrayExtensions","hasElements","item","index","_renderCarouselItemImageView","_renderEmptyImage","tag","Carousel","items","activeIndex","next","previous","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","indicatorAriaText","ariaLabelForSlide","onIndicatorsClickHandler","goToIndex","handleOnExited","onExited","handleOnExiting","onExiting","key","_renderThumbnails","id","thumbnailImageSettings","_getThumbnailItem","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","context","request","apiSettings","productDimensions","productDetails","dimensionsToUpdate","clearErrorState","errorHost","configureErrors","mappedDimensions","dimension","DimensionTypeValue","DimensionValue","_updateDimensionValue","ExtensionProperties","newProduct","getSelectedVariant","SelectedVariantInput","MasterProductId","RecordId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","_variantProduct$produ","_variantProduct$Dimen","_this$props$data$feat","images","productVariant","lastUpdate","Date","now","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","Dimensions","find","_dimension$DimensionV","Value","toLowerCase","isCustomPriceSelected","length","getPriceForSelectedVariant","PriceForSelectedVariantInput","RetailMulitplePickupMFeatureState","data","featureState","result","Name","getDeliveryOptionsForSelectedVariant","GetDeliveryOptionsForSelectedVariantInput","IsEnabled","_updateQuantitiesInState","productDimensionFull","newValueId","DimensionValues","_this$productDetails","isGiftCard","IsGiftCard","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeSize","productDimensionTypeAmount","productDimensionTypeStyle","animating","isLastItem","nextIndex","isFirstItem","_getCarouselItem","image","Image","gridSettings","loadFailureBehavior","role","modifiedActiveIndex","ThumbnailItemContainerProps","classnames","tabIndex","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","event","which","KeyCodes","Enter","Space","preventDefault","onClickHandler","_onClick","_event","ObjectExtensions","isNullOrUndefined","selectedProductId","modalOpen","selectedDimensions","ctx","_productDetails$produ","tenantId","getRnrPartnerId","serviceEndPoint","getRnrEndpointId","productResult","getAttributeValuesAsync","callerContext","queryResultSettings","Number","productAttributes","console","log","productAvailabilities","getCartStateData","GetCartStateDataInput","cartState","cart","getRatingsSummary","GetRatingsSummaryInput","toString","ratingsSummaryData","ratingsSummary","getProductDetails","currentTime","_updateMediaItems","_product$productVaria","ItemTypeValue","ReleasedProductType","Service","isServiceItem","isDataLoaded","_quickViewCloseButtonclick","onChangeHandler","callbacks","newValue","_renderQuantity","max","ContainerProps","LabelContainerProps","htmlFor","heading","productQuantityHeading","errors","input","IncrementalQuantity","currentCount","onChange","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","minQuantityText","maxQuantityText","disabled","isAmazonPay","amazonURL","renderAmazonBuy","target","title","amazonBuyBtnText","amazonBuyBtnTitleValue","amazonBuyBtnTextValue","min","bind","getTelemetryObject","telemetryPageName","friendlyName","shouldComponentUpdate","nextProps","nextState","render","_this$productDetails2","_ref","_this$productDetails3","_getAttributeByName","_this$productDetails4","_this$productDetails5","isMobileDevice","isMobile","variant","VariantType","Viewport","amazonBuyAttrBasedURL","getAttributeByName","app","amazonBuyAttrKeyName","TextValue","viewprops","quickView","moduleProps","quickViewButton","quickViewbuttonText","ModalContainer","Modal","isOpen","format","quickViewAriaLabel","toggle","modalTransition","timeout","shouldUpdateFocusToFirstElement","ModalHeaderContainer","ModalHeader","ModalFooterContainer","ModalFooter","ModalHeaderContent","ModalBodyContainer","ModalBody","cartContainerProps","ProductInfoContainerProps","MediaGalleryContainerProps","seeDetailsbutton","loading","Spinner","label","loadingText","size","SpinnerSize","large","getBuyboxProductTitle","description","getBuyboxProductDescription","configure","getBuyboxProductConfigure","price","getBuyboxProductPrice","unitOfMeasure","getBuyboxProductUnitOfMeasure","rating","hideRating","getBuyboxProductRating","addToCart","getBuyboxAddToCart","keyInPrice","enableKeyInPrice","getBuyboxKeyInPrice","inventoryLabel","getBuyBoxInventoryLabel","addToWishlist","getBuyboxProductAddToWishlist","quantityLimitsMessages","getQuantityLimitsMessages","CarouselProps","Thumbnails","renderAmazonPay","renderView","lastUpdatedTime","_this$productDetails6","PrimaryImageUrl","_mapProductToImageData","arguments","CustomerContextualPrice","producturl","getProductPageUrlSync","_product$Behavior","_product$Behavior2","_product$Behavior3","_product$Behavior4","_isOrderQuantityLimitsFeatureEnabled","Behavior","MinimumQuantity","MaximumQuantity","maxQuantityForCartLineItem","_this$props$context$r","_featureStatuses$find","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","RetailDefaultOrderQuantityLimitsFeatureName","customerInfo","customerInformation","information","IsB2b","onAddToWishlistFailed","getConfigureErrors","missingDimensions","renderAddToWishlist","_props$productDetails","wishlistButton","renderAddtoWishlistButton","wishlists","AddToWishlistComponent","addToWishlistButtonText","removeFromWishlistButtonText","addToWishlistMessage","removedFromWishlistMessage","addItemToWishlistError","removeItemFromWishlistError","nameOfWishlist","typeName","onError","getSelectedProduct","showButtonText","showButtonTooltip","Node","errorBlock","renderConfigureDropdown","dropdown","select","renderBodyContent","priceText","dropdowns","renderConfigure","renderKeyInPrice","renderQuantity","renderQuickViewPopup","_props$state$productP","_props$state$productP2","Module","StringExtensions","isNullOrEmpty","ItemId","skuText","button","renderAddToCart","QuickViewFunctionalComponent","quickViewUpdatedProps","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","window","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}