{"version":3,"sources":["webpack:///./Avensia.Common/Features/Bambuser/BambuserBlock.tsx"],"names":["player","current","componentIsMounted","state","apiIsLoaded","bambuserShouldLoad","bambuserShouldPlay","destroyPlayer","destroy","onClick","setState","checkIfCachedByBrowser","image","isCached","assumeCachedByBrowser","componentDidMount","this","window","onBambuserLiveShoppingReady","configure","locale","props","culture","currency","buttons","dismiss","BUTTON","MINIMIZE","on","EVENT","ADD_TO_CART","addedItem","callback","addToCart","sku","then","includeAppShellData","catch","UPDATE_ITEM_IN_CART","updatedItem","cartItems","forEach","item","find","code","updateCartItemQuantity","quantity","READY","CHECKOUT","showCheckout","location","origin","checkoutPageUrl","CLOSE","close","PROVIDE_PRODUCT_DATA","event","productSkus","products","map","p","ref","product","eventCurrentProduct","eventProduct","productId","id","updateProduct","factory","brandName","defaultVariationIndex","description","name","variations","v","variation","attributes","a","colorName","colorHexCode","imageUrls","sizes","s","size","inStock","price","original","eventId","shouldComponentUpdate","nextProps","nextState","shouldUpdate","componentDidUpdate","initBambuserLiveShopping","url","src","test","pathname","complete","naturalWidth","render","imgUrl","imageBlockViewModel","block","imageUrl","style","cursor","appShellData","siteSettings","checkoutPage","cart","items","dispatch","ticket","BambuserBlock"],"mappings":"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","file":"assets/38.chunk.9e5c150fbf349d4faa57.js","sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\r\n\r\n/**\r\n * @ComponentFor BambuserBlockViewModel\r\n */\r\n\r\nimport * as React from 'react';\r\nimport BambuserBlockViewModel from './BambuserBlockViewModel.type';\r\nimport { addToCart, updateCartItemQuantity } from 'Cart/action-creators';\r\nimport connect from 'Shared/connect';\r\nimport { loadScript, shallowEquals, postJson, URLX, replaceState } from '@avensia/scope';\r\nimport bambuserProduct from './BambuserProduct.type';\r\nimport CartItemType from '/Cart/Models/CartItemViewModel.type';\r\nimport { CartEventLocation } from 'TrackingInformation/tracking-types';\r\nimport { StyledProps } from '@glitz/react';\r\nimport ImageBlock from 'Shared/Image';\r\nimport { epiPropertyValue } from '@avensia/scope-episerver';\r\n\r\ntype PlayerType = {\r\n current: any;\r\n};\r\n\r\ntype ConnectedPropType = {\r\n culture: string;\r\n checkoutPageUrl: string;\r\n cartItems: CartItemType[];\r\n};\r\n\r\ntype DispatchPropType = {\r\n addToCart: (code: string, quantity: number, ticket: string, location: CartEventLocation) => Promise;\r\n updateCartItemQuantity: (item: CartItemType, quantity: number) => Promise;\r\n};\r\n\r\ntype PropType = BambuserBlockViewModel &\r\n ConnectedPropType &\r\n DispatchPropType &\r\n StyledProps & {\r\n checkoutUrl: string;\r\n };\r\n\r\ntype StateType = {\r\n apiIsLoaded: boolean;\r\n bambuserShouldLoad: boolean;\r\n bambuserShouldPlay: boolean;\r\n};\r\n\r\nclass BambuserBlock extends React.Component {\r\n player: PlayerType = { current: null };\r\n componentIsMounted: boolean = true;\r\n state = {\r\n apiIsLoaded: false,\r\n bambuserShouldLoad: false,\r\n bambuserShouldPlay: false,\r\n };\r\n isCached: boolean;\r\n\r\n componentDidMount() {\r\n if (!this.state.apiIsLoaded) {\r\n (window as any).onBambuserLiveShoppingReady = (player: any) => {\r\n player.configure({\r\n locale: this.props.culture,\r\n currency: this.props.currency,\r\n buttons: {\r\n dismiss: player.BUTTON.MINIMIZE,\r\n },\r\n });\r\n\r\n player.on(player.EVENT.ADD_TO_CART, (addedItem: any, callback: (arg: boolean) => void) => {\r\n this.props\r\n .addToCart(addedItem.sku, 1, '', 'Bambuser')\r\n .then(() => {\r\n replaceState(null, { includeAppShellData: true });\r\n callback(true);\r\n })\r\n .catch(() => callback(false));\r\n });\r\n\r\n player.on(player.EVENT.UPDATE_ITEM_IN_CART, (updatedItem: any, callback: (arg: boolean) => void) => {\r\n this.props.cartItems.forEach((item) => {});\r\n const item = this.props.cartItems.find((item) => item.code === updatedItem.sku);\r\n if (!!item) {\r\n this.props\r\n .updateCartItemQuantity(item, updatedItem.quantity)\r\n .then(() => callback(true))\r\n .catch(() => callback(false));\r\n }\r\n });\r\n\r\n player.on(player.EVENT.READY, () => {\r\n this.player.current = player;\r\n });\r\n\r\n player.on(player.EVENT.CHECKOUT, () => {\r\n player.showCheckout(window.location.origin + this.props.checkoutPageUrl);\r\n this.setState({ bambuserShouldLoad: false });\r\n });\r\n\r\n player.on(player.EVENT.CLOSE, () => {\r\n player.close();\r\n this.setState({ bambuserShouldLoad: false });\r\n });\r\n\r\n player.on(player.EVENT.PROVIDE_PRODUCT_DATA, async (event: any) => {\r\n const productSkus = event.products.map((p: any) => p.ref);\r\n const correctedProducts = await postJson('/bambuserblock/getproducts', productSkus);\r\n\r\n correctedProducts.forEach((product: bambuserProduct) => {\r\n const eventCurrentProduct: any = event.products.find(\r\n (eventProduct: any) => eventProduct.ref === product.productId,\r\n );\r\n if (eventCurrentProduct.id) {\r\n player.updateProduct(eventCurrentProduct.id, (factory: any) => {\r\n return factory.product((p: any) =>\r\n p\r\n .brandName(product.brandName)\r\n .defaultVariationIndex(0)\r\n .description(product.description)\r\n .name(product.name)\r\n .sku(product.sku)\r\n .variations((v: any) =>\r\n product.variations.map((variation) =>\r\n v()\r\n .attributes(\r\n (a: any) =>\r\n a ??\r\n a\r\n .colorName(variation.attributes.colorName)\r\n .colorHexCode(variation.attributes.colorHexCode),\r\n )\r\n .imageUrls(p.imageUrls)\r\n .name(variation.name)\r\n .sku(variation.sku)\r\n .sizes((s: any) =>\r\n variation.sizes.map((size) =>\r\n s()\r\n .name(size.name)\r\n .inStock(size.inStock)\r\n .price((p: any) =>\r\n p\r\n .currency(size.price.currency)\r\n .current(size.price.current)\r\n .original(size.price.original),\r\n )\r\n .sku(size.sku),\r\n ),\r\n ),\r\n ),\r\n ),\r\n );\r\n });\r\n }\r\n });\r\n });\r\n };\r\n this.setState({ apiIsLoaded: true });\r\n }\r\n\r\n if (this.props.eventId !== null) {\r\n this.setState({ bambuserShouldLoad: true });\r\n }\r\n return () => {\r\n this.componentIsMounted = false;\r\n };\r\n }\r\n\r\n shouldComponentUpdate(nextProps: PropType, nextState: StateType) {\r\n const shouldUpdate = !shallowEquals(this.state, nextState);\r\n if (!shouldUpdate) {\r\n console.info('Ignoring update to Bambuser block');\r\n }\r\n return shouldUpdate;\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.state.apiIsLoaded && this.state.bambuserShouldLoad) {\r\n (async () => {\r\n await loadScript('https://lcx-embed.bambuser.com/vuxen/embed.js');\r\n if (this.state.bambuserShouldPlay && this.componentIsMounted) {\r\n (window as any).initBambuserLiveShopping(this.props.eventId);\r\n }\r\n })();\r\n return () => {\r\n if (this.player.current) {\r\n this.destroyPlayer();\r\n }\r\n };\r\n }\r\n }\r\n\r\n destroyPlayer = () => {\r\n this.player.current && this.player.current.destroy();\r\n this.player.current = null;\r\n };\r\n\r\n onClick = () => {\r\n this.setState({\r\n bambuserShouldLoad: true,\r\n bambuserShouldPlay: true,\r\n });\r\n };\r\n\r\n checkIfCachedByBrowser = (image: HTMLImageElement) => (this.isCached = this.assumeCachedByBrowser(image));\r\n\r\n assumeCachedByBrowser(image: HTMLImageElement) {\r\n if (!image) {\r\n return false;\r\n }\r\n const url = new URLX(image.src);\r\n // Firefox and IE has a bug where svg reports 0 for natural size in some cases\r\n if (/\\.svg/.test(url.pathname)) {\r\n return false;\r\n }\r\n return image.complete && image.naturalWidth > 0;\r\n }\r\n\r\n render() {\r\n const imgUrl = epiPropertyValue(this.props.imageBlockViewModel.block.imageUrl);\r\n return (\r\n this.props.eventId && (\r\n
this.onClick()} style={{ cursor: 'pointer' }}>\r\n \r\n
\r\n )\r\n );\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state): ConnectedPropType => ({\r\n culture: state.appShellData.culture,\r\n checkoutPageUrl: state.appShellData.siteSettings.checkoutPage?.url,\r\n cartItems: state.appShellData.cart.items,\r\n }),\r\n (dispatch): DispatchPropType => ({\r\n addToCart: (code, quantity, ticket, location) => dispatch(addToCart(code, quantity, ticket, location, false)),\r\n updateCartItemQuantity(item: CartItemType, quantity: number) {\r\n return dispatch(updateCartItemQuantity(item.code, quantity, 'Bambuser'));\r\n },\r\n }),\r\n)(BambuserBlock);\r\n"],"sourceRoot":""}