{"version":3,"file":"quickAdd-Qx5OEvO_.js","sources":["../../../app/javascript/components/listings/QuickAddItem.vue","../../../app/javascript/components/listings/QuickAddItems.vue","../../../app/javascript/modules/quickAdd.js"],"sourcesContent":["<template>\n <div class=\"quick-add-item-container\">\n <div class=\"js-quick-add-item-container w-4/5 px-4\">\n <div class=\"flex flex-row-reverse gap-x-4 items-start py-3\">\n <input\n id=\"quick-add-checkbox\"\n name=\"quick-add-pdp\"\n :data-quick-add-id=\"item.id\"\n type=\"checkbox\"\n class=\"quick-add-checkboxes\"\n autocomplete=\"off\"\n @change=\"handleCheckboxChange(item.id)\" />\n <div class=\"flex flex-col w-full\">\n <div class=\"flex items-center justify-between mb-1\">\n <p>{{ item.name }}</p>\n <div\n v-if=\"item.price.has_discount\"\n class=\"flex gap-2 whitespace-no-wrap items-center my-1\">\n <span class=\"mr-2\">\n <strong>(+{{ item.price.actual }})</strong>\n </span>\n <span\n class=\"typeset-8 p-1 strikethrough bg-sunflower flex-no-shrink\">\n +{{ item.price.base }}\n </span>\n </div>\n <span\n v-else\n class=\"typeset-10\">\n +{{ item.price.actual }}\n </span>\n </div>\n <a\n href=\"#\"\n class=\"underline\"\n @click.prevent=\"setActiveQuickAddItem(item)\">\n {{ t(\"stock-items.perfect-partners.see-more\") }}\n </a>\n </div>\n <upsell-modal\n v-if=\"activeQuickAddItem\"\n :upsell=\"activeQuickAddItem\"\n :close-modal=\"closeModal\"\n perfect-partners />\n </div>\n </div>\n <div class=\"p-3 flex items-center\">\n <img\n height=\"72\"\n width=\"72\"\n :src=\"item.carousel_images[0].thumb\"\n class=\"cursor-pointer\"\n @click.prevent=\"setActiveQuickAddItem(item)\" />\n </div>\n </div>\n</template>\n\n<script>\nimport UpsellModal from \"@/app/javascript/components/addOns/extras/multiple/UpsellModal.vue\";\n\nexport default {\n name: \"QuickAddItem\",\n components: {\n UpsellModal\n },\n props: {\n item: {\n type: Object,\n required: true\n },\n quickAddItemsLength: {\n type: Number,\n required: true\n },\n index: {\n type: Number,\n required: true\n }\n },\n emits: [\"update:modelValue\"],\n data() {\n return {\n activeQuickAddItem: null\n };\n },\n mounted() {\n if (this.quickAddItemsLength > 1) {\n const el = this.$el;\n const observer = new IntersectionObserver(\n observations => {\n observations.forEach(observation => {\n if (observation.isIntersecting) {\n this.$emit(\"update:modelValue\", this.index);\n }\n });\n },\n {\n root: document.querySelector(\".js-quick-add-container\"),\n threshold: 0.6\n }\n );\n\n observer.observe(el);\n }\n },\n methods: {\n setActiveQuickAddItem(item) {\n this.activeQuickAddItem = item;\n },\n closeModal() {\n this.activeQuickAddItem = null;\n },\n handleCheckboxChange(id) {\n window.dispatchEvent(\n new CustomEvent(\"emitUpsellId\", {\n detail: id\n })\n );\n }\n }\n};\n</script>\n","<template>\n <div\n class=\"quick-add-carousel\"\n :class=\"quickAddCarouselClasses\">\n <div\n class=\"w-full flex justify-between items-center pr-2 md:pr-0 mb-3\"\n :class=\"quickAddItemControlsClasses\">\n <h3 class=\"typeset-6\">\n {{ t(\"stock-items.perfect-partners.checkbox-title\") }}\n </h3>\n <div v-if=\"quickAddItems?.length > 1\">\n <svg-icon\n class=\"cursor-pointer\"\n :class=\"\n disableLeftArrow\n ? 'text-ink-2 pointer-events-none'\n : 'pointer-events-auto'\n \"\n name=\"leftarrow\"\n height=\"12px\"\n width=\"12px\"\n @click=\"scrollElementIntoView('left')\" />\n <svg-icon\n class=\"ml-3 cursor-pointer\"\n :class=\"\n disableRightArrow\n ? 'text-ink-2 pointer-events-none'\n : 'pointer-events-auto'\n \"\n name=\"rightarrow\"\n height=\"12px\"\n width=\"12px\"\n @click=\"scrollElementIntoView('right')\" />\n </div>\n </div>\n\n <div\n class=\"flex overflow-x-auto gap-x-4 hide-scrollbar snap-x snap-mandatory js-quick-add-container\">\n <quick-add-item\n v-for=\"(item, index) in quickAddItems\"\n :key=\"item.id\"\n v-model=\"inViewIndex\"\n :item=\"item\"\n :index=\"index\"\n :quick-add-items-length=\"quickAddItems.length\"\n class=\"flex item-stretch bg-paper snap-start justify-between\" />\n </div>\n </div>\n</template>\n\n<script>\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\nimport QuickAddItem from \"@/app/javascript/components/listings/QuickAddItem.vue\";\n\nexport default {\n name: \"QuickAddItems\",\n components: {\n SvgIcon,\n QuickAddItem\n },\n props: {\n quickAddItems: {\n type: Array,\n required: true\n }\n },\n data() {\n return {\n modalOpen: false,\n inViewIndex: 0\n };\n },\n computed: {\n disableLeftArrow() {\n return this.inViewIndex === 0;\n },\n disableRightArrow() {\n return this.inViewIndex === this.quickAddItems.length - 1;\n },\n quickAddCarouselClasses() {\n if (this.quickAddItems?.length > 1) {\n return \"quick-add-carousel relative\";\n }\n return null;\n }\n },\n methods: {\n scrollElementIntoView(direction) {\n if (direction === \"left\" && this.inViewIndex > 0) {\n this.inViewIndex -= 1;\n } else if (\n direction === \"right\" &&\n this.inViewIndex < this.quickAddItems.length - 1\n ) {\n this.inViewIndex += 1;\n }\n document\n .querySelectorAll(\".js-quick-add-item-container\")\n [this.inViewIndex].scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\"\n });\n }\n }\n};\n</script>\n","import { createApp } from \"vue\";\nimport QuickAddItems from \"@/app/javascript/components/listings/QuickAddItems.vue\";\nimport I18n from \"../plugins/i18n\";\nimport { on } from \"../utils/listeners\";\n\nconst quickAdd = () => {\n window.setupQuickAdd = () => {\n const node = document.querySelector(\"#quick-add-app\");\n if (!node) return;\n if (node.hasAttribute(\"data-v-app\")) return;\n\n const translations = JSON.parse(node.dataset.translations);\n const props = JSON.parse(node.dataset.props);\n const app = createApp(QuickAddItems, props);\n\n const customiseButton = document.querySelector(\".js-listing-customise-cta\");\n\n const changeCustomiseUrlQuickAdd = quickAddIds => {\n if (customiseButton && customiseButton.href) {\n const customiseUrl = new URL(customiseButton.href);\n quickAddIds.forEach(id => {\n customiseUrl.searchParams.append(\"quick_add_ids[]\", id);\n });\n customiseButton.href = customiseUrl.toString();\n }\n };\n\n // For adding a quick add item from a stock item PDP\n const changeQuickAddField = quickAddIds => {\n const quickAddForm = document.querySelector(\n \"#js-stock-item-add-to-cart-form\"\n );\n\n if (quickAddForm) {\n quickAddIds.forEach(id => {\n const input = document.createElement(\"input\");\n\n input.setAttribute(\"type\", \"hidden\");\n input.setAttribute(\"name\", \"quick_add_ids[]\");\n input.setAttribute(\"value\", id);\n\n quickAddForm.appendChild(input);\n });\n }\n };\n\n on(\"click\", \".js-listing-customise-cta\", () => {\n const checkboxes = document.querySelectorAll(\".quick-add-checkboxes\");\n const quickAddIds = [];\n\n checkboxes.forEach(checkbox => {\n if (checkbox.checked) {\n quickAddIds.push(checkbox.dataset.quickAddId);\n }\n });\n\n const quickAddItemAdded = Array.from(checkboxes).some(\n checkbox => checkbox.checked\n );\n if (quickAddItemAdded) {\n analytics.track(\"PDP Quick Upsell Added to Cart\");\n changeCustomiseUrlQuickAdd(quickAddIds);\n changeQuickAddField(quickAddIds);\n }\n });\n\n const setQuickAddIds = () => {\n const checkboxes = document.querySelectorAll(\".quick-add-checkboxes\");\n const quickAddIds = [];\n\n checkboxes.forEach(checkbox => {\n if (checkbox.checked) {\n quickAddIds.push(checkbox.dataset.quickAddId);\n }\n });\n\n if (customiseButton) {\n if (quickAddIds.length) {\n customiseButton.setAttribute(\n \"data-quick-add-ids\",\n quickAddIds.join(\",\")\n );\n } else {\n customiseButton.removeAttribute(\"data-quick-add-ids\");\n }\n }\n };\n\n window.addEventListener(\"emitUpsellId\", setQuickAddIds);\n\n app.use(I18n, translations);\n app.mount(node);\n window.vueApps.push(app);\n };\n\n window.setupQuickAdd();\n};\n\nexport default quickAdd;\n"],"names":["_sfc_main","UpsellModal","el","observations","observation","item","id","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_8","_hoisted_9","_hoisted_11","_hoisted_12","_openBlock","_createElementBlock","_createElementVNode","$props","_cache","$event","$options","_toDisplayString","_hoisted_7","_hoisted_10","_withModifiers","_ctx","$data","_createBlock","_component_upsell_modal","_createCommentVNode","SvgIcon","QuickAddItem","_a","direction","_normalizeClass","_createVNode","_component_svg_icon","_Fragment","_renderList","index","_component_quick_add_item","quickAdd","node","translations","props","app","createApp","QuickAddItems","customiseButton","changeCustomiseUrlQuickAdd","quickAddIds","customiseUrl","changeQuickAddField","quickAddForm","input","on","checkboxes","checkbox","setQuickAddIds","I18n"],"mappings":"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"}