{"version":3,"file":"quote.1cb85dd10842387192fd.js","mappings":"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","sources":["webpack://jcb.com/./src/js/components/quote.js"],"sourcesContent":["import $ from 'jquery';\r\n\r\n// TODO: JFED-002 - Update Swiper to latest\r\nconst Shuffle = require('shufflejs/dist/shuffle'),\r\n Swiper = require('swiper'),\r\n anims = require('./animations.js'),\r\n _findIndex = require('lodash/findIndex.js'),\r\n _indexOf = require('lodash/indexOf.js'),\r\n _isEqual = require('lodash/isEqual'),\r\n _join = require('lodash/join.js'),\r\n _pull = require('lodash/pull'),\r\n _uniq = require('lodash/uniq'),\r\n _uniqWith = require('lodash/uniqWith');\r\n\r\nimport quotemodal from './quotemodal.js';\r\n\r\nexport default class Quote {\r\n constructor(el) {\r\n this.el = el;\r\n this.lang = document.getElementsByTagName('html')[0].getAttribute('lang');\r\n this.shufflerFilter = [];\r\n this.selectedItems = [];\r\n this.selectedIds = [];\r\n this.activeStep = '#step1';\r\n this.loadingCount = 0;\r\n this.isModalEnabled = this.el.getAttribute('data-ismodalenabled').toLowerCase() === 'true';\r\n if (!this.isModalEnabled) {\r\n this.init();\r\n } else {\r\n this.initModalEnabled();\r\n }\r\n }\r\n\r\n get windowWidth() {\r\n return window.innerWidth;\r\n }\r\n\r\n get categoryListItems() {\r\n // return results as true array rather than node list\r\n return Array.prototype.slice.call(\r\n this.el.querySelectorAll('.jcb-quote-form--categories--item'),\r\n );\r\n }\r\n\r\n get categoryListWrapperWidth() {\r\n return this.el.querySelector('.jcb-quote-form--categories--list-wrapper').offsetWidth;\r\n }\r\n\r\n get sliderOptions() {\r\n let options = {},\r\n windowWidth = this.windowWidth;\r\n\r\n switch (true) {\r\n case windowWidth >= 1200:\r\n options.multiplier = 0.25;\r\n options.slidesInView = 4;\r\n options.centered = false;\r\n break;\r\n case windowWidth >= 992:\r\n options.multiplier = 0.25;\r\n options.slidesInView = 4;\r\n options.centered = false;\r\n break;\r\n case windowWidth >= 768:\r\n options.multiplier = 0.333;\r\n options.slidesInView = 3;\r\n options.centered = false;\r\n break;\r\n case windowWidth >= 576:\r\n options.multiplier = 0.5;\r\n options.slidesInView = 2;\r\n options.centered = false;\r\n break;\r\n default:\r\n options.multiplier = 0.5;\r\n options.slidesInView = 2;\r\n options.centered = true;\r\n }\r\n return options;\r\n }\r\n\r\n get categoryItemWidth() {\r\n return this.el.querySelector('.jcb-quote-form--categories--item:first-child').offsetWidth;\r\n }\r\n\r\n get categoryModels() {\r\n const modelsArr = [],\r\n modelTags = Array.prototype.slice.call(\r\n this.el.querySelectorAll('.jcb-quote-form--results--tag'),\r\n );\r\n\r\n for (let t in modelTags) {\r\n modelsArr.push({\r\n uid: modelTags[t].getAttribute('data-model'),\r\n modelName: modelTags[t].getAttribute('data-model-name'),\r\n });\r\n }\r\n return _uniqWith(modelsArr, _isEqual);\r\n }\r\n\r\n get filterItems() {\r\n return Array.prototype.slice.call(\r\n this.el.querySelectorAll('.jcb-quote-form--results--filter-item'),\r\n );\r\n }\r\n\r\n get resultItems() {\r\n return Array.prototype.slice.call(this.el.querySelectorAll('.jcb-quote-form--results--item'));\r\n }\r\n\r\n init() {\r\n this.setCategoryItemWidth();\r\n this.setCategoryListWidth();\r\n this.inlineCategoryIcons();\r\n this.attachCategoryEvents();\r\n this.initCategoryCarousel();\r\n this.initSearchTypeTabs();\r\n this.initCollapsibleForm();\r\n this.handleQuerystringData();\r\n this.handleFormSubmit();\r\n }\r\n\r\n initModalEnabled() {\r\n this.setCategoryItemWidth();\r\n this.setCategoryListWidth();\r\n this.inlineCategoryIcons();\r\n this.attachCategoryEvents();\r\n this.initCategoryCarousel();\r\n this.initSearchTypeTabs();\r\n this.initSearchTypeTabsModalEnabled();\r\n this.handleQuerystringDataModalEnabled();\r\n this.handleFormSubmit();\r\n }\r\n\r\n setCategoryItemWidth() {\r\n let items = this.categoryListItems,\r\n itemWidth = this.categoryListWrapperWidth * this.sliderOptions.multiplier;\r\n\r\n for (let i in items) {\r\n let item = items[i];\r\n item.style.width = itemWidth + 'px';\r\n }\r\n }\r\n\r\n setCategoryListWidth() {\r\n this.el.querySelector('.jcb-quote-form--categories--list').style.width =\r\n this.categoryListItems.length * this.categoryItemWidth + this.categoryListItems.length + 'px';\r\n }\r\n\r\n inlineCategoryIcons() {\r\n this.el.querySelector('.jcb-quote-form--categories--list').classList.remove('is-pre-init');\r\n }\r\n\r\n attachCategoryEvents() {\r\n const categories = this.categoryListItems,\r\n that = this;\r\n\r\n for (let c in categories) {\r\n categories[c].addEventListener('click', (event) => {\r\n const categoryItem = event.target.closest('[data-category]'),\r\n categoryType = categoryItem.getAttribute('data-category-type');\r\n\r\n that.selectCategory(categoryItem);\r\n if (this.sliderOptions.centered) {\r\n this.slideCategoryCarouselToSelected();\r\n }\r\n that.activeStep = '#step1';\r\n });\r\n }\r\n }\r\n\r\n slideCategoryCarouselToSelected() {\r\n const list = this.el.querySelector('.jcb-quote-form--categories--list');\r\n const selectedProduct = list.querySelector('.is-active');\r\n const slideToIndex = selectedProduct ? [...list.children].indexOf(selectedProduct) : 0;\r\n const categoryCarousel = this.el.querySelector(\r\n '.jcb-quote-form--categories--list-wrapper',\r\n ).swiper;\r\n\r\n categoryCarousel.slideTo(slideToIndex);\r\n }\r\n\r\n slideProductCarouselToSelected() {\r\n const list = this.el.querySelector('.jcb-quote-form--results--list');\r\n const selectedProduct = list.querySelector('.is-selected');\r\n const slideToIndex = selectedProduct ? [...list.children].indexOf(selectedProduct) : 0;\r\n const productCarousel = this.el.querySelector('.jcb-quote-form--results--list-wrapper').swiper;\r\n\r\n productCarousel.slideTo(slideToIndex);\r\n }\r\n\r\n initCategoryCarousel() {\r\n let range = document.createRange();\r\n\r\n range.selectNode(document.body);\r\n\r\n const categorySection = this.el.querySelector('.jcb-quote-form--categories .container'),\r\n existingNav = this.el.querySelector('.jcb-quote-form--categories--nav'),\r\n nextPrevButtons = range.createContextualFragment(\r\n '
',\r\n ),\r\n that = this;\r\n\r\n if (!existingNav) {\r\n categorySection.insertBefore(nextPrevButtons, categorySection.childNodes[0]);\r\n }\r\n\r\n this.allCategorySlides = this.categoryListItems;\r\n\r\n this.categoryCarousel = new Swiper('.jcb-quote-form--categories--list-wrapper', {\r\n slidesPerView: this.sliderOptions.slidesInView,\r\n slideClass: 'jcb-quote-form--categories--item',\r\n wrapperClass: 'jcb-quote-form--categories--list',\r\n nextButton: '.jcb-quote-form--categories--nav .next',\r\n prevButton: '.jcb-quote-form--categories--nav .previous',\r\n centeredSlides: this.sliderOptions.centered,\r\n observer: true,\r\n onImagesReady: function () {\r\n setTimeout(function () {\r\n that.slideCategoryCarouselToSelected();\r\n }, 400);\r\n },\r\n });\r\n }\r\n\r\n initProductCarousel() {\r\n let range = document.createRange();\r\n\r\n range.selectNode(document.body);\r\n\r\n const productsSection = this.el.querySelector('.jcb-quote-form--results'),\r\n container = productsSection.querySelector('.container'),\r\n heading = productsSection.querySelector('h3'),\r\n existingNav = this.el.querySelector('.jcb-quote-form--products--nav'),\r\n nextPrevButtons = range.createContextualFragment(\r\n '
',\r\n ),\r\n orginal_html = container.innerHTML,\r\n new_html = `
\r\n
\r\n ${orginal_html} \r\n
\r\n
`,\r\n that = this;\r\n\r\n container.innerHTML = new_html;\r\n container.insertBefore(heading.cloneNode(true), container.childNodes[0]);\r\n\r\n if (!existingNav) {\r\n container.insertBefore(nextPrevButtons, container.childNodes[0]);\r\n }\r\n\r\n this.showSpinner();\r\n this.updateTabClassesOnSecondSlider();\r\n\r\n const allProductSlides = Array.prototype.slice.call(\r\n this.el.querySelectorAll('.jcb-quote-form--results--item'),\r\n );\r\n const productItemWidth = this.el.querySelector(\r\n '.jcb-quote-form--results--item:first-child',\r\n ).offsetWidth;\r\n let items = allProductSlides,\r\n itemWidth =\r\n this.el.querySelector('.jcb-quote-form--results--list-wrapper').offsetWidth *\r\n this.sliderOptions.multiplier;\r\n\r\n for (let i in items) {\r\n let item = items[i];\r\n item.style.width = itemWidth + 'px';\r\n }\r\n\r\n this.el.querySelector('.jcb-quote-form--results--list').style.width =\r\n allProductSlides.length * productItemWidth + allProductSlides.length + 'px';\r\n\r\n this.productCarousel = new Swiper('.jcb-quote-form--results--list-wrapper', {\r\n slidesPerView: this.sliderOptions.slidesInView,\r\n slideClass: 'jcb-quote-form--results--item',\r\n wrapperClass: 'jcb-quote-form--results--list',\r\n nextButton: '.jcb-quote-form--results--nav .next',\r\n prevButton: '.jcb-quote-form--results--nav .previous',\r\n centeredSlides: this.sliderOptions.centered,\r\n observer: true,\r\n onImagesReady: () => {\r\n that.slideProductCarouselToSelected();\r\n setTimeout(function () {\r\n that.scrollTo(that.activeStep);\r\n that.hideSpinner();\r\n }, 400);\r\n },\r\n });\r\n }\r\n\r\n handleQuerystringData() {\r\n const urlRange = this.getUrlParameter('range'),\r\n urlModel = this.getUrlParameter('model');\r\n\r\n if (urlRange !== '') {\r\n const rangeItem = this.el.querySelector(\r\n `.jcb-quote-form--categories--item[data-category=\"${urlRange}\"]`,\r\n );\r\n\r\n if (urlModel !== '') {\r\n //this.selectCategory(rangeItem, this.selectModelFilter, urlModel);\r\n this.selectCategory(rangeItem, this.selectModelFromQueryString, urlModel);\r\n this.activeStep = '#step3';\r\n this.openCollapsibleForm();\r\n } else {\r\n this.selectCategory(rangeItem);\r\n }\r\n }\r\n }\r\n\r\n handleQuerystringDataModalEnabled() {\r\n const urlRange = this.getUrlParameter('range'),\r\n urlModel = this.getUrlParameter('model');\r\n\r\n if (urlRange !== '') {\r\n const rangeItem = this.el.querySelector(\r\n `.jcb-quote-form--categories--item[data-category=\"${urlRange}\"]`,\r\n );\r\n\r\n if (urlModel !== '') {\r\n this.selectCategory(rangeItem, this.selectModelFromQueryString, urlModel);\r\n } else {\r\n this.selectCategory(rangeItem);\r\n }\r\n }\r\n }\r\n\r\n getUrlParameter(name) {\r\n name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\r\n var results = regex.exec(location.search);\r\n\r\n return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\r\n }\r\n\r\n inlineIcon(img) {\r\n const src = img.getAttribute('src');\r\n\r\n if (src.indexOf('svg') !== -1) {\r\n fetch(src)\r\n .then((response) => response.text())\r\n .then((svg) => {\r\n let parser = new DOMParser(),\r\n svgDOM = parser.parseFromString(svg, 'image/svg+xml'),\r\n svgEl = svgDOM.querySelector('svg'),\r\n item = img.parentNode;\r\n item.insertBefore(svgEl, img);\r\n item.removeChild(img);\r\n });\r\n }\r\n }\r\n\r\n initFilter() {}\r\n\r\n selectCategory(categoryItem) {\r\n const currentCategoryItem = _findIndex(this.allCategorySlides, (item) =>\r\n item.classList.contains('is-active'),\r\n ),\r\n currentCategory =\r\n currentCategoryItem > -1\r\n ? this.allCategorySlides[currentCategoryItem].getAttribute('data-category')\r\n : null,\r\n newCategory = categoryItem.getAttribute('data-category'),\r\n categoryType = categoryItem.getAttribute('data-category-type'),\r\n callback = arguments[1],\r\n modelUid = arguments[2],\r\n categoryList = this.el.querySelector('.jcb-quote-form--categories--list');\r\n\r\n categoryList.className = 'jcb-quote-form--categories--list'; //remove other classes\r\n categoryList.classList.add('selected-' + categoryType);\r\n\r\n if (currentCategoryItem > -1 && currentCategory !== newCategory) {\r\n for (let s in this.allCategorySlides) {\r\n this.allCategorySlides[s].classList.remove('is-active');\r\n }\r\n }\r\n if (currentCategory !== newCategory) {\r\n for (let s2 in this.allCategorySlides) {\r\n if (this.allCategorySlides[s2].getAttribute('data-category') === newCategory) {\r\n this.allCategorySlides[s2].classList.add('is-active');\r\n\r\n if (callback) {\r\n this.getRangeModels(newCategory, callback, modelUid);\r\n } else {\r\n this.getRangeModels(newCategory);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateModelCount() {\r\n const totalModels = this.el.querySelectorAll('.jcb-quote-form--results--item'),\r\n visibleModels = this.el.querySelectorAll(\r\n '.jcb-quote-form--results--item:not([aria-hidden])',\r\n ).length,\r\n activeFilters = this.shufflerFilter,\r\n activeRange = this.el\r\n .querySelector('.jcb-quote-form--categories--item.is-active')\r\n .getAttribute('data-category-english-name'),\r\n resultsHeading = this.el.querySelector('.jcb-quote-form--results--heading'),\r\n resultsCount = resultsHeading.querySelector('.count'),\r\n resultsRange = resultsHeading.querySelector('.range'),\r\n resultsMatching = resultsHeading.querySelector('.matching'),\r\n resultsMatchingTags = resultsHeading.querySelector('.tags');\r\n\r\n if (totalModels.length === 0) {\r\n resultsHeading.style.display = 'none';\r\n } else {\r\n resultsHeading.style.display = 'block';\r\n resultsCount.innerText = visibleModels + '';\r\n resultsRange.innerText = activeRange;\r\n if (activeFilters.length > 0) {\r\n resultsMatchingTags.innerText = activeFilters.join(', ');\r\n resultsMatching.style.display = 'inline';\r\n } else {\r\n resultsMatching.style.display = 'none';\r\n }\r\n }\r\n }\r\n\r\n getRangeModels(uid, callback, modelUid) {\r\n const that = this,\r\n isProductSearch =\r\n this.el\r\n .querySelector('.jcb-quote-form--categories--item.is-active')\r\n .getAttribute('data-category-type') === 'product',\r\n url = isProductSearch\r\n ? `/api/v1/datahandler/machines/${this.lang}/${uid}`\r\n : `/api/v1/datahandler/attachments/${this.lang}/${uid}`;\r\n\r\n this.showSpinner().then(() => {\r\n that.hideSearchError();\r\n fetch(url, { method: 'GET', credentials: 'include' })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n if (json.length > 0) {\r\n that\r\n .renderModels(json)\r\n .then(() => {\r\n that.initProductCarousel();\r\n if (!this.isModalEnabled) {\r\n that.attachResultEvents();\r\n } else {\r\n that.attachResultModalEvents();\r\n }\r\n\r\n if (callback) {\r\n callback.apply(that, [modelUid]);\r\n }\r\n that.hideSpinner();\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n });\r\n } else {\r\n that.hideSpinner().then(() => that.showSearchError());\r\n }\r\n })\r\n .catch((error) => {\r\n that.hideSpinner().then(() => that.showSearchError());\r\n console.error(error);\r\n });\r\n });\r\n }\r\n\r\n showSpinner() {\r\n return new Promise((resolve, reject) => {\r\n if (this.loadingCount < 1) {\r\n let range = document.createRange();\r\n range.selectNode(document.body);\r\n const frag = range.createContextualFragment(\r\n '
Searching...
',\r\n ),\r\n target = this.el;\r\n\r\n this.loadingCount++;\r\n target.appendChild(frag);\r\n anims.fadeIn(target.querySelector('.search-waiting-overlay')).then(() => resolve(true));\r\n } else {\r\n this.loadingCount++;\r\n resolve(true);\r\n }\r\n });\r\n }\r\n\r\n hideSpinner() {\r\n return new Promise((resolve, reject) => {\r\n if (this.loadingCount == 1) {\r\n const spinner = this.el.querySelector('.search-waiting-overlay'),\r\n target = this.el;\r\n\r\n this.loadingCount--;\r\n anims.fadeOut(spinner).then(() => {\r\n target.removeChild(spinner);\r\n resolve(true);\r\n });\r\n } else {\r\n this.loadingCount--;\r\n resolve(true);\r\n }\r\n });\r\n }\r\n\r\n showSearchError() {\r\n let range = document.createRange();\r\n\r\n range.selectNode(document.body);\r\n\r\n const target = this.el.querySelector('.jcb-quote-form--categories > .container'),\r\n errorMsg = range.createContextualFragment(\r\n '

!Something went wrong. Please try again

',\r\n );\r\n\r\n target.appendChild(errorMsg);\r\n anims.fadeIn(this.el.querySelector('.search-error-message'));\r\n }\r\n\r\n hideSearchError() {\r\n return new Promise((resolve, reject) => {\r\n const target = this.el.querySelector('.search-error-message');\r\n if (target) {\r\n anims.fadeOut(target).then(() => {\r\n target.parentNode.removeChild(target);\r\n resolve(true);\r\n });\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n }\r\n\r\n renderModels(json) {\r\n return new Promise((resolve, reject) => {\r\n let range = document.createRange();\r\n range.selectNode(document.body);\r\n var rangeElm = this.el.querySelector('.jcb-quote-form--categories--item.is-active');\r\n var rangeEnglishName = rangeElm.getAttribute('data-category-english-name');\r\n var isModalEnabled = this.isModalEnabled;\r\n\r\n const models = json,\r\n target = this.el.querySelector('.jcb-quote-form--results > .container'),\r\n resultStr = isModalEnabled\r\n ? range.createContextualFragment(\r\n `${models\r\n .map(\r\n (item, index) => `
\r\n \r\n \"${item.Name}\"\r\n \r\n \r\n \r\n ${item.Name}\r\n \r\n
`,\r\n )\r\n .join('')}`,\r\n )\r\n : range.createContextualFragment(\r\n `${models\r\n .map(\r\n (item, index) => `
\r\n \r\n \"${item.Name}\"\r\n \r\n \r\n \r\n ${item.Name}\r\n
`,\r\n )\r\n .join('')}`,\r\n );\r\n\r\n target.innerHTML = '';\r\n target.appendChild(resultStr);\r\n\r\n resolve(true);\r\n });\r\n }\r\n\r\n attachFilterEvents() {\r\n const filters = this.filterItems,\r\n filterToggle = this.el.querySelector('.jcb-quote-form--results--filter-toggle'),\r\n that = this;\r\n\r\n for (let f in filters) {\r\n filters[f].addEventListener('click', function () {\r\n that.toggleFilterState(filters[f]);\r\n });\r\n }\r\n if (!filterToggle.classList.contains('init')) {\r\n filterToggle.addEventListener('click', function () {\r\n that.toggleFilter();\r\n });\r\n filterToggle.classList.add('init');\r\n }\r\n }\r\n\r\n selectModelFilter(uid) {\r\n const targetFilter = this.el.querySelector(\r\n `.jcb-quote-form--results--filter-item[data-model=\"${uid}\"]`,\r\n );\r\n\r\n this.toggleFilterState(targetFilter);\r\n }\r\n\r\n selectModelFromQueryString(uid) {\r\n const Model = this.el.querySelector(`[id=\"${uid}\"]`);\r\n\r\n this.updateCart(Model);\r\n }\r\n\r\n updateFormFields(elm, selector) {\r\n var product = $(elm).attr('data-name');\r\n var range = $(elm).attr('data-category-english-name');\r\n\r\n Quote.populateFormSalesforceField(\r\n 'Input-Range-Models',\r\n product,\r\n range\r\n );\r\n }\r\n\r\n static populateFormSalesforceField(fieldName, product = null, range = null) {\r\n const salesForceField = document.getElementById(fieldName);\r\n var formRangeNameField = [...document.getElementsByClassName('js-range-name')];\r\n var formProductNameField = [...document.getElementsByClassName('js-product-name')];\r\n\r\n if (salesForceField && range) {\r\n salesForceField.value = range;\r\n formRangeNameField.forEach(field => field.value = range);\r\n }\r\n\r\n if (salesForceField && product && range) {\r\n salesForceField.value = range + ';' + product;\r\n formRangeNameField.forEach(field => field.value = range);\r\n formProductNameField.forEach(field => field.value = product);\r\n }\r\n }\r\n\r\n attachResultEvents() {\r\n const results = this.resultItems,\r\n that = this;\r\n\r\n for (let r in results) {\r\n results[r].addEventListener('click', (event) => {\r\n that.updateCart(event);\r\n that.scrollTo('#step3');\r\n that.updateFormFields(results[r]);\r\n this.openCollapsibleForm();\r\n });\r\n }\r\n }\r\n\r\n attachResultModalEvents() {\r\n const results = this.resultItems;\r\n\r\n for (let r in results) {\r\n quotemodal.bindModal($(results[r]));\r\n }\r\n }\r\n\r\n toggleFilter() {\r\n const button = this.el.querySelector('.jcb-quote-form--results--filter-toggle'),\r\n target = this.el.querySelector('.jcb-quote-form--results--filter');\r\n\r\n if (target.classList.contains('is-active')) {\r\n target.classList.remove('is-active');\r\n button.classList.remove('is-active');\r\n button.innerHTML = button.innerHTML.replace('Hide', 'Show');\r\n $(target).slideUp('fast');\r\n } else {\r\n target.classList.add('is-active');\r\n button.classList.add('is-active');\r\n button.innerHTML = button.innerHTML.replace('Show', 'Hide');\r\n $(target).slideDown('fast');\r\n }\r\n }\r\n\r\n toggleFilterState(el) {\r\n const model = el.getAttribute('data-model-name');\r\n\r\n if (el.classList.contains('is-active')) {\r\n el.classList.remove('is-active');\r\n el.querySelector('i').setAttribute('class', 'fa fa-square-o');\r\n this.filterResults('remove', model);\r\n } else {\r\n el.classList.add('is-active');\r\n el.querySelector('i').setAttribute('class', 'fa fa-check-square');\r\n this.filterResults('add', model);\r\n }\r\n }\r\n\r\n filterResults(method, model) {\r\n if (method === 'remove') {\r\n _pull(this.shufflerFilter, model);\r\n } else {\r\n this.shufflerFilter.push(model);\r\n }\r\n this.shuffler.filter(this.shufflerFilter);\r\n this.updateModelCount();\r\n }\r\n\r\n updateCart(event) {\r\n const target = event.target ? event.target.closest('[data-groups]') : event,\r\n id = target.getAttribute('id'),\r\n models = target.getAttribute('data-groups').split(','),\r\n name = target.querySelector('.jcb-quote-form--results--name').innerText,\r\n img = target.querySelector('img').getAttribute('src'),\r\n category = this.el\r\n .querySelector('.jcb-quote-form--tab.is-active')\r\n .getAttribute('data-category-type'),\r\n range = this.el\r\n .querySelector('.jcb-quote-form--categories--item.is-active')\r\n .getAttribute('data-category-english-name'),\r\n el = target,\r\n item = { id, name, category, range, models, img, el };\r\n\r\n if (_indexOf(this.selectedIds, id) > -1) {\r\n // item is in selection and needs to be removed\r\n this.removeFromCart(item);\r\n } else {\r\n // add item to selection\r\n if (this.isModalEnabled) {\r\n this.addToCartModalEnabled(item);\r\n } else {\r\n this.addToCart(item);\r\n }\r\n }\r\n }\r\n\r\n addToCart(item) {\r\n let range = document.createRange();\r\n\r\n range.selectNode(document.body);\r\n\r\n const that = this,\r\n cartList = document.querySelector('.jcb-quote-form--cart--items'),\r\n li = document.createElement('li'),\r\n cartItem = range.createContextualFragment(\r\n '' +\r\n _join(item.models, ', ') +\r\n ' ' +\r\n item.name,\r\n );\r\n\r\n // for quote form we only want a single model, so clear out the current version\r\n this.selectedItems.forEach((i, index) => {\r\n that.removeFromCart(i);\r\n });\r\n\r\n this.selectedItems.push(item);\r\n this.selectedIds.push(item.id);\r\n\r\n this.el.querySelector('.jcb-quote-form--results--list').classList.add('selected');\r\n item.el.classList.add('is-selected');\r\n\r\n li.className = 'jcb-quote-form--cart--item';\r\n li.setAttribute('data-id', item.id);\r\n li.appendChild(cartItem);\r\n li.addEventListener('click', () => {\r\n that.removeFromCart(item);\r\n });\r\n cartList.appendChild(li);\r\n\r\n this.updateCartDisplay();\r\n\r\n if (this.categoryItemCentered) {\r\n this.slideProductCarouselToSelected();\r\n }\r\n }\r\n\r\n addToCartModalEnabled(item) {\r\n let range = document.createRange();\r\n\r\n range.selectNode(document.body);\r\n\r\n // for quote form we only want a single model, so clear out the current version\r\n this.selectedItems.forEach((i, index) => {\r\n that.removeFromCart(i);\r\n });\r\n\r\n this.selectedItems.push(item);\r\n this.selectedIds.push(item.id);\r\n\r\n this.el.querySelector('.jcb-quote-form--results--list').classList.add('selected');\r\n item.el.classList.add('is-selected');\r\n\r\n if (this.categoryItemCentered) {\r\n this.slideProductCarouselToSelected();\r\n }\r\n\r\n $(item.el).trigger('click');\r\n }\r\n\r\n removeFromCart(item) {\r\n const cartItem = document.querySelector('[data-id=\"' + item.id + '\"]');\r\n\r\n cartItem.parentNode.removeChild(cartItem);\r\n\r\n this.selectedItems = [];\r\n this.selectedIds = [];\r\n item.el.classList.remove('is-selected');\r\n document.querySelector('.jcb-quote-form--results--list').classList.remove('selected');\r\n\r\n this.updateCartDisplay();\r\n this.scrollTo('#step1');\r\n }\r\n\r\n updateCartDisplay() {\r\n this.populateCartInfoForSubmit();\r\n }\r\n\r\n /**\r\n * TABS FUNCTIONS\r\n */\r\n\r\n initSearchTypeTabs() {\r\n const tabs = this.searchTypeTabs,\r\n that = this,\r\n selectedTab = this.getUrlParameter('tab') || 0;\r\n\r\n for (let t in tabs) {\r\n tabs[t].addEventListener('click', (event) => that.toggleSearchType(event));\r\n }\r\n\r\n this.updateCategoryItems(\r\n this.el\r\n .querySelector('.jcb-quote-form--tabs > .is-active')\r\n .getAttribute('data-category-type'),\r\n );\r\n\r\n tabs[selectedTab].click();\r\n }\r\n\r\n initSearchTypeTabsModalEnabled() {\r\n const tabs = this.searchTypeTabs,\r\n that = this,\r\n selectedTab = this.getUrlParameter('tab') || 0;\r\n\r\n for (let t in tabs) {\r\n tabs[t].addEventListener('click', (event) => that.toggleSearchType(event));\r\n }\r\n tabs[selectedTab].click();\r\n }\r\n\r\n toggleSearchType(event) {\r\n const clicked = event.target,\r\n categoryType = clicked.getAttribute('data-category-type'),\r\n tabsWrapper = this.el.querySelector('.jcb-quote-form--tabs-wrapper');\r\n\r\n if (!clicked.classList.contains('is-active')) {\r\n this.updateCategoryItems(categoryType);\r\n this.el.querySelector('.jcb-quote-form--tabs .is-active').classList.remove('is-active');\r\n clicked.classList.add('is-active');\r\n tabsWrapper.className = 'jcb-quote-form--tabs-wrapper'; //remove other classes\r\n tabsWrapper.classList.add(categoryType + '-tab-active');\r\n }\r\n }\r\n\r\n updateTabClassesOnSecondSlider() {\r\n const categoryType = this.el\r\n .querySelector('.jcb-quote-form--categories--item')\r\n .getAttribute('data-category-type'),\r\n jcbQuoteFormResults = this.el.querySelector('.jcb-quote-form--results');\r\n\r\n jcbQuoteFormResults.className = 'jcb-quote-form--results'; //remove other classes\r\n jcbQuoteFormResults.classList.add(categoryType + '-results');\r\n }\r\n\r\n updateCategoryItems(categoryType) {\r\n const allItems = this.allCategorySlides;\r\n const categoryFormField = document.getElementById('category');\r\n\r\n if (categoryFormField) {\r\n categoryFormField.value = categoryType;\r\n }\r\n\r\n this.categoryCarousel.removeAllSlides();\r\n\r\n for (let i in allItems) {\r\n if (allItems[i].getAttribute('data-category-type') === categoryType) {\r\n //anims.fadeIn(allItems[i]);\r\n this.categoryCarousel.appendSlide(allItems[i]);\r\n }\r\n }\r\n this.categoryCarousel.update();\r\n this.slideCategoryCarouselToSelected();\r\n }\r\n\r\n get searchTypeTabs() {\r\n return Array.prototype.slice.call(this.el.querySelectorAll('.jcb-quote-form--tabs > li'));\r\n }\r\n\r\n /**\r\n * FORM FUNCTIONS\r\n */\r\n\r\n handleFormSubmit() {\r\n const form = document.querySelector('.form-component-outer form'),\r\n that = this;\r\n\r\n form.addEventListener('submit', () => {\r\n that.populateCartInfoForSubmit();\r\n if ($(form).valid()) {\r\n form.querySelector('input[type=submit]').disabled = true;\r\n }\r\n });\r\n }\r\n\r\n populateCartInfoForSubmit() {\r\n const salesForceField = document.getElementById('Input-Range-Models');\r\n\r\n if (!salesForceField) {\r\n return false;\r\n }\r\n\r\n let salesForceList = [];\r\n\r\n this.selectedItems.forEach((item, index) => {\r\n salesForceList.push(item.range + ';' + item.name);\r\n });\r\n\r\n salesForceField.value = _uniq(salesForceList).join('|');\r\n\r\n return true;\r\n }\r\n\r\n scrollTo(element) {\r\n $('html, body').animate(\r\n {\r\n scrollTop: $(element).offset().top,\r\n },\r\n 500,\r\n );\r\n }\r\n\r\n initCollapsibleForm() {\r\n const component = document.querySelector('.form-component-outer .form-component-inner');\r\n const heading = component.querySelector('.title');\r\n const chevron = document.createElement('i');\r\n const form = component.querySelector('form');\r\n const cart = this.el.querySelector('.jcb-quote-form--cart');\r\n let fragment = document.createDocumentFragment();\r\n\r\n fragment.appendChild(heading);\r\n\r\n heading.classList.remove('title');\r\n heading.classList.add('collapser');\r\n heading.setAttribute('data-toggle', 'collapse');\r\n heading.setAttribute('data-target', '.collapse-form');\r\n heading.appendChild(chevron);\r\n\r\n chevron.classList.add('fa');\r\n chevron.classList.add('fa-angle-down');\r\n\r\n form.classList.add('collapse');\r\n form.classList.add('collapse-form');\r\n\r\n heading.addEventListener('click', function () {\r\n this.querySelector('.fa').classList.toggle('fa-angle-down');\r\n this.querySelector('.fa').classList.toggle('fa-angle-up');\r\n });\r\n\r\n form.insertBefore(cart, form.childNodes[0]);\r\n\r\n component.insertBefore(fragment, component.childNodes[0]);\r\n component.parentElement.classList.add('var-collapsible');\r\n }\r\n\r\n openCollapsibleForm() {\r\n const component = document.querySelector('.form-component-outer .form-component-inner');\r\n const heading = component.querySelector('.collapser');\r\n\r\n heading.querySelector('.fa').classList.remove('fa-angle-down');\r\n heading.querySelector('.fa').classList.add('fa-angle-up');\r\n\r\n $('.form-component-outer.var-collapsible form').collapse('show');\r\n }\r\n}\r\n"],"names":["require","Swiper","anims","_findIndex","_indexOf","_isEqual","_join","_pull","_uniq","_uniqWith","Quote","el","this","lang","document","getElementsByTagName","getAttribute","shufflerFilter","selectedItems","selectedIds","activeStep","loadingCount","isModalEnabled","toLowerCase","initModalEnabled","init","window","innerWidth","Array","prototype","slice","call","querySelectorAll","querySelector","offsetWidth","options","windowWidth","multiplier","slidesInView","centered","modelsArr","modelTags","t","push","uid","modelName","setCategoryItemWidth","setCategoryListWidth","inlineCategoryIcons","attachCategoryEvents","initCategoryCarousel","initSearchTypeTabs","initCollapsibleForm","handleQuerystringData","handleFormSubmit","initSearchTypeTabsModalEnabled","handleQuerystringDataModalEnabled","items","categoryListItems","itemWidth","categoryListWrapperWidth","sliderOptions","i","style","width","length","categoryItemWidth","classList","remove","categories","that","c","addEventListener","event","categoryItem","target","closest","selectCategory","slideCategoryCarouselToSelected","list","selectedProduct","slideToIndex","children","indexOf","swiper","slideTo","range","createRange","selectNode","body","categorySection","existingNav","nextPrevButtons","createContextualFragment","insertBefore","childNodes","allCategorySlides","categoryCarousel","slidesPerView","slideClass","wrapperClass","nextButton","prevButton","centeredSlides","observer","onImagesReady","setTimeout","productsSection","container","heading","orginal_html","innerHTML","new_html","cloneNode","showSpinner","updateTabClassesOnSecondSlider","allProductSlides","productItemWidth","productCarousel","slideProductCarouselToSelected","scrollTo","hideSpinner","urlRange","getUrlParameter","urlModel","rangeItem","selectModelFromQueryString","openCollapsibleForm","name","replace","results","RegExp","exec","location","search","decodeURIComponent","img","src","fetch","then","response","text","svg","svgEl","DOMParser","parseFromString","item","parentNode","removeChild","currentCategoryItem","contains","currentCategory","newCategory","categoryType","callback","arguments","modelUid","categoryList","className","add","s","s2","getRangeModels","totalModels","visibleModels","activeFilters","activeRange","resultsHeading","resultsCount","resultsRange","resultsMatching","resultsMatchingTags","display","innerText","join","url","hideSearchError","method","credentials","json","renderModels","initProductCarousel","attachResultModalEvents","attachResultEvents","apply","error","console","showSearchError","Promise","resolve","reject","frag","appendChild","fadeIn","spinner","fadeOut","errorMsg","rangeEnglishName","models","resultStr","map","index","Id","Name","MRRP","Thumbnail","filters","filterItems","filterToggle","f","toggleFilterState","toggleFilter","targetFilter","Model","updateCart","elm","selector","product","$","attr","populateFormSalesforceField","resultItems","r","updateFormFields","quotemodal","bindModal","button","slideUp","slideDown","model","setAttribute","filterResults","shuffler","filter","updateModelCount","id","split","category","removeFromCart","addToCartModalEnabled","addToCart","cartList","li","createElement","cartItem","forEach","updateCartDisplay","categoryItemCentered","trigger","populateCartInfoForSubmit","tabs","searchTypeTabs","selectedTab","toggleSearchType","updateCategoryItems","click","clicked","tabsWrapper","jcbQuoteFormResults","allItems","categoryFormField","getElementById","value","removeAllSlides","appendSlide","update","form","valid","disabled","salesForceField","salesForceList","element","animate","scrollTop","offset","top","component","chevron","cart","fragment","createDocumentFragment","toggle","parentElement","collapse","fieldName","formRangeNameField","getElementsByClassName","formProductNameField","field"],"sourceRoot":""}