{"version":3,"file":"283.febc1ccc8c124fa4.js","mappings":"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","sources":["webpack:///./Scripts/Actions/Conversion.action.js","webpack:///./Scripts/Actions/Gtm.action.js","webpack:///./Scripts/Components/Hillerstorp/BuyButton.js","webpack:///./Scripts/Components/withReactiveStyleBuyButton.js","webpack:///./Scripts/Services/Cart.service.js"],"sourcesContent":["import { post } from '../Services/http';\r\n\r\nexport const postConversionEvent = async (\r\n    event,\r\n    eventName,\r\n    cDetails = null\r\n) => {\r\n    await post(`/api/conversion`, {\r\n        event_id: event.ecommerce.transaction_id\r\n            ? event.ecommerce.transaction_id\r\n            : event.fb_event_id,\r\n        event_name: eventName,\r\n        event_source_url: window.location.href,\r\n        custom_data: {\r\n            ...(event.ecommerce.value && { value: event.ecommerce.value }),\r\n            currency: event.ecommerce.currency,\r\n            content_name: document.title,\r\n            content_ids: event.ecommerce.items.map((x) => x.item_id),\r\n            content_type: 'product_group',\r\n        },\r\n\r\n        user_data: {\r\n            ...(cDetails && cDetails.email && { em: cDetails.email }),\r\n            ...(cDetails && cDetails.firstName && { fn: cDetails.firstName }),\r\n            ...(cDetails && cDetails.lastName && { ln: cDetails.lastName }),\r\n            ...(cDetails &&\r\n                cDetails.phoneNumber && { ph: cDetails.phoneNumber }),\r\n        },\r\n    })\r\n        .then((response) => response.json())\r\n        .then((d) => {\r\n            console.log(d);\r\n        })\r\n        .catch((error) => {\r\n            if (error.message) {\r\n                console.log(error.message);\r\n            }\r\n        });\r\n};\r\n\r\nconst getCookieValue = (cname) => {\r\n    let name = cname + '=';\r\n    let decodedCookie = decodeURIComponent(document.cookie);\r\n    let ca = decodedCookie.split(';');\r\n    for (let i = 0; i < ca.length; i++) {\r\n        let c = ca[i];\r\n        while (c.charAt(0) == ' ') {\r\n            c = c.substring(1);\r\n        }\r\n        if (c.indexOf(name) == 0) {\r\n            return c.substring(name.length, c.length);\r\n        }\r\n    }\r\n    return '';\r\n};\r\n\r\nexport const cookieAccepted = () => {\r\n    const val = getCookieValue('cookie_consent_level');\r\n    if (val) {\r\n        const valObj = JSON.parse(val);\r\n        if (typeof valObj.targeting != 'undefined') {\r\n            return valObj.targeting;\r\n        }\r\n    }\r\n    return false;\r\n};\r\n","import { post } from '../Services/http';\r\nconst rootRoute = '/api/gtm';\r\nimport { postConversionEvent } from './Conversion.action';\r\n\r\nexport const addToCartEvent = async (articleNumber, quantity = 1) => {\r\n    try {\r\n        const response = await post(`${rootRoute}/add-to-cart`, {\r\n            articleNumber,\r\n            quantity,\r\n        });\r\n        const event = await response.json();\r\n        addToDataLayer(event);\r\n        if (\r\n            window.Cookiebot &&\r\n            window.Cookiebot.consent &&\r\n            window.Cookiebot.consent.marketing\r\n        )\r\n            await postConversionEvent(event, 'AddToCart');\r\n    } catch (error) {\r\n        console.error(error);\r\n    }\r\n};\r\n\r\nexport const removeFromCartEvent = async (articleNumber) => {\r\n    try {\r\n        const response = await post(`${rootRoute}/remove-from-cart`, {\r\n            articleNumber,\r\n        });\r\n        const event = await response.json();\r\n        addToDataLayer(event);\r\n    } catch (error) {\r\n        console.error(error);\r\n    }\r\n};\r\n\r\nexport const beginCheckoutEvent = async () => {\r\n    try {\r\n        const response = await post(`${rootRoute}/begin-checkout`);\r\n        const event = await response.json();\r\n        addToDataLayer(event);\r\n        if (\r\n            window.Cookiebot &&\r\n            window.Cookiebot.consent &&\r\n            window.Cookiebot.consent.marketing\r\n        )\r\n            await postConversionEvent(event, 'InitiateCheckout');\r\n    } catch (error) {\r\n        console.error(error);\r\n    }\r\n};\r\n\r\nconst addToDataLayer = (data) => {\r\n    dataLayer = window.dataLayer || [];\r\n    dataLayer.push({ ecommerce: null });\r\n    dataLayer.push(data);\r\n};\r\n","import React, { Fragment } from 'react';\r\nimport { add as addToCartService } from '../../Services/Cart.service';\r\nimport withReactiveStyleBuyButton from './../withReactiveStyleBuyButton';\r\nimport { receive, loadError } from '../../Actions/Cart.action';\r\nimport { catchError } from '../../Actions/Error.action';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { number } from 'prop-types';\r\nimport { translate } from '../../Services/translation';\r\nimport { addToCartEvent } from '../../Actions/Gtm.action';\r\nconst BuyButton = ({\r\n  label,\r\n  articleNumber,\r\n  quantityFieldId,\r\n  articleName,\r\n  articleBrand,\r\n  articleImageUrl,\r\n  minimumQuantity,\r\n  isMinimumQuantity,\r\n  maximumQuantity,\r\n  isMaximumQuantity,\r\n  quantityStepping,\r\n  isQuantityStepping,\r\n  articleStatus,\r\n  isPreorder,\r\n  href,\r\n  cssClass,\r\n  onClick,\r\n  bundles,\r\n  priceTag,\r\n  deliveryDays,\r\n  deliveryText,\r\n  variantId,\r\n  stockBalance,\r\n  sellOverStock\r\n}) => {\r\n\r\n  return (\r\n    <Fragment>\r\n      {articleNumber ? (\r\n        <a\r\n          className={cssClass}\r\n          onClick={(e) => {\r\n            e.preventDefault();\r\n            onClick({\r\n              articleNumber,\r\n              quantityFieldId,\r\n              articleName,\r\n              articleBrand,\r\n              articleImageUrl,\r\n              minimumQuantity,\r\n              isMinimumQuantity,\r\n              maximumQuantity,\r\n              isMaximumQuantity,\r\n              quantityStepping,\r\n              isQuantityStepping,\r\n              articleStatus,\r\n              isPreorder,\r\n              bundles,\r\n              priceTag,\r\n              deliveryDays,\r\n              deliveryText,\r\n              variantId,\r\n              stockBalance,\r\n              sellOverStock\r\n            })\r\n          }}\r\n          href={href || '#'}\r\n          rel=\"nofollow\"\r\n        >\r\n          {label}\r\n        </a>\r\n      ) : (\r\n        <a className={cssClass} href={href || '#'} rel=\"nofollow\">\r\n          {label}\r\n        </a>\r\n      )}\r\n    </Fragment>\r\n  );\r\n};\r\nconst errorQuantity = (id, errorName) => {\r\n  document.getElementById(id).innerText = errorName;\r\n\r\n  return;\r\n};\r\nconst StyledButton = (props) => {\r\n  const dispatch = useDispatch();\r\n  const onClick = async ({\r\n    articleNumber,\r\n    quantityFieldId,\r\n    articleName,\r\n    articleBrand,\r\n    articleImageUrl,\r\n    minimumQuantity,\r\n    isMinimumQuantity,\r\n    maximumQuantity,\r\n    isMaximumQuantity,\r\n    quantityStepping,\r\n    isQuantityStepping,\r\n    bundles,\r\n    priceTag,\r\n    deliveryDays,\r\n    deliveryText,\r\n    variantId,\r\n    stockBalance,\r\n    sellOverStock\r\n  }) => {\r\n\r\n    try {\r\n      let quantity;\r\n      if (quantityFieldId) {\r\n        quantity = quantityFieldId\r\n          ? document.getElementById(quantityFieldId).value\r\n          : 1;\r\n        var id = 'span-' + quantityFieldId;\r\n\r\n        if (\r\n          isMinimumQuantity &&\r\n          isMinimumQuantity.toLowerCase().trim() === 'true' &&\r\n          minimumQuantity &&\r\n          parseInt(quantity) < parseInt(minimumQuantity)\r\n        ) {\r\n          errorQuantity(\r\n            id,\r\n            translate('product.minimumquantity') + ' ' + minimumQuantity\r\n          );\r\n          return false;\r\n        }\r\n\r\n        if (\r\n          isMaximumQuantity &&\r\n          isMaximumQuantity.toLowerCase().trim() == 'true' &&\r\n          maximumQuantity &&\r\n          parseInt(quantity) > parseInt(maximumQuantity)\r\n        ) {\r\n          errorQuantity(\r\n            id,\r\n            translate('product.maximumquantity') + ' ' + maximumQuantity\r\n          );\r\n          return false;\r\n        }\r\n\r\n        if (\r\n          isQuantityStepping &&\r\n          isQuantityStepping.toLowerCase().trim() === 'true' &&\r\n          quantityStepping &&\r\n          parseInt(quantity) % parseInt(quantityStepping) !== 0\r\n        ) {\r\n          var addQty = parseInt(quantity) % parseInt(quantityStepping);\r\n          errorQuantity(\r\n            id,\r\n            translate('product.multiplequantity') +\r\n            ' ' +\r\n            quantityStepping +\r\n            ' add ' +\r\n            addQty\r\n          );\r\n          return false;\r\n        }\r\n        if (\r\n          sellOverStock &&\r\n          sellOverStock.toLowerCase().trim() === 'false' &&\r\n\r\n          parseInt(quantity) > parseInt(stockBalance)\r\n        ) {\r\n          errorQuantity(\r\n            id,\r\n            translate('product.notenoughstock') + ' ' + stockBalance\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n\r\n      let cart;\r\n      if (bundles != null && bundles !== undefined && bundles.length > 0) {\r\n        var bundleStringId = bundles[0].bundleId;\r\n        for (const item of bundles) {\r\n          bundleStringId += ';' + item.variant;\r\n        }\r\n\r\n        cart = await addToCartService({\r\n          isBundle: true,\r\n          bundleStringId: bundleStringId,\r\n          deliveryDays,\r\n          deliveryText,\r\n        });\r\n      } else {\r\n        cart = await addToCartService({\r\n          articleNumber,\r\n          quantity,\r\n          variantId,\r\n          deliveryDays,\r\n          deliveryText,\r\n        });\r\n      }\r\n      await addToCartEvent(articleNumber, quantity);\r\n      dispatch(receive(cart));\r\n\r\n      const productPopup = document.getElementById('popup_box');\r\n      if (productPopup != null) {\r\n        productPopup.classList.add('popup--visible');\r\n        if (\r\n          typeof productPopup.querySelector('.popup__article-title').dataset\r\n            .productName !== 'undefined'\r\n        ) {\r\n          productPopup.querySelector('.popup__article-title').innerText =\r\n            productPopup.querySelector('.popup__article-title').dataset\r\n              .productName +\r\n            ' ' +\r\n            articleName;\r\n        } else {\r\n          let bundlesString = '';\r\n          bundles.forEach((x) => {\r\n            bundlesString += '<br />' + x.quantity + 'x ' + x.variantName;\r\n          });\r\n          productPopup.querySelector('.popup__article-title').innerHTML =\r\n            articleName + bundlesString;\r\n        }\r\n        productPopup.querySelector(\r\n          '.popup__article-number'\r\n        ).innerText = articleNumber;\r\n        productPopup.querySelector(\r\n          '.popup__article-brand'\r\n        ).innerText = articleBrand;\r\n        if (typeof articleImageUrl !== 'undefined' && articleImageUrl !== '') {\r\n          productPopup.querySelector(\r\n            '.popup__article-fig-image'\r\n          ).src = articleImageUrl;\r\n        } else {\r\n          productPopup.querySelector(\r\n            '.popup__article-fig-image'\r\n          ).src = document.querySelector('.thumb.selected img').src;\r\n        }\r\n        if (typeof priceTag !== 'undefined') {\r\n          productPopup.querySelector(\r\n            '.popup__article-price'\r\n          ).innerHTML = priceTag;\r\n        } else {\r\n          productPopup.querySelector(\r\n            '.popup__article-price'\r\n          ).innerHTML = document.querySelector(\r\n            '.product-detail__price-info .price'\r\n          ).innerText;\r\n        }\r\n      }\r\n      return true;\r\n    } catch (ex) {\r\n      dispatch(catchError(ex, (error) => loadError(error)));\r\n      return false;\r\n    }\r\n  };\r\n  const Button = withReactiveStyleBuyButton(BuyButton, onClick, 'buy-button');\r\n\r\n  return <Button {...props} />;\r\n};\r\n\r\nexport default StyledButton;\r\n","import React, { useState, useRef, useEffect } from 'react';\r\n\r\nconst StateStyles = {\r\n    LOADING: '--loading',\r\n    SUCCESS: '--success',\r\n    ERROR: '--error',\r\n};\r\n\r\n/**\r\n * Represents a HOC which wraps a BuyButton or ReorderButton and applies diffrent styles to it\r\n * depending on its click state.\r\n * @param {*} WrappedComponent The button component.\r\n * @param {*} onClick The async button's onClick event. It should return true if everything is OK, or false if there is any error.\r\n * @param {*} stylePrefix The style prefix to append state's modifiers. For\r\n * example, 'button' will result as 'button--loading'.\r\n *\r\n * Some available props that the HOC component supports:\r\n * autoReset : it is true by default. Not its value, but the behaviour is like that. Unless people set it as false, by default, button is always reset to neutral state after the request is completed.\r\n * resetTimeout: Number milisecond after the complete state, the style of button will be reset. If don't set, it is 2000\r\n * minimumLoadingTime: Mininum milisecond to display the loading state. If don't set, it is 1000\r\n */\r\nexport default function withReactiveStyleBuyButton(\r\n    WrappedComponent,\r\n    onClick,\r\n    stylePrefix\r\n) {\r\n    return (props) => {\r\n        const [stateClass, setStateClass] = useState('');\r\n        const startTime = useRef(0);\r\n\r\n        useEffect(() => {\r\n            return () => {\r\n                setStateClass('');\r\n            };\r\n        }, []);\r\n\r\n        function onNeutralState() {\r\n            setStateClass('');\r\n            startTime.current = 0;\r\n        }\r\n\r\n        function onLoadingState() {\r\n            setStateClass(`${stylePrefix}${StateStyles.LOADING}`);\r\n            startTime.current = Date.now();\r\n        }\r\n\r\n        const changeState = (complete) => {\r\n            setStateClass(\r\n                `${stylePrefix}${\r\n                    complete ? StateStyles.SUCCESS : StateStyles.ERROR\r\n                }`\r\n            );\r\n\r\n            // if `autoReset` is true, which is default, the style will be changed\r\n            // to neutral after a `resetTimeout` amount of time (2 seconds by default).\r\n            props.autoReset !== false &&\r\n                setTimeout(() => {\r\n                    onNeutralState();\r\n                }, props.resetTimeout || 2000);\r\n        };\r\n\r\n        function onComplete(complete) {\r\n            const loadingDuration = Date.now() - startTime.current;\r\n            const minimumLoadingTime = props.minimumLoadingTime || 1000;\r\n            // ensure the loading indicator is displayed at least a `minimumLoadingTime`\r\n            // amount of time before changing it to Success or Error.\r\n            if (loadingDuration >= minimumLoadingTime) {\r\n                changeState(complete);\r\n            } else {\r\n                setTimeout(() => {\r\n                    changeState(complete);\r\n                }, minimumLoadingTime - loadingDuration);\r\n            }\r\n        }\r\n\r\n        async function onButtonClick(params) {\r\n            onLoadingState();\r\n            const data = await onClick(params);\r\n            onComplete(data);\r\n        }\r\n\r\n        return (\r\n            <span className={stateClass}>\r\n                <WrappedComponent\r\n                    onClick={(params) => onButtonClick(params)}\r\n                    {...props}\r\n                />\r\n            </span>\r\n        );\r\n    };\r\n}\r\n","import { post } from './http';\r\n\r\n    export const add = async ({ articleNumber, quantity = 1, bundleProductId = '', isBundle = false, bundleStringId = '', variantId = '', deliveryDays='',deliveryText=''}) => {\r\n\r\n    if (!quantity || isNaN(quantity) || parseFloat(quantity) <= 0) {\r\n        throw 'Invalid quantity';\r\n    }\r\n\r\n    const response = await post('/api/cart/add', {\r\n        articleNumber,\r\n        quantity: parseFloat(quantity),\r\n        bundleProductId,\r\n        bundleStringId,\r\n        isBundle,\r\n        deliveryDays,\r\n        deliveryText,\r\n        variantId,\r\n\r\n    });\r\n    return response.json();\r\n};\r\n\r\nexport const reorder = async (orderId) => {\r\n    const response = await post('/api/cart/reorder', { orderId });\r\n    return response.json();\r\n};\r\n"],"names":["postConversionEvent","async","event","eventName","cDetails","post","event_id","ecommerce","transaction_id","fb_event_id","event_name","event_source_url","window","location","href","custom_data","value","currency","content_name","document","title","content_ids","items","map","x","item_id","content_type","user_data","email","em","firstName","fn","lastName","ln","phoneNumber","ph","then","response","json","d","console","log","catch","error","message","rootRoute","addToCartEvent","articleNumber","quantity","addToDataLayer","Cookiebot","consent","marketing","removeFromCartEvent","beginCheckoutEvent","data","dataLayer","push","BuyButton","label","quantityFieldId","articleName","articleBrand","articleImageUrl","minimumQuantity","isMinimumQuantity","maximumQuantity","isMaximumQuantity","quantityStepping","isQuantityStepping","articleStatus","isPreorder","cssClass","onClick","bundles","priceTag","deliveryDays","deliveryText","variantId","stockBalance","sellOverStock","Fragment","className","e","preventDefault","rel","errorQuantity","id","errorName","getElementById","innerText","props","dispatch","useDispatch","Button","withReactiveStyleBuyButton","cart","toLowerCase","trim","parseInt","translate","addQty","undefined","length","bundleStringId","bundleId","item","variant","addToCartService","isBundle","receive","productPopup","classList","add","querySelector","dataset","productName","bundlesString","forEach","variantName","innerHTML","src","ex","catchError","loadError","StateStyles","LOADING","SUCCESS","ERROR","WrappedComponent","stylePrefix","stateClass","setStateClass","useState","startTime","useRef","useEffect","changeState","complete","autoReset","setTimeout","current","resetTimeout","onButtonClick","params","Date","now","loadingDuration","minimumLoadingTime","onComplete","bundleProductId","isNaN","parseFloat","reorder","orderId"],"sourceRoot":""}