{"version":3,"file":"discount-nudge.js","sourceRoot":"","sources":["../../Assets/js/src/modules/discount-nudge.ts"],"names":[],"mappings":"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","sourcesContent":["import DiscountNudgesInformation = require(\"../models/discountNudgesInformation\");\r\nimport DiscountNudge = require(\"../models/discountNudge\");\r\nimport DiscountNudgeType = require(\"../models/discountNudgeType\");\r\nimport PriceProcessor = require(\"price-processor\");\r\nimport Splide = require(\"../../typings/splide\");\r\n\r\nconst bodyElementId = \"bodyElement\";\r\nconst discountNudgeInformationAttributeName = \"data-discount-nudge-information\";\r\nconst discountNudgeContainerSelectorName = \"[data-discount-nudge-container]\";\r\nconst discountNudgeAlternativeContainerSelectorName = \"data-alternative-discount-nudge-container\";\r\nconst showAchivedDiscountHereSelectorName = \"data-show-achived-discount-here\";\r\nconst showDiscountOnMainSelectorName = \"data-discount-nudge-show-discount-on-main\";\r\nconst discountNudgeTypesAttributeName = \"data-discount-nudge-types\";\r\nconst discountNudgeStockCodeAttributeName = \"data-discount-nudge-stock-code\";\r\nconst discountNudgePickerGuidAttributeName = \"data-quantity-picker-guid\";\r\nconst discountNudgePreviouslyAchievedAttributeName = \"data-discount-nudge-previously-achieved\";\r\nconst discountNudgeItemsInBasketAttributeName = \"data-discount-nudge-items-in-basket\";\r\nconst discountNudgeGroupItemsInBasketAttributeName = \"data-discount-nudge-group-items-in-basket\";\r\nconst basketRowAttributeName = \"data-basket-row\";\r\nconst discountIdAttributeName = \"data-discount-id\";\r\nconst productListSelectorName = '[data-product-list]';\r\nconst priceGroupRowClassSelectorName = \".order-line__price-group-row\";\r\nconst priceDiscountMessageContainerSelectorName = \".price-discount-message-container\";\r\nconst productListContainerSelectorName = '.product-list';\r\nconst productPageContainerSelectorName = \".product-page-container\";\r\nconst productListNudgeWrapperContainerSelectorName = '.product-summary__nudge.nudge-wrapper';\r\n\r\nconst quantityLabelSelectorName = '[data-quantity-label]';\r\nconst quantityDiscountLabelSelectorName = '[data-quantity-discount-label]';\r\nconst addToBasketQuantitySelectorName = '[data-add-to-basket-quantity]';\r\nconst addToMultipleBasketsSelectorName = '[data-add-to-multiple-baskets]';\r\nconst quantityDiscountAchievedLabelSelectorName = '[data-quantity-discount-achieved-label]';\r\nconst quantityGroupDiscountLabelSelectorName = '[data-quantity-group-discount-label]';\r\nconst quantityGroupDiscountAchivedLabelSelectorName = '[data-quantity-group-discount-achieved-label]';\r\nconst promotionFeaturedProductLabelSelectorName = '[data-promotion-featured-product-label]';\r\n\r\nconst quantityLabel = document.querySelector(quantityLabelSelectorName) as HTMLInputElement;\r\nconst quantityDiscountLabel = document.querySelector(quantityDiscountLabelSelectorName) as HTMLInputElement;\r\nconst quantityDiscountAchievedLabel = document.querySelector(quantityDiscountAchievedLabelSelectorName) as HTMLInputElement;\r\nconst quantityGroupDiscountLabel = document.querySelector(quantityGroupDiscountLabelSelectorName) as HTMLInputElement;\r\nconst quantityGroupDiscountAchivedLabel = document.querySelector(quantityGroupDiscountAchivedLabelSelectorName) as HTMLInputElement;\r\nconst promotionFeaturedProductLabel = document.querySelector(promotionFeaturedProductLabelSelectorName) as HTMLInputElement;\r\nconst productPageContainer = document.querySelector(productPageContainerSelectorName) as HTMLElement;\r\n\r\nconst bodyElement = document.getElementById(bodyElementId) as HTMLElement;\r\n\r\nlet discountNudgesInformation: DiscountNudgesInformation;\r\nlet discountNudgesExists: boolean;\r\nlet processAllDiscountNudgesStarted: boolean = false;\r\n\r\n// Functions\r\nconst getDiscountNudgesToShow = function (discountNudgeContainer: HTMLElement): DiscountNudgeType[] {\r\n    const discountNudgeTypesValue = discountNudgeContainer.getAttribute(discountNudgeTypesAttributeName);\r\n    return discountNudgeTypesValue.split(',').map(Number).map(element => {\r\n        if (element in DiscountNudgeType) {\r\n            return element;\r\n        }\r\n    })\r\n}\r\n\r\nconst formatMessage = function (str: string, ...col: any): string {\r\n    if (typeof (str) === \"undefined\")\r\n        return '';\r\n\r\n    col = typeof col === 'object' ? col : Array.prototype.slice.call(arguments, 1);\r\n\r\n    return str.replace(/\\{\\{|\\}\\}|\\{(\\w+)\\}/g, function (m, n) {\r\n        if (m === \"{{\") { return \"{\"; }\r\n        if (m === \"}}\") { return \"}\"; }\r\n        return col[n];\r\n    });\r\n}\r\n\r\nconst discountAchieved = function (discountNudge: DiscountNudge, itemsInBasket: number, groupItemsInBasket: number) {\r\n    if (discountNudge.discountNudgeType === DiscountNudgeType.CartonDiscount) {\r\n        if (itemsInBasket > 0 && itemsInBasket % discountNudge.triggerQuantity === 0) {\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n    else if (discountNudge.discountNudgeType === DiscountNudgeType.GroupDiscount) {\r\n        if (discountNudge.triggerQuantity <= groupItemsInBasket) {\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    }\r\n    else if (discountNudge.discountNudgeType === DiscountNudgeType.VolumeDiscount) {\r\n        if (discountNudge.triggerQuantity <= itemsInBasket) {\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nconst processMessage = function (message: string): HTMLDivElement {\r\n    const messageContainer = document.createElement('div') as HTMLDivElement;\r\n    messageContainer.classList.add('message-container');\r\n    messageContainer.innerHTML = message;\r\n    return messageContainer;\r\n}\r\n\r\nconst getDiscountMessage = function (discountNudge: DiscountNudge, itemsInBasket: number, groupItemsInBasket: number): string {\r\n    if (discountNudge.discountNudgeType === DiscountNudgeType.CartonDiscount) {\r\n        // discount achieved\r\n        if (discountAchieved(discountNudge, itemsInBasket, groupItemsInBasket)) {\r\n            return formatMessage(\r\n                quantityDiscountAchievedLabel.value,\r\n                'Carton');\r\n        } else {\r\n            return formatMessage(\r\n                quantityDiscountLabel.value,\r\n                discountNudge.triggerQuantity - (itemsInBasket % discountNudge.triggerQuantity),\r\n                discountNudge.discount,\r\n                'Carton');\r\n        }\r\n    }\r\n    else if (discountNudge.discountNudgeType === DiscountNudgeType.GroupDiscount) {\r\n        // discount achieved\r\n        if (discountAchieved(discountNudge, itemsInBasket, groupItemsInBasket)) {\r\n            return formatMessage(\r\n                quantityGroupDiscountAchivedLabel.value,\r\n                discountNudge.discount,\r\n                discountNudge.discountName,\r\n                discountNudge.url);\r\n        }\r\n        else {\r\n            return formatMessage(\r\n                quantityGroupDiscountLabel.value,\r\n                discountNudge.triggerQuantity - groupItemsInBasket,\r\n                discountNudge.discountName,\r\n                discountNudge.discount,\r\n                discountNudge.url);\r\n        }\r\n    }\r\n    else if (discountNudge.discountNudgeType === DiscountNudgeType.VolumeDiscount) {\r\n        // discount achieved\r\n        if (discountAchieved(discountNudge, itemsInBasket, groupItemsInBasket)) {\r\n            return formatMessage(\r\n                quantityDiscountAchievedLabel.value,\r\n                'Volume');\r\n        } else {\r\n            return formatMessage(\r\n                quantityDiscountLabel.value,\r\n                discountNudge.triggerQuantity - itemsInBasket,\r\n                discountNudge.discount,\r\n                'Volume');\r\n        }\r\n    }\r\n    else if (discountNudge.discountNudgeType === DiscountNudgeType.Promotion) {\r\n        return formatMessage(\r\n            promotionFeaturedProductLabel.value,\r\n            discountNudge.discountName,\r\n            discountNudge.url);\r\n    }\r\n}\r\n\r\nconst getDiscountIdAttribute = function(discountNudge: DiscountNudge, slideId: string): string {\r\n    if (discountNudge.discountNudgeType === DiscountNudgeType.CartonDiscount) {\r\n        return 'Carton';\r\n    }\r\n    else if(discountNudge.discountNudgeType === DiscountNudgeType.VolumeDiscount) {\r\n        return 'Volume';\r\n    }\r\n    else {\r\n        return slideId + '_' + discountNudge.discountId.toString() + '_' + discountNudge.triggerQuantity.toString();\r\n    }\r\n}\r\n\r\nconst slidesExists = function (discountNudgeContainer: HTMLElement): boolean {\r\n    return discountNudgeContainer.querySelector('.splide') !== null;\r\n}\r\n\r\nconst processSlides = function (discountNudges: DiscountNudge[], itemsInBasket: number, groupItemsInBasket: number, slideId: string): HTMLDivElement {\r\n    const slides = document.createElement('div') as HTMLDivElement;\r\n    slides.id = 'slide_' + slideId;\r\n    slides.classList.add('splide');\r\n    slides.setAttribute('aria-label', 'Discount Nudge carousel');\r\n\r\n    const splideTrack = document.createElement('div') as HTMLDivElement;\r\n    splideTrack.classList.add('splide__track');\r\n\r\n    const ulElement = document.createElement('ul') as HTMLUListElement;\r\n    ulElement.classList.add('splide__list');\r\n\r\n    discountNudges.forEach(discountNudge => {\r\n        const slide = document.createElement('li') as HTMLLIElement;\r\n        slide.classList.add('splide__slide');\r\n        slide.setAttribute(discountIdAttributeName, getDiscountIdAttribute(discountNudge, slideId));\r\n        slide.innerHTML = getDiscountMessage(discountNudge, itemsInBasket, groupItemsInBasket);\r\n\r\n        if (discountAchieved(discountNudge, itemsInBasket, groupItemsInBasket)) {\r\n            slide.classList.add('slide-discount-achieved');\r\n        }\r\n\r\n        ulElement.appendChild(slide);\r\n    });\r\n\r\n    splideTrack.appendChild(ulElement);\r\n    slides.appendChild(splideTrack);\r\n\r\n    return slides;\r\n}\r\n\r\nconst findAchievedDiscounts = function (discountNudges: DiscountNudge[], itemsInBasket: number, groupItemsInBasket: number): DiscountNudge[] {\r\n    return discountNudges.filter(x => (x.discountNudgeType === DiscountNudgeType.CartonDiscount && itemsInBasket > 0 && (itemsInBasket % x.triggerQuantity) === 0)\r\n        || (x.discountNudgeType === DiscountNudgeType.GroupDiscount && x.triggerQuantity <= groupItemsInBasket)\r\n        || (x.discountNudgeType === DiscountNudgeType.VolumeDiscount && x.triggerQuantity <= itemsInBasket));\r\n}\r\n\r\nconst updateSlides = function (discountNudgeContainer: HTMLElement, discountNudges: DiscountNudge[], itemsInBasket: number, groupItemsInBasket: number, slideId: string){\r\n    discountNudges.forEach(discountNudge => {\r\n        // find slide to update message\r\n        const slides = discountNudgeContainer.querySelectorAll('[' + discountIdAttributeName + '=\"' + getDiscountIdAttribute(discountNudge, slideId) + '\"]');\r\n        slides.forEach(slide => {\r\n            slide.innerHTML = getDiscountMessage(discountNudge, itemsInBasket, groupItemsInBasket);\r\n        });\r\n    });\r\n}\r\n\r\nconst assessDiscountNudgeContainer = function (discountNudgeContainer: HTMLElement, alternativeDiscountNudgeContainer: HTMLElement, discountAchieved: boolean): HTMLElement {\r\n    if (alternativeDiscountNudgeContainer === null) {\r\n        return discountNudgeContainer;\r\n    }\r\n\r\n    if (discountAchieved) {\r\n        const showAchivedDiscountOnAlternative = alternativeDiscountNudgeContainer.getAttribute(showAchivedDiscountHereSelectorName) === \"true\";\r\n        if (!showAchivedDiscountOnAlternative) {\r\n            return alternativeDiscountNudgeContainer;\r\n        }\r\n    }\r\n\r\n    const showDiscountOnMain = discountNudgeContainer.getAttribute(showDiscountOnMainSelectorName) === \"true\";\r\n    if (!showDiscountOnMain) {\r\n        return alternativeDiscountNudgeContainer;\r\n    }\r\n\r\n    return discountNudgeContainer;\r\n}\r\n\r\nconst assessAchivedDiscountNudgeContainer = function (discountNudgeContainer: HTMLElement, alternativeDiscountNudgeContainer: HTMLElement, discountAchieved: boolean): HTMLElement {\r\n    if (alternativeDiscountNudgeContainer === null) {\r\n        return null;\r\n    }\r\n\r\n    if (discountAchieved) {\r\n        const showAchivedDiscountOnAlternative = alternativeDiscountNudgeContainer.getAttribute(showAchivedDiscountHereSelectorName) === \"true\";\r\n        if (!showAchivedDiscountOnAlternative) {\r\n            return discountNudgeContainer;\r\n        }\r\n    }\r\n\r\n    const showDiscountOnMain = discountNudgeContainer.getAttribute(showDiscountOnMainSelectorName) === \"true\";\r\n    if (!showDiscountOnMain) {\r\n        return discountNudgeContainer;\r\n    }\r\n\r\n    return alternativeDiscountNudgeContainer;\r\n}\r\n\r\nconst getPickerGuid = function (discountNudgeContainer: HTMLElement): string {\r\n    return discountNudgeContainer.closest('[' + discountNudgePickerGuidAttributeName + ']').getAttribute(discountNudgePickerGuidAttributeName);\r\n}\r\n\r\nconst getAlternativeDiscountNudgeContainer = function (discountNudgeContainer: HTMLElement) {\r\n    const quantityPickerGuid = getPickerGuid(discountNudgeContainer);\r\n    return document.querySelector('[' + discountNudgeAlternativeContainerSelectorName + '=\"' + quantityPickerGuid + '\"]') as HTMLElement;\r\n}\r\n\r\nconst updatediscountNudgeContainerStyling = function (discountNudgeContainer: HTMLElement, secondaryDiscountNudgeContainer: HTMLElement, discountExists: boolean) {\r\n    const orderLineContainer = discountNudgeContainer.closest('tbody.order-line');\r\n\r\n    // update classes for a correct background and show/hide order line container\r\n    if (orderLineContainer !== null) {\r\n        const priceGroupRow = orderLineContainer.querySelector(priceGroupRowClassSelectorName) as HTMLElement;\r\n        if (discountExists) {\r\n            priceGroupRow.style.display = \"table-row\";\r\n            orderLineContainer.classList.add('order-line--price-group-nudge-visible');\r\n        } else {\r\n            priceGroupRow.style.display = \"none\";\r\n            orderLineContainer.classList.remove('order-line--price-group-nudge-visible');\r\n        }\r\n    }\r\n\r\n    let discountMessageContainer = discountNudgeContainer.closest(priceDiscountMessageContainerSelectorName) as HTMLElement;\r\n\r\n    if (discountMessageContainer === null && secondaryDiscountNudgeContainer !== null) {\r\n        discountMessageContainer = secondaryDiscountNudgeContainer.closest(priceDiscountMessageContainerSelectorName) as HTMLElement;\r\n    }\r\n\r\n    // update classes for a correct background and show/hide delivery address add to basket row container\r\n    if (discountMessageContainer !== null) {\r\n        if (discountExists) {\r\n            discountMessageContainer.style.display = \"table-row\";\r\n        } else {\r\n            discountMessageContainer.style.display = \"none\";\r\n        }\r\n    }\r\n\r\n\r\n}\r\n\r\nconst hideDiscountText = function (discountNudgeContainer: HTMLElement) {\r\n    const basketRow = discountNudgeContainer.closest('[' + basketRowAttributeName + ']');\r\n\r\n    // hide carton discount text\r\n    if (basketRow !== null) {\r\n        const discountTextElement = basketRow.querySelector('.quantity-selector__before-text div');\r\n        if (discountTextElement !== null) {\r\n            discountTextElement.textContent = \"\";\r\n        }\r\n    }\r\n\r\n    const deliveryLocationBasketRow = document.querySelector('[' + basketRowAttributeName + '=\"0\"]');\r\n\r\n    // hide carton discount text for delivery locations container\r\n    if (deliveryLocationBasketRow !== null) {\r\n        const discountTextElement = deliveryLocationBasketRow.querySelector('.quantity-selector__before-text div');\r\n        if (discountTextElement !== null) {\r\n            discountTextElement.textContent = \"\";\r\n        }\r\n    }\r\n}\r\n\r\nconst processAchievedDiscount = function (achivedDiscountNudgeContainer: HTMLElement, achievedDiscount: DiscountNudge, itemsInBasket: number, groupItemsInBasket: number){\r\n    achivedDiscountNudgeContainer.innerHTML = getDiscountMessage(achievedDiscount, itemsInBasket, groupItemsInBasket);\r\n\r\n    // update classes for a correct background\r\n    if (!achivedDiscountNudgeContainer.closest('.nudge-wrapper').classList.contains('nudge-wrapper--achieved')) {\r\n        achivedDiscountNudgeContainer.closest('.nudge-wrapper').classList.remove('nudge-wrapper--suggest');\r\n        achivedDiscountNudgeContainer.closest('.nudge-wrapper').classList.add('nudge-wrapper--achieved');\r\n    }\r\n}\r\n\r\nconst hideDiscountNudgeContainerMessage = function (discountNudgeContainer: HTMLElement) {\r\n    if (discountNudgeContainer !== null) {\r\n        discountNudgeContainer.innerHTML = \"\";\r\n\r\n        // update classes for a correct background\r\n        discountNudgeContainer.closest('.nudge-wrapper').classList.remove('nudge-wrapper--suggest');\r\n        discountNudgeContainer.closest('.nudge-wrapper').classList.remove('nudge-wrapper--achieved');\r\n    }\r\n}\r\n\r\nconst showHideAllDiscountNudgeContainersOnProductListPage = function (shouldShow: boolean) {\r\n    const productListContainer = document.querySelector(productListContainerSelectorName);\r\n    if (productListContainer !== null) {\r\n        const nudgeWrappers = productListContainer.querySelectorAll(productListNudgeWrapperContainerSelectorName) as NodeListOf<HTMLElement>;\r\n\r\n        nudgeWrappers.forEach(nudgeWrapper => {\r\n            if (shouldShow) {\r\n                nudgeWrapper.style.display = 'block';\r\n            } else {\r\n                nudgeWrapper.style.display = 'none';\r\n            }\r\n        });\r\n    }\r\n}\r\n\r\nconst showHideModalAddToBasketButton = function() {\r\n    let hasValue = false;\r\n    const addToBasketItems = document.querySelectorAll(\"#itemAddToBasket [data-basket-row]\");\r\n\r\n    addToBasketItems.forEach(item => {\r\n        const id = item.getAttribute(basketRowAttributeName);\r\n        const input = item.querySelector(addToBasketQuantitySelectorName) as HTMLInputElement;\r\n        if (id !== '' && parseInt(input.value) > 0) {\r\n            hasValue = true;\r\n        }\r\n    });\r\n\r\n    const addToMultipleBasketsElement = document.querySelector(addToMultipleBasketsSelectorName);\r\n    if (addToMultipleBasketsElement !== null) {\r\n        if (hasValue) {\r\n            addToMultipleBasketsElement.classList.remove('hidden');\r\n        } else {\r\n            addToMultipleBasketsElement.classList.add('hidden');\r\n        }\r\n    }\r\n}\r\n\r\nconst getGroupItemsInBasket = function (mainDiscountNudgeContainer: HTMLElement, selectorQuantity?: number): number {\r\n    return parseInt(mainDiscountNudgeContainer.getAttribute(discountNudgeGroupItemsInBasketAttributeName))\r\n        + (selectorQuantity !== undefined ? selectorQuantity : 0);\r\n}\r\n\r\nconst getItemsInBasket = function (mainDiscountNudgeContainer: HTMLElement, selectorQuantity?: number, groupDiscountQuantityOnly?: boolean): number {\r\n    return parseInt(mainDiscountNudgeContainer.getAttribute(discountNudgeItemsInBasketAttributeName))\r\n        + ((groupDiscountQuantityOnly === undefined || groupDiscountQuantityOnly === false)\r\n            && selectorQuantity !== undefined ? selectorQuantity : 0);\r\n}\r\n\r\nconst updateItemsInBasket = function (mainDiscountNudgeContainer: HTMLElement, quantity: number){\r\n    // mainDiscountNudgeContainer.setAttribute(discountNudgeItemsInBasketAttributeName, quantity.toString());\r\n}\r\n\r\nconst processGroupDiscounts = function (mainDiscountNudgeContainer: HTMLElement, discountNudges: DiscountNudge[], selectorQuantity: number, skipStockCode: string) {\r\n    const stockCodesToUpdate: string[] = [];\r\n    const isProductListPage = document.querySelector(productListSelectorName) !== null;\r\n\r\n    // do not skip stock codes on product list page\r\n    if (isProductListPage) {\r\n        skipStockCode = \"\";\r\n    }\r\n\r\n    discountNudges.forEach(discountNudge => {\r\n        discountNudge.products.forEach(product => {\r\n            const existingItem = stockCodesToUpdate.find(x => x === product.stockCode);\r\n            if (existingItem === undefined && product.stockCode !== skipStockCode) {\r\n                stockCodesToUpdate.push(product.stockCode);\r\n            }\r\n        });\r\n    });\r\n\r\n    let containerToSearchForDiscounts = bodyElement;\r\n\r\n    // check for basket container - this is on basket page as we don't want to update group discounts from another basket\r\n    const basketContainer = mainDiscountNudgeContainer.closest('.table-basket') as HTMLElement;\r\n    if (basketContainer !== null) {\r\n        containerToSearchForDiscounts = basketContainer;\r\n    }\r\n\r\n    stockCodesToUpdate.forEach(stockCodeToUpdate => {\r\n        const discountNudgeContainers = containerToSearchForDiscounts.querySelectorAll('[' + discountNudgeStockCodeAttributeName + '=\"' + stockCodeToUpdate + '\"]') as NodeListOf<HTMLElement>;\r\n\r\n        if (discountNudgesInformation !== null && discountNudgeContainers.length > 0) {\r\n            discountNudgeContainers.forEach(discountNudgeContainer => {\r\n                if (mainDiscountNudgeContainer != discountNudgeContainer) {\r\n                    processDiscounts(discountNudgeContainer, selectorQuantity, true);\r\n                }\r\n            });\r\n        }\r\n    });\r\n}\r\n\r\nconst processDiscounts = function (mainDiscountNudgeContainer: HTMLElement, selectorQuantity?: number, groupDiscountQuantityOnly?: boolean) {\r\n    if (discountNudgesInformation === null || discountNudgesInformation === undefined) {\r\n        return;\r\n    }\r\n\r\n    // gather data needed to process discounts\r\n    const secondDiscountNudgeContainer = getAlternativeDiscountNudgeContainer(mainDiscountNudgeContainer);\r\n    const discountNudgeTypes = getDiscountNudgesToShow(mainDiscountNudgeContainer);\r\n    const stockCode = mainDiscountNudgeContainer.getAttribute(discountNudgeStockCodeAttributeName);\r\n    const previouslyAchieved = mainDiscountNudgeContainer.getAttribute(discountNudgePreviouslyAchievedAttributeName) === \"true\";\r\n    const groupItemsInBasket = getGroupItemsInBasket(mainDiscountNudgeContainer, selectorQuantity);\r\n    const itemsInBasket = getItemsInBasket(mainDiscountNudgeContainer, selectorQuantity, groupDiscountQuantityOnly);\r\n    const quantityPickerGuid = getPickerGuid(mainDiscountNudgeContainer);\r\n\r\n    // get discount nudges and check for achieved discount\r\n    let discountNudges = discountNudgesInformation.discountNudges.filter(x => x.products.some(p => p.stockCode === stockCode)\r\n        && discountNudgeTypes.some(d => d === x.discountNudgeType)\r\n        && (x.discountNudgeType !== DiscountNudgeType.CartonDiscount\r\n            || (x.triggerQuantity - (itemsInBasket % x.triggerQuantity) <= 5\r\n                || (itemsInBasket > 0 && itemsInBasket % x.triggerQuantity === 0))));\r\n\r\n    discountNudges = discountNudges.sort((x, y) => x.triggerQuantity > y.triggerQuantity ? 1 : -1);\r\n\r\n    const achievedDiscounts = findAchievedDiscounts(discountNudges, itemsInBasket, groupItemsInBasket);\r\n\r\n    if (achievedDiscounts.find(x => x.discountNudgeType === DiscountNudgeType.GroupDiscount) !== undefined) {\r\n        const cartonDiscount = discountNudges.find(x => x.discountNudgeType === DiscountNudgeType.CartonDiscount);\r\n        if (cartonDiscount !== undefined) {\r\n            const deleteIndex = discountNudges.indexOf(cartonDiscount);\r\n            discountNudges.splice(deleteIndex, 1);\r\n        }\r\n\r\n        hideDiscountText(mainDiscountNudgeContainer);\r\n    }\r\n\r\n    if (achievedDiscounts.find(x => x.discountNudgeType === DiscountNudgeType.GroupDiscount || x.discountNudgeType === DiscountNudgeType.CartonDiscount) !== undefined) {\r\n        const volumeDiscount = discountNudges.find(x => x.discountNudgeType === DiscountNudgeType.VolumeDiscount);\r\n        if (volumeDiscount !== undefined) {\r\n            const deleteIndex = discountNudges.indexOf(volumeDiscount);\r\n            discountNudges.splice(deleteIndex, 1);\r\n        }\r\n\r\n        hideDiscountText(mainDiscountNudgeContainer);\r\n    }\r\n\r\n    const isDiscountAchieved = achievedDiscounts.length > 0;\r\n    const achievedDiscount = isDiscountAchieved ? achievedDiscounts[achievedDiscounts.length - 1] : null;\r\n    let discountAchivedChange = false;\r\n\r\n    // assess where to put discount and achieved information\r\n    const discountNudgeContainer = assessDiscountNudgeContainer(mainDiscountNudgeContainer, secondDiscountNudgeContainer, isDiscountAchieved);\r\n    const achievedDiscountNudgeContainer = assessAchivedDiscountNudgeContainer(mainDiscountNudgeContainer, secondDiscountNudgeContainer, isDiscountAchieved);\r\n    \r\n    if (isDiscountAchieved) {\r\n        if (achievedDiscountNudgeContainer !== null) {\r\n            // remove achived discounts from list of discounts\r\n            achievedDiscounts.forEach(itemToDelete => {\r\n                const deleteIndex = discountNudges.indexOf(itemToDelete);\r\n                discountNudges.splice(deleteIndex, 1);\r\n            });\r\n\r\n            if (!previouslyAchieved) {\r\n                discountAchivedChange = true;\r\n            }\r\n\r\n            processAchievedDiscount(achievedDiscountNudgeContainer, achievedDiscount, itemsInBasket, groupItemsInBasket);\r\n        }\r\n    } else {\r\n        if (previouslyAchieved) {\r\n            hideDiscountNudgeContainerMessage(discountNudgeContainer);\r\n            hideDiscountNudgeContainerMessage(achievedDiscountNudgeContainer);\r\n        }\r\n\r\n        if (previouslyAchieved) {\r\n            discountAchivedChange = false;\r\n        }\r\n    }\r\n\r\n    if (discountNudges.length === 0) {\r\n        hideDiscountNudgeContainerMessage(discountNudgeContainer);\r\n    }\r\n\r\n    mainDiscountNudgeContainer.setAttribute(discountNudgePreviouslyAchievedAttributeName, isDiscountAchieved.toString());\r\n\r\n    if (discountNudges.length > 0) {\r\n        discountNudgesExists = true;\r\n        if (discountNudges.length === 1) {\r\n            discountNudgeContainer.innerHTML = '';\r\n            discountNudgeContainer.appendChild(processMessage(getDiscountMessage(discountNudges[0], itemsInBasket, groupItemsInBasket)));\r\n        }\r\n        else {\r\n            // when selectorQuantity is defined that means there was a change in basket quantity and we need to update slides. Else it's initial slides creation.\r\n            // when discountAchivedChange is false we can update slides, else recreate all slides as this needs to show new discounts.\r\n            if (selectorQuantity !== undefined && !discountAchivedChange && !previouslyAchieved && slidesExists(discountNudgeContainer)) {\r\n                updateSlides(discountNudgeContainer, discountNudges, itemsInBasket, groupItemsInBasket, quantityPickerGuid);\r\n            } else {\r\n                const slides = processSlides(discountNudges, itemsInBasket, groupItemsInBasket, quantityPickerGuid);\r\n                discountNudgeContainer.innerHTML = '';\r\n                discountNudgeContainer.appendChild(slides);\r\n\r\n                new Splide('#slide_' + quantityPickerGuid, {\r\n                    pagination: false,\r\n                    type: 'loop',\r\n                    arrowPath: 'M18.629 15.997l-7.083-7.081L13.462 7l8.997 8.997L13.457 25l-1.916-1.916z'\r\n                }).mount();\r\n            }\r\n        }\r\n\r\n        if (!discountNudgeContainer.closest('.nudge-wrapper').classList.contains('nudge-wrapper--suggest')) {\r\n            discountNudgeContainer.closest('.nudge-wrapper').classList.remove('nudge-wrapper--achieved');\r\n            discountNudgeContainer.closest('.nudge-wrapper').classList.add('nudge-wrapper--suggest');\r\n        }\r\n    }\r\n    const isBasket = document.querySelector('html').classList.contains('Basket');\r\n\r\n    if (isBasket) {\r\n        updateItemsInBasket(mainDiscountNudgeContainer, itemsInBasket);\r\n    }\r\n\r\n    // TODO update data-discount-nudge-items-in-basket to itemsInBasket value\r\n    // possible group items as well? To test!\r\n    PriceProcessor.processPrices(mainDiscountNudgeContainer, achievedDiscount, isBasket ? itemsInBasket : selectorQuantity);\r\n    updatediscountNudgeContainerStyling(discountNudgeContainer, achievedDiscountNudgeContainer, discountNudges.length > 0);\r\n    showHideModalAddToBasketButton();\r\n\r\n    // update all products with the same discount\r\n    if (selectorQuantity !== undefined\r\n        && (groupDiscountQuantityOnly === undefined || groupDiscountQuantityOnly === false)\r\n        && (discountNudges.length > 0 || isDiscountAchieved)) {\r\n        const discountToProcess: DiscountNudge[] = [];\r\n\r\n        if (discountNudges.length > 0) {\r\n            discountNudges.forEach(discountNudge => {\r\n                const existingItem = discountToProcess.find(x => x.discountId === discountNudge.discountId);\r\n                if (existingItem === undefined && discountNudge.discountNudgeType === DiscountNudgeType.GroupDiscount) {\r\n                    discountToProcess.push(discountNudge);\r\n                }\r\n            });\r\n        }\r\n\r\n        if (achievedDiscounts.length > 0) {\r\n            achievedDiscounts.forEach(discountNudge => {\r\n                const existingItem = discountToProcess.find(x => x.discountId === discountNudge.discountId);\r\n                if (existingItem === undefined && discountNudge.discountNudgeType === DiscountNudgeType.GroupDiscount) {\r\n                    discountToProcess.push(discountNudge);\r\n                }\r\n            });\r\n        }\r\n\r\n        processGroupDiscounts(mainDiscountNudgeContainer, discountToProcess, selectorQuantity, stockCode);\r\n    }\r\n}\r\n\r\n// Method called when quantite has been updated\r\nexport function updateDiscountNudgeByProductQuantity(quantityPickerGuid: string, selectorQuantity: number): boolean {\r\n    const quantityPickerContainer = document.querySelector('[' + discountNudgePickerGuidAttributeName + '=\"' + quantityPickerGuid + '\"' + ']') as HTMLElement;\r\n    const discountNudgeContainer = quantityPickerContainer.querySelector('[' + discountNudgeStockCodeAttributeName + ']') as HTMLElement;\r\n\r\n    if (discountNudgesInformation !== null && discountNudgesInformation !== undefined && discountNudgeContainer !== null) {\r\n        processDiscounts(discountNudgeContainer, selectorQuantity);\r\n\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nexport function updateInBasketValues(quantityPickerGuid: string, selectorQuantity: number) {\r\n    if (productPageContainer !== null) {\r\n        const quantityPickerContainer = document.querySelector('[' + discountNudgePickerGuidAttributeName + '=\"' + quantityPickerGuid + '\"' + ']') as HTMLElement;\r\n        const discountNudgeContainer = quantityPickerContainer.querySelector('[' + discountNudgeStockCodeAttributeName + ']') as HTMLElement;\r\n\r\n        if (discountNudgesInformation !== null && discountNudgesInformation !== undefined && discountNudgeContainer !== null) {\r\n\r\n            let tempDiscountNudgeItemsInBasket = parseInt(discountNudgeContainer.getAttribute(discountNudgeItemsInBasketAttributeName));\r\n            let tempDiscountNudgeGroupItemsInBasket = parseInt(discountNudgeContainer.getAttribute(discountNudgeGroupItemsInBasketAttributeName));\r\n            tempDiscountNudgeItemsInBasket += selectorQuantity;\r\n            tempDiscountNudgeGroupItemsInBasket += selectorQuantity;\r\n            discountNudgeContainer.setAttribute(discountNudgeItemsInBasketAttributeName, tempDiscountNudgeItemsInBasket.toString());\r\n            discountNudgeContainer.setAttribute(discountNudgeGroupItemsInBasketAttributeName, tempDiscountNudgeGroupItemsInBasket.toString());\r\n        }\r\n    }\r\n}\r\n\r\nexport function processAllDiscountNudges() {\r\n    // Make sure that this is not started twice.\r\n    if (processAllDiscountNudgesStarted) {\r\n        return;\r\n    }\r\n\r\n    processAllDiscountNudgesStarted = true;\r\n\r\n    let discountNudgeInformationAttribute = \"\";\r\n\r\n    if (bodyElement !== null) {\r\n        discountNudgeInformationAttribute = bodyElement.getAttribute(discountNudgeInformationAttributeName);\r\n    }\r\n\r\n    // Continue process\r\n    if (discountNudgeInformationAttribute === \"\") {\r\n        showHideAllDiscountNudgeContainersOnProductListPage(false);\r\n        processAllDiscountNudgesStarted = false;\r\n        return;\r\n    }\r\n\r\n    discountNudgesExists = false;\r\n\r\n    const discountNudgesInformationJson = JSON.parse(discountNudgeInformationAttribute);\r\n    discountNudgesInformation = Object.assign(new DiscountNudgesInformation(), discountNudgesInformationJson);\r\n\r\n    const discountNudgeContainers = document.querySelectorAll(discountNudgeContainerSelectorName) as NodeListOf<HTMLElement>;\r\n\r\n    // Process discount nudges if available\r\n    if (discountNudgesInformation.discountNudges.length > 0\r\n        && discountNudgeContainers.length > 0) {\r\n        discountNudgeContainers.forEach(el => {\r\n            processDiscounts(el);\r\n        });\r\n    }\r\n\r\n    showHideAllDiscountNudgeContainersOnProductListPage(discountNudgesExists);\r\n    processAllDiscountNudgesStarted = false;\r\n}\r\n\r\nexport function UpdateNudgeHeight() {\r\n\r\n    var tallest = 0;\r\n    const productListContainerSelectorName = \".product-list\";\r\n    const productListNudgeWrapperContainerSelectorName = \".product-summary__nudge.nudge-wrapper\";\r\n\r\n    const productListContainer = document.querySelector(productListContainerSelectorName);\r\n    if (productListContainer !== null) {\r\n\r\n        // Get Height Nudge\r\n        const nudgeWrappers = productListContainer.querySelectorAll(productListNudgeWrapperContainerSelectorName) as NodeListOf<HTMLElement>;\r\n\r\n        nudgeWrappers.forEach(nudgeWrapper => {\r\n            const thisHeight = nudgeWrapper.offsetHeight;\r\n            if (thisHeight > tallest) {\r\n                tallest = thisHeight;\r\n            }\r\n        });\r\n\r\n        const classProductSummaryNudge = \".product-summary__nudge\"\r\n        const elementProductSummaryNudge = document.querySelectorAll(classProductSummaryNudge) as NodeListOf<HTMLElement>;\r\n        elementProductSummaryNudge.forEach(elementProductSummaryNudge => {\r\n            const element = elementProductSummaryNudge as HTMLElement;\r\n            element.style.height = String(tallest) + \"px\";\r\n        });\r\n    }\r\n} \r\n\r\n// Main entry to process discounts\r\nwindow.addEventListener(\"load\", () => {\r\n    processAllDiscountNudges();\r\n    UpdateNudgeHeight(); \r\n});\r\n"]}