{"version":3,"file":"gtm-a9f763c0.js","sources":["../../../../firstmile.widgets/src/blocks/mini-cart/MiniCart.tsx","../../../../firstmile.widgets/src/helpers/gtm.ts"],"sourcesContent":["import { removeItemAsync, updateItemAsync, updateCountItemsInCart } from '@src/api/cart';\nimport { CartItemModel, CartModel } from '@src/app/types';\nimport Button from '@src/components/button/Button';\nimport CartItem from '@src/components/cart-item/CartItem';\nimport Svg from '@src/components/svg/Svg';\nimport { useEffect, useRef, useState } from 'react';\n\ninterface Props extends CartModel {\n accountId?: string;\n locationId?: string;\n addedToCartText: string;\n viewCartText: string;\n viewCartUrl: string;\n checkoutText: string;\n checkoutUrl: string;\n vatText: string;\n totalText: string;\n onClose: () => any;\n}\n\nlet miniCartKey = 0;\n\nconst MiniCart = ({\n addedToCartText,\n checkoutText,\n checkoutUrl,\n totalText,\n vatText,\n viewCartText,\n viewCartUrl,\n accountId,\n locationId,\n onClose,\n ...props\n}: Props) => {\n const [closeClicked, setCloseClicked] = useState(false);\n const [cart, setCart] = useState(props);\n const [isApiCalling, setIsApiCalling] = useState(false);\n\n const modalRef = useRef(null);\n\n useEffect(() => {\n const className = 'fm-o-mini-cart--popup-visible';\n document.body.classList.add(className);\n\n return () => {\n document.body.classList.remove(className);\n };\n }, []);\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside);\n return () => {\n document.removeEventListener('click', handleClickOutside);\n };\n }, []);\n\n const handleClickOutside = (event: MouseEvent) => {\n if (modalRef.current && !modalRef.current.contains(event.target as Node)) {\n setCloseClicked(true);\n }\n };\n\n const handleClose = () => {\n setCloseClicked(true);\n };\n\n const handleAnimationEnd = () => {\n if (!closeClicked) {\n return;\n }\n\n onClose();\n };\n\n const handlePushDataLayer = (item: CartItemModel, eventName: string, quantity: number) => {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: eventName,\n ecommerce: {\n currencyCode: 'GBP',\n add: {\n products: [\n {\n name: item.name,\n variant: item.description,\n price: item.priceIncludedTax,\n quantity,\n id: item.productId,\n },\n ],\n },\n },\n });\n };\n\n const handleRemoveFromCart = (item: CartItemModel) => {\n setIsApiCalling(true);\n removeItemAsync(item.itemId)\n .then(() => {\n updateCountItemsInCart();\n handlePushDataLayer(item, 'removeFromCart', item.quantity);\n setCloseClicked(true);\n })\n .finally(() => setIsApiCalling(false));\n };\n\n const handleSetQuantity = (item: CartItemModel, quantity: number) => {\n setIsApiCalling(true);\n const oldItems = cart.items;\n const newItems = cart.items?.map((i) => (i.itemId === item.itemId ? { ...i, quantity: quantity } : i));\n const eventName = item.quantity > quantity ? 'removeFromCart' : 'addToCart';\n\n setCart({ ...cart, items: newItems });\n updateItemAsync(item.itemId, { quantity: quantity, accountId, locationId, quantityRemaining: item.quantityRemaining })\n .then((data: CartModel) => {\n const newItem = data.items?.filter((i) => i.itemId === item.itemId);\n newItem && handlePushDataLayer(newItem[0], eventName, Math.abs(item.quantity - quantity));\n setCart(data as CartModel);\n })\n .catch(() => {\n setCart({ ...cart, items: oldItems });\n })\n .finally(() => setIsApiCalling(false));\n };\n\n return (\n
\n
\n
\n
\n

{addedToCartText}

\n
\n \n
\n
\n
\n {cart.items?.map((item) => (\n handleRemoveFromCart(item)}\n onSetQuantity={(quantity) => handleSetQuantity(item, quantity)}\n />\n ))}\n
\n
\n
{vatText}
\n
{cart.vat}
\n
{totalText}
\n
{cart.totalPrice}
\n
\n
\n \n \n
\n
\n {isApiCalling &&
}\n
\n
\n );\n};\n\nexport default MiniCart;\nexport type { Props as MiniCartProps };\n","export const gtmPushEventAddToCart = (item: { name: string; variant: string; price: string; quantity: number; id: string }) => {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: \"addToCart\",\n ecommerce: {\n currencyCode: \"GBP\",\n add: {\n products: [item],\n },\n },\n });\n};\n"],"names":["miniCartKey","MiniCart","addedToCartText","checkoutText","checkoutUrl","totalText","vatText","viewCartText","viewCartUrl","accountId","locationId","onClose","props","closeClicked","setCloseClicked","useState","cart","setCart","isApiCalling","setIsApiCalling","modalRef","useRef","useEffect","className","body","classList","add","remove","addEventListener","handleClickOutside","removeEventListener","event","current","contains","target","handleClose","handleAnimationEnd","handlePushDataLayer","item","eventName","quantity","dataLayer","window","push","ecommerce","currencyCode","products","name","variant","description","price","priceIncludedTax","id","productId","handleRemoveFromCart","removeItemAsync","itemId","then","updateCountItemsInCart","finally","handleSetQuantity","oldItems","items","newItems","map","i","updateItemAsync","quantityRemaining","data","newItem","filter","Math","abs","catch","_jsxs","_jsx","Svg","CartItem","vat","totalPrice","Button","gtmPushEventAddToCart"],"mappings":"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"}