{"version":3,"file":"perfectPartners-CiKd8Ak9.js","sources":["../../../app/javascript/api/perfectPartners.js","../../../app/javascript/components/shared/HeartFilledSvg.vue","../../../app/javascript/components/shared/HeartSvg.vue","../../../app/javascript/components/shared/PerfectPartners.vue","../../../app/javascript/modules/perfectPartners.js"],"sourcesContent":["import api from \"./index\";\n\nexport default {\n async index(isStockItem, listingId, productTypeNameId) {\n return api.post(\"/perfect_partners.json\", {\n is_stock_item: isStockItem,\n listing_id: listingId,\n product_type_name_id: productTypeNameId\n });\n }\n};\n","<template>\n <svg\n class=\"icon-faveheart-filled\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 256 256\">\n <path\n d=\"M240,102c0,70-103.79,126.66-108.21,129a8,8,0,0,1-7.58,0C119.79,228.66,16,172,16,102A62.07,62.07,0,0,1,78,40c20.65,0,38.73,8.88,50,23.89C139.27,48.88,157.35,40,178,40A62.07,62.07,0,0,1,240,102Z\" />\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon-faveheart\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n viewBox=\"0 0 256 256\">\n <path\n d=\"M178,40c-20.65,0-38.73,8.88-50,23.89C116.73,48.88,98.65,40,78,40a62.07,62.07,0,0,0-62,62c0,70,103.79,126.66,108.21,129a8,8,0,0,0,7.58,0C136.21,228.66,240,172,240,102A62.07,62.07,0,0,0,178,40ZM128,214.8C109.74,204.16,32,155.69,32,102A46.06,46.06,0,0,1,78,56c19.45,0,35.78,10.36,42.6,27a8,8,0,0,0,14.8,0c6.82-16.67,23.15-27,42.6-27a46.06,46.06,0,0,1,46,46C224,155.61,146.24,204.15,128,214.8Z\" />\n </svg>\n</template>\n","<template>\n <div\n class=\"js-impression-list\"\n data-situation=\"pdp_add_ons_carousel\"\n :class=\"{\n 'border-b border-ink-1':\n perfectPartners.length > 3 && location === 'basket'\n }\"\n :data-listing-id=\"analyticsId\">\n <div\n v-if=\"perfectPartners.length > 3\"\n class=\"-mx-4 sm:mx-0 py-7\">\n <p class=\"typeset-3 md:typeset-2 mb-6 px-4 sm:px-0\">\n {{ t(\"stock-items.perfect-partners.more-to-love\") }}\n </p>\n <div\n :class=\"`md:grid-cols-${perfectPartners.length}`\"\n class=\"flex md:grid gap-5 overflow-x-auto md:overflow-hidden px-4 sm:px-0\">\n <div\n v-for=\"upsell in perfectPartners\"\n :key=\"upsell.id\"\n class=\"flex flex-col flex-no-shrink w-2/5 sm:w-4/5 md:w-auto\">\n <div\n class=\"product flex flex-col text-center h-full\"\n :data-id=\"upsell.analytics_id\">\n <div class=\"relative mb-3 bg-paper-3\">\n <div\n v-tippy=\"favouriteTippy(upsell)\"\n :class=\"{ active: isFavourited(upsell) }\"\n class=\"flex absolute favourite-product-container js-favourite-container favourite-listing-container p-3 items-center justify-center text-ink z-1 cursor-pointer bottom-0 right-0\"\n :data-id=\"upsell.id\"\n :data-analytics-id=\"`${upsell.id}`\"\n data-cy=\"favourite-heart\"\n :data-price=\"upsell.price.formatted_raw_price\"\n data-type=\"StockItem\">\n <heart-filled-svg v-if=\"isFavourited(upsell)\" />\n <heart-svg v-else />\n </div>\n <img\n :src=\"upsell.image\"\n class=\"img-responsive mb-3 cursor-pointer aspect-ratio-1x1\"\n @click.prevent=\"openModal(upsell)\" />\n </div>\n <div class=\"flex flex-col h-full justify-between\">\n <h3 class=\"mb-1 typeset-6\">\n {{ upsell.name }}\n </h3>\n <div>\n <div class=\"flex flex-no-wrap justify-center gap-3 mb-4\">\n <h2 class=\"typeset-6 flex-no-shrink\">\n {{ upsell.price.actual }}\n </h2>\n <h2\n v-if=\"upsell.price.has_discount\"\n class=\"strikethrough bg-sunflower flex-no-shrink px-2 py-1\">\n {{ upsell.price.base }}\n </h2>\n </div>\n <div class=\"mb-4\">\n <a\n href=\"#\"\n class=\"underline inline-flex\"\n :aria-label=\"`Find out more about ${upsell.name}`\"\n @click.prevent=\"openModal(upsell)\">\n {{ t(\"stock-items.perfect-partners.find-out-more\") }}\n </a>\n </div>\n <btn\n :promise=\"addStockItem(upsell)\"\n type=\"secondary\"\n :aria-label=\"`Add ${upsell.name} to basket`\"\n class=\"btn-block px-3 w-full\">\n {{ t(\"stock-items.perfect-partners.add-to-basket\") }}\n </btn>\n </div>\n </div>\n </div>\n </div>\n </div>\n <upsell-modal\n v-if=\"modalOpen\"\n :upsells=\"[activePartner]\"\n :upsell=\"activePartner\"\n :close-modal=\"closeModal\"\n perfect-partners>\n <btn\n :promise=\"addStockItem(activePartner)\"\n class=\"btn-block btn btn-large\">\n {{ t(\"stock-items.perfect-partners.add-to-basket\") }}\n </btn>\n </upsell-modal>\n </div>\n </div>\n</template>\n\n<script>\nimport stockItem from \"@/app/javascript/api/stockItem\";\n\nimport Btn from \"@/app/javascript/components/shared/Btn.vue\";\nimport UpsellModal from \"@/app/javascript/components/addOns/extras/multiple/UpsellModal.vue\";\nimport perfectPartners from \"@/app/javascript/api/perfectPartners\";\nimport HeartFilledSvg from \"./HeartFilledSvg.vue\";\nimport HeartSvg from \"./HeartSvg.vue\";\n\nexport default {\n name: \"PerfectPartners\",\n components: {\n Btn,\n UpsellModal,\n HeartFilledSvg,\n HeartSvg\n },\n props: {\n isStockItem: {\n type: Boolean,\n default: false\n },\n listingId: {\n type: Number,\n required: false\n },\n analyticsId: {\n type: String,\n required: true\n },\n productTypeNameId: {\n type: Number,\n required: false\n },\n location: {\n type: String,\n required: false\n }\n },\n data() {\n return {\n perfectPartners: [],\n activePartner: null,\n favouritedListings: [],\n modalOpen: false\n };\n },\n computed: {\n isFavourited() {\n return item => {\n return this.favouritedListings.some(\n ([type, id]) => type === \"StockItem\" && id === parseInt(item.id, 10)\n );\n };\n },\n favouriteTippy() {\n return upsell => {\n return {\n content: this.tippyText(upsell),\n theme: \"dark\",\n placement: \"top\",\n arrow: true,\n animation: \"shift-away\",\n touch: false\n };\n };\n },\n tippyText() {\n return upsell => {\n return this.isFavourited(upsell)\n ? this.t(\"favourites.remove-from-favourites\")\n : this.t(\"favourites.add-to-favourites\");\n };\n },\n currentPartner() {\n return this.perfectPartners.find(\n partner => partner.id === this.currentPartnerId\n );\n }\n },\n mounted() {\n this.fetchPerfectPartners().then(() => {\n this.$nextTick(() => {\n const htmlChanged = new Event(\"htmlChanged\");\n window.dispatchEvent(htmlChanged);\n });\n });\n this.setUpFavouritesListener();\n },\n methods: {\n setUpFavouritesListener() {\n window.addEventListener(\n \"addedFavourite\",\n this.updateFavourites.bind(this)\n );\n window.addEventListener(\n \"removedFavourite\",\n this.updateFavourites.bind(this)\n );\n },\n updateFavourites() {\n this.favouritedListings = [...window.favouritedListings];\n },\n async fetchPerfectPartners() {\n const response = await perfectPartners.index(\n this.isStockItem,\n this.listingId,\n this.productTypeNameId\n );\n this.perfectPartners = response.data.perfect_partners;\n this.setCurrentPartner();\n window.resetFavourites();\n this.favouritedListings = window.favouritedListings;\n },\n setActivePartner(partner) {\n analytics.track(\"Perfect Partner Open Modal\", {\n stock_item_id: partner.id\n });\n this.activePartner = partner;\n setTimeout(window.setUpUpsellFlickity, 100);\n },\n openModal(upsell) {\n this.setActivePartner(upsell);\n this.modalOpen = true;\n },\n closeModal() {\n this.modalOpen = false;\n },\n addStockItem(partner) {\n return () => {\n return new Promise(resolve => {\n analytics.track(\"Perfect Partner Add To Cart\", {\n stock_item_id: partner.id\n });\n stockItem\n .addToCart({\n stockItem: partner,\n quantity: 1,\n isPerfectPartner: true,\n analyticsId: this.analyticsId\n })\n .then(({ data }) => {\n this.closeModal();\n if (data.require_login) {\n const showLoginModalEvent = new Event(\"showLoginModal\");\n window.dispatchEvent(showLoginModalEvent);\n } else if (this.location === \"basket\") {\n window.history.scrollRestoration = \"manual\";\n } else {\n window.history.scrollRestoration = \"auto\";\n }\n window.location.reload();\n resolve();\n });\n });\n };\n },\n setCurrentPartner() {\n [this.currentPartnerId] = this.perfectPartners.map(partner => partner.id);\n }\n }\n};\n</script>\n","import { createApp } from \"vue\";\n\nimport VueTippy from \"vue-tippy\";\nimport I18n from \"../plugins/i18n\";\nimport PerfectPartners from \"../components/shared/PerfectPartners.vue\";\n\nconst perfectPartners = () => {\n window.setupPerfectPartners = () => {\n const node = document.getElementById(\"perfect-partners\");\n if (!node) return;\n if (node.hasAttribute(\"data-v-app\")) return;\n\n const props = JSON.parse(node.dataset.props);\n const translations = JSON.parse(node.dataset.translations);\n\n const app = createApp(PerfectPartners, props);\n\n app.use(I18n, translations);\n app.use(VueTippy);\n\n app.mount(node);\n window.vueApps.push(app);\n };\n\n window.setupPerfectPartners();\n};\n\nexport default perfectPartners;\n"],"names":["perfectPartners$1","isStockItem","listingId","productTypeNameId","api","_hoisted_1","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_sfc_main","Btn","UpsellModal","HeartFilledSvg","HeartSvg","item","type","id","upsell","partner","htmlChanged","response","perfectPartners","resolve","stockItem","data","showLoginModalEvent","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_13","_hoisted_14","_normalizeClass","$data","$props","_hoisted_2","_createElementVNode","_toDisplayString","_Fragment","_renderList","$options","_createBlock","_component_heart_filled_svg","_component_heart_svg","_directive_tippy","_withModifiers","$event","_hoisted_12","_createCommentVNode","_createVNode","_component_btn","_withCtx","_createTextVNode","_component_upsell_modal","node","props","translations","app","createApp","PerfectPartners","I18n","VueTippy"],"mappings":"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"}