@perevorot/shop 2.0.160 → 2.0.162

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/api.js.map +1 -1
  2. package/dist/components/account/OrderItem.js.map +1 -1
  3. package/dist/components/account/User.js.map +1 -1
  4. package/dist/components/auth/Forget.js.map +1 -1
  5. package/dist/components/auth/Login.js.map +1 -1
  6. package/dist/components/auth/Reset.js.map +1 -1
  7. package/dist/components/auth/User.js.map +1 -1
  8. package/dist/components/shop/CodeCopy.js.map +1 -1
  9. package/dist/components/shop/Gallery.js.map +1 -1
  10. package/dist/components/shop/Notice.js.map +1 -1
  11. package/dist/components/shop/PromoProducts.js.map +1 -1
  12. package/dist/components/shop/Search.js.map +1 -1
  13. package/dist/components/shop/bundle/Bundle.js.map +1 -1
  14. package/dist/components/shop/bundle/BundleAdd.js.map +1 -1
  15. package/dist/components/shop/cart/Cart.js.map +1 -1
  16. package/dist/components/shop/cart/CartAdd.js.map +1 -1
  17. package/dist/components/shop/cart/CartItem.js.map +1 -1
  18. package/dist/components/shop/cart/CartTrigger.js.map +1 -1
  19. package/dist/components/shop/compare/CompareAdd.js.map +1 -1
  20. package/dist/components/shop/compare/CompareDelete.js.map +1 -1
  21. package/dist/components/shop/compare/CompareDeleteAll.js.map +1 -1
  22. package/dist/components/shop/filters/FilterSearch.js.map +1 -1
  23. package/dist/components/shop/filters/Price.js.map +1 -1
  24. package/dist/components/shop/order/Checkout.js.map +1 -1
  25. package/dist/components/shop/order/CheckoutItem.js.map +1 -1
  26. package/dist/components/shop/order/OneClick.js.map +1 -1
  27. package/dist/components/shop/order/shipping/CheckoutShippingCourier.js.map +1 -1
  28. package/dist/components/shop/order/shipping/CheckoutShippingNovaposhtaAddress.js.map +1 -1
  29. package/dist/components/shop/order/shipping/CheckoutShippingNovaposhtaWarehouse.js.map +1 -1
  30. package/dist/components/shop/order/shipping/CheckoutShippingPickup.js +1 -1
  31. package/dist/components/shop/order/shipping/CheckoutShippingPickup.js.map +1 -1
  32. package/dist/components/shop/order/shipping/CheckoutShippingUkrposhtaWarehouse.js.map +1 -1
  33. package/dist/components/shop/reviews/Question.js.map +1 -1
  34. package/dist/components/shop/reviews/Review.js.map +1 -1
  35. package/dist/components/shop/viewed/Viewed.js.map +1 -1
  36. package/dist/components/shop/viewed/ViewedDelete.js.map +1 -1
  37. package/dist/components/shop/viewed/Viewer.js.map +1 -1
  38. package/dist/components/shop/wishlist/WishlistAdd.js.map +1 -1
  39. package/dist/components/shop/wishlist/WishlistDelete.js.map +1 -1
  40. package/dist/forms/FormCheckbox.js.map +1 -1
  41. package/dist/forms/FormCheckboxes.js.map +1 -1
  42. package/dist/forms/FormPassword.js.map +1 -1
  43. package/dist/forms/FormRadio.js.map +1 -1
  44. package/dist/forms/FormRating.js.map +1 -1
  45. package/dist/forms/FormSelect.js.map +1 -1
  46. package/dist/forms/FormSwitch.js.map +1 -1
  47. package/dist/forms/FormText.js +1 -1
  48. package/dist/forms/FormText.js.map +1 -1
  49. package/dist/forms/FormTextarea.js.map +1 -1
  50. package/dist/global.js.map +1 -1
  51. package/dist/store.js.map +1 -1
  52. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Search.js","sources":["../../../src/components/shop/Search.vue","../../../src/components/shop/Search.vue?vue&type=template&id=574346dd&lang.js"],"sourcesContent":["<template>\n <div class=\"shop-search\" @click=\"$event.stopPropagation()\">\n <div class=\"dropdown\" v-bind:class=\"{\n 'is-active': isDropdown,\n 'is-dropdown-visible': isDropdown && ((history.length && !term) || results.length || categories.length || (term && !isLoading && !results.length && !categories.length))\n }\">\n <div class=\"overlay search-overlay\" @click=\"esc($event)\" v-if=\"!htmlClass\"></div>\n <div class=\"dropdown-trigger\">\n <div class=\"control has-icons-right\" v-bind:class=\"{ 'is-loading': isLoading }\">\n <input class=\"input\" type=\"text\" v-model=\"term\" ref=\"input\" :placeholder=\"placeholderMobilized\" @keyup.arrow-down=\"next\" @keyup.arrow-up=\"prev\" @keyup.space=\"add($event)\" @keyup.enter=\"opener(null, 'results_page', open)\" @keyup.esc=\"esc($event)\" @click=\"dropdown\" @keydown=\"preventCaret($event)\" />\n <slot name=\"clear\" :clear=\"clear\" :term=\"term\"></slot>\n <slot name=\"icon\" :isLoading=\"isLoading\">\n <span class=\"icon is-small is-right\" v-show=\"!isLoading\">\n <i class=\"fas fa-search\"></i>\n </span>\n </slot>\n </div>\n </div>\n <div class=\"dropdown-menu\" v-if=\"isHistory && isDropdown && history.length && !term\">\n <div class=\"dropdown-content\">\n <div class=\"history-list\">\n <div class=\"dropdown-item history-list-title\">\n <p>{{ __('shop.search.history') }}</p>\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in history\" v-bind:key=\"index\">\n <a @click=\"term = item\">{{ item }}</a>\n </div>\n <div class=\"dropdown-item history-list-clear\">\n <a @click=\"clearSearchHistory($event)\">{{ __('shop.search.history_clear') }}</a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"dropdown-menu\" v-show=\"results.length || term\">\n <div class=\"dropdown-content\" v-show=\"results.length || categories.length\" style=\"max-height: 600px; overflow: auto\" ref=\"dropdownContent\">\n <slot name=\"results-header\"></slot>\n <div class=\"results-list\" v-if=\"categories.length\">\n <div class=\"dropdown-item\" v-for=\"(item, index) in categories\" v-bind:key=\"index\">\n <div>\n <a :href=\"item.href\" @click.prevent=\"opener(item.href, 'category', open)\">{{ item.name }}</a>\n </div>\n </div>\n <hr class=\"dropdown-divider\" v-if=\"byCategory.length\" />\n </div>\n <div class=\"results-list-category\" v-if=\"byCategory.length\">\n <div class=\"dropdown-item categories-list-title\">\n {{ __('shop.search.categories') }}\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in byCategory\" v-bind:key=\"index\">\n <slot name=\"item-category\" :item=\"item\" :searchHrefWithParameter=\"searchHrefWithParameter\" :opener=\"opener\" :open=\"open\">\n <div>\n <a :href=\"item.href + searchHrefWithParameter\" @click.prevent=\"opener(item.href + searchHrefWithParameter, 'category', open)\">{{ item.name }}</a>\n </div>\n <div>\n {{ __('shop.search.category_found', { count: item.count }) }}\n </div>\n </slot>\n </div>\n </div>\n <div class=\"results-list-total\" v-if=\"total\">\n <p class=\"dropdown-item mb-3 mt-2\">\n {{\n __('shop.search.total_found', {\n total: total\n })\n }}\n <br />\n <a :href=\"searchUrl\">{{ __('shop.search.open_results') }}</a>\n </p>\n </div>\n <div class=\"products-list\" v-if=\"results.length\" ref=\"productsListElement\">\n <div class=\"dropdown-item products-list-title\">\n {{ __('shop.search.products') }}\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in results\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-active': current == index }\">\n <slot name=\"item\" :user=\"user\" :item=\"item\" :cart-refs=\"cartRefs\" :opener=\"opener\" :open=\"open\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"title\">\n <a :href=\"item.href\" @click.prevent=\"opener(item.href, 'product', open)\">\n {{ item.name }}\n </a>\n </div>\n <div class=\"price\" v-html=\"item.price\"></div>\n <div class=\"price_old\" v-if=\"item.price_old\">\n <span v-html=\"item.price_old\"></span>\n </div>\n <div class=\"code\">{{ item.code }}</div>\n <div class=\"quantity\" v-if=\"item.quantity\">\n {{ __('shop.search.in_stock') }}\n </div>\n <span class=\"no-quantity\" v-else>\n {{ __('shop.search.out_stock') }}\n </span>\n </div>\n <div class=\"column is-narrow\" v-if=\"!item.is_eol\">\n <cart-add :id=\"item.id\" :is-change-quantity=\"false\" :is-already-in-cart=\"false\" :ref=\"cartRefs\"></cart-add>\n </div>\n <div v-else class=\"column is-eol\">\n {{ __('shop.search.eol') }}\n </div>\n </div>\n </slot>\n </div>\n </div>\n </div>\n <div class=\"dropdown-content\" v-if=\"!isLoading && !results.length && !categories.length\">\n <div class=\"dropdown-item\">\n <div class=\"no-results\" v-html=\"__('shop.search.no_results')\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { ref, watch, onBeforeUpdate, defineComponent, computed, nextTick } from 'vue';\nimport { useStore } from 'vuex';\nimport { shop as api } from '@perevorot/shop/dist/api';\nimport SimpleBar from 'simplebar';\nimport SecureLS from 'secure-ls';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'search',\n props: {\n q: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n },\n placeholderMobile: {\n type: String,\n default: ''\n },\n parameter: {\n type: String,\n default: '/q{separator}'\n },\n isHistory: {\n type: Boolean,\n default: true\n },\n isToggleDropdownOnClose: {\n type: Boolean,\n default: true\n },\n htmlClass: {\n type: String,\n default: ''\n }\n },\n setup(props) {\n const ls = new SecureLS({\n isCompression: false\n });\n\n let q = props.q;\n\n if (q) {\n let encoder = document.createElement('textarea');\n encoder.innerHTML = q;\n q = encoder.value;\n }\n\n const isLoading = ref(false);\n const term = ref(q);\n const results = ref([]);\n const byCategory = ref([]);\n const total = ref(0);\n const current = ref(-1);\n const isDropdown = ref(false);\n const input = ref();\n const separator = ref('');\n const dropdownContent = ref();\n const history = ref(ls.get('search'));\n const menu = ref([]);\n const store = useStore();\n const user = computed(() => store.getters['auth/me']);\n const productsListElement = ref(null);\n\n let refs = [];\n let timeout;\n\n let isTrackingStartSend = false;\n\n const search = () => {\n clearTimeout(timeout);\n\n current.value = -1;\n\n if (!term.value.trim()) {\n results.value = [];\n isLoading.value = false;\n } else {\n isLoading.value = true;\n\n timeout = setTimeout(() => {\n if (term.value.trim()) {\n api.search(term.value)\n .then((response) => {\n if (response.data) {\n saveSearch();\n\n results.value = response.data.products;\n total.value = response.data.total;\n separator.value = response.data.separator;\n byCategory.value = response.data.byCategory;\n\n const scrollBar = new SimpleBar(dropdownContent.value);\n\n if (!isTrackingStartSend && isDropdown.value) {\n isTrackingStartSend = true;\n\n let object = {\n event: 'search_start'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n if (!results.value.length && !categories.value.length && isDropdown.value) {\n let object = {\n event: 'search_no_results',\n search_query: term.value,\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n nextTick(() => {\n if (window.promoCodeCallback && typeof window.promoCodeCallback === 'function') {\n window.promoCodeCallback(productsListElement.value, '.dropdown-item:not(.products-list-title)');\n }\n });\n }\n })\n .finally(() => {\n isLoading.value = false;\n });\n }\n }, 300);\n }\n };\n\n const trackSuccessSearch = (type) => {\n let object = {\n event: !results.value.length && !categories.value.length ? 'search_no_results' : 'search_success',\n search_query: term.value,\n search_type: type\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n\n if (type == 'category') {\n trackCatalogEvent();\n }\n }\n\n const trackCatalogEvent = () => {\n let object = {\n event: 'catalog',\n location: 'search'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n const opener = (href, type, callback) => {\n trackSuccessSearch(type);\n\n if (typeof callback === 'function') {\n callback(href);\n }\n };\n\n const saveSearch = () => {\n if (term.value.length > 1) {\n let search = ls.get('search') ? ls.get('search') : [];\n\n if (search.indexOf(term.value) !== -1) {\n search = search.filter((item) => item !== term.value);\n }\n\n if (search.length > 4) {\n search = search.slice(0, 4);\n }\n\n search.unshift(term.value);\n\n ls.set('search', search);\n\n history.value = search;\n }\n };\n\n const setSearchHistory = (term) => {\n term.value = term;\n };\n\n const clearSearchHistory = (event) => {\n ls.remove('search');\n\n history.value = [];\n\n input.value.focus();\n };\n\n onBeforeUpdate(() => {\n refs = [];\n });\n\n watch(\n () => term.value,\n () => {\n isDropdown.value = true;\n current.value = -1;\n search();\n }\n );\n\n const searchUrl = computed(() => {\n return term.value ? $env.locale.url + '/search' + searchHrefWithParameter.value : $env.locale.url + '/search';\n });\n\n const searchHrefWithParameter = computed(() => {\n const out = props.parameter.replace('{separator}', separator.value) + term.value.toLowerCase();\n\n return out.replace(/\\//g, '-');\n });\n\n const preventCaret = (event) => {\n if (event.which == 38 || event.which == 40 || (event.which == 32 && current.value >= 0)) {\n event.preventDefault();\n }\n };\n\n const next = () => {\n if (current.value < results.value.length - 1) {\n current.value++;\n }\n };\n\n const prev = () => {\n if (current.value >= 0) {\n current.value--;\n }\n };\n\n const add = (event) => {\n if (current.value >= 0) {\n event.preventDefault();\n\n refs[current.value].add();\n }\n };\n\n const open = (href) => {\n if (href) {\n window.location.href = href;\n } else {\n if (current.value >= 0) {\n window.location.href = results.value[current.value].href;\n } else {\n window.location.href = searchUrl.value;\n }\n }\n };\n\n const esc = (event) => {\n input.value.blur();\n close(event);\n };\n\n const cartRefs = (el) => {\n if (el) {\n refs.push(el);\n }\n };\n\n const close = (event) => {\n if (!event.target.closest('.cart')) {\n if (props.isToggleDropdownOnClose) {\n isDropdown.value = false;\n if (props.htmlClass) {\n document.querySelector('html').classList.remove(props.htmlClass);\n }\n }\n\n current.value = -1;\n }\n };\n\n const dropdown = () => {\n isDropdown.value = true;\n current.value = -1;\n\n if (props.htmlClass) {\n document.querySelector('html').classList.add(props.htmlClass);\n }\n };\n\n window.addEventListener('click', close);\n\n const categories = computed(() => {\n return term.value.length > 3 ? menu.value.filter((item) => item.search.indexOf(term.value) !== -1) : [];\n });\n\n const load = async () => {\n const menuElement = document.getElementById('menu');\n\n if (menuElement) {\n menuElement.querySelectorAll('[data-search]').forEach((element) => {\n const name = element.textContent.trim();\n const data = element.dataset.search;\n\n menu.value.push({\n name: (data ? data + ' / ' : '') + name,\n search: name.toLowerCase(),\n href: element.closest('a').href\n });\n });\n }\n\n if (props.q) {\n search();\n }\n };\n\n document.addEventListener('DOMContentLoaded', load, false);\n\n const clear = () => {\n term.value = '';\n input.value.focus();\n };\n\n const placeholderMobilized = ref(props.placeholder);\n\n if (props.placeholderMobile) {\n const switchPlaceholder = () => {\n const isMobile = window.matchMedia('(max-width: 768px)').matches;\n\n placeholderMobilized.value = isMobile ? props.placeholderMobile : props.placeholder;\n };\n\n window.addEventListener('resize', switchPlaceholder, { passive: true });\n\n switchPlaceholder();\n }\n\n return {\n isLoading,\n term,\n results,\n next,\n prev,\n current,\n add,\n cartRefs,\n isDropdown,\n preventCaret,\n esc,\n input,\n dropdown,\n total,\n searchUrl,\n searchHrefWithParameter,\n open,\n categories,\n byCategory,\n dropdownContent,\n history,\n clearSearchHistory,\n setSearchHistory,\n user,\n clear,\n placeholderMobilized,\n opener,\n productsListElement,\n };\n }\n});\n</script>","<template>\n <div class=\"shop-search\" @click=\"$event.stopPropagation()\">\n <div class=\"dropdown\" v-bind:class=\"{\n 'is-active': isDropdown,\n 'is-dropdown-visible': isDropdown && ((history.length && !term) || results.length || categories.length || (term && !isLoading && !results.length && !categories.length))\n }\">\n <div class=\"overlay search-overlay\" @click=\"esc($event)\" v-if=\"!htmlClass\"></div>\n <div class=\"dropdown-trigger\">\n <div class=\"control has-icons-right\" v-bind:class=\"{ 'is-loading': isLoading }\">\n <input class=\"input\" type=\"text\" v-model=\"term\" ref=\"input\" :placeholder=\"placeholderMobilized\" @keyup.arrow-down=\"next\" @keyup.arrow-up=\"prev\" @keyup.space=\"add($event)\" @keyup.enter=\"opener(null, 'results_page', open)\" @keyup.esc=\"esc($event)\" @click=\"dropdown\" @keydown=\"preventCaret($event)\" />\n <slot name=\"clear\" :clear=\"clear\" :term=\"term\"></slot>\n <slot name=\"icon\" :isLoading=\"isLoading\">\n <span class=\"icon is-small is-right\" v-show=\"!isLoading\">\n <i class=\"fas fa-search\"></i>\n </span>\n </slot>\n </div>\n </div>\n <div class=\"dropdown-menu\" v-if=\"isHistory && isDropdown && history.length && !term\">\n <div class=\"dropdown-content\">\n <div class=\"history-list\">\n <div class=\"dropdown-item history-list-title\">\n <p>{{ __('shop.search.history') }}</p>\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in history\" v-bind:key=\"index\">\n <a @click=\"term = item\">{{ item }}</a>\n </div>\n <div class=\"dropdown-item history-list-clear\">\n <a @click=\"clearSearchHistory($event)\">{{ __('shop.search.history_clear') }}</a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"dropdown-menu\" v-show=\"results.length || term\">\n <div class=\"dropdown-content\" v-show=\"results.length || categories.length\" style=\"max-height: 600px; overflow: auto\" ref=\"dropdownContent\">\n <slot name=\"results-header\"></slot>\n <div class=\"results-list\" v-if=\"categories.length\">\n <div class=\"dropdown-item\" v-for=\"(item, index) in categories\" v-bind:key=\"index\">\n <div>\n <a :href=\"item.href\" @click.prevent=\"opener(item.href, 'category', open)\">{{ item.name }}</a>\n </div>\n </div>\n <hr class=\"dropdown-divider\" v-if=\"byCategory.length\" />\n </div>\n <div class=\"results-list-category\" v-if=\"byCategory.length\">\n <div class=\"dropdown-item categories-list-title\">\n {{ __('shop.search.categories') }}\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in byCategory\" v-bind:key=\"index\">\n <slot name=\"item-category\" :item=\"item\" :searchHrefWithParameter=\"searchHrefWithParameter\" :opener=\"opener\" :open=\"open\">\n <div>\n <a :href=\"item.href + searchHrefWithParameter\" @click.prevent=\"opener(item.href + searchHrefWithParameter, 'category', open)\">{{ item.name }}</a>\n </div>\n <div>\n {{ __('shop.search.category_found', { count: item.count }) }}\n </div>\n </slot>\n </div>\n </div>\n <div class=\"results-list-total\" v-if=\"total\">\n <p class=\"dropdown-item mb-3 mt-2\">\n {{\n __('shop.search.total_found', {\n total: total\n })\n }}\n <br />\n <a :href=\"searchUrl\">{{ __('shop.search.open_results') }}</a>\n </p>\n </div>\n <div class=\"products-list\" v-if=\"results.length\" ref=\"productsListElement\">\n <div class=\"dropdown-item products-list-title\">\n {{ __('shop.search.products') }}\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in results\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-active': current == index }\">\n <slot name=\"item\" :user=\"user\" :item=\"item\" :cart-refs=\"cartRefs\" :opener=\"opener\" :open=\"open\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"title\">\n <a :href=\"item.href\" @click.prevent=\"opener(item.href, 'product', open)\">\n {{ item.name }}\n </a>\n </div>\n <div class=\"price\" v-html=\"item.price\"></div>\n <div class=\"price_old\" v-if=\"item.price_old\">\n <span v-html=\"item.price_old\"></span>\n </div>\n <div class=\"code\">{{ item.code }}</div>\n <div class=\"quantity\" v-if=\"item.quantity\">\n {{ __('shop.search.in_stock') }}\n </div>\n <span class=\"no-quantity\" v-else>\n {{ __('shop.search.out_stock') }}\n </span>\n </div>\n <div class=\"column is-narrow\" v-if=\"!item.is_eol\">\n <cart-add :id=\"item.id\" :is-change-quantity=\"false\" :is-already-in-cart=\"false\" :ref=\"cartRefs\"></cart-add>\n </div>\n <div v-else class=\"column is-eol\">\n {{ __('shop.search.eol') }}\n </div>\n </div>\n </slot>\n </div>\n </div>\n </div>\n <div class=\"dropdown-content\" v-if=\"!isLoading && !results.length && !categories.length\">\n <div class=\"dropdown-item\">\n <div class=\"no-results\" v-html=\"__('shop.search.no_results')\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { ref, watch, onBeforeUpdate, defineComponent, computed, nextTick } from 'vue';\nimport { useStore } from 'vuex';\nimport { shop as api } from '@perevorot/shop/dist/api';\nimport SimpleBar from 'simplebar';\nimport SecureLS from 'secure-ls';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'search',\n props: {\n q: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n },\n placeholderMobile: {\n type: String,\n default: ''\n },\n parameter: {\n type: String,\n default: '/q{separator}'\n },\n isHistory: {\n type: Boolean,\n default: true\n },\n isToggleDropdownOnClose: {\n type: Boolean,\n default: true\n },\n htmlClass: {\n type: String,\n default: ''\n }\n },\n setup(props) {\n const ls = new SecureLS({\n isCompression: false\n });\n\n let q = props.q;\n\n if (q) {\n let encoder = document.createElement('textarea');\n encoder.innerHTML = q;\n q = encoder.value;\n }\n\n const isLoading = ref(false);\n const term = ref(q);\n const results = ref([]);\n const byCategory = ref([]);\n const total = ref(0);\n const current = ref(-1);\n const isDropdown = ref(false);\n const input = ref();\n const separator = ref('');\n const dropdownContent = ref();\n const history = ref(ls.get('search'));\n const menu = ref([]);\n const store = useStore();\n const user = computed(() => store.getters['auth/me']);\n const productsListElement = ref(null);\n\n let refs = [];\n let timeout;\n\n let isTrackingStartSend = false;\n\n const search = () => {\n clearTimeout(timeout);\n\n current.value = -1;\n\n if (!term.value.trim()) {\n results.value = [];\n isLoading.value = false;\n } else {\n isLoading.value = true;\n\n timeout = setTimeout(() => {\n if (term.value.trim()) {\n api.search(term.value)\n .then((response) => {\n if (response.data) {\n saveSearch();\n\n results.value = response.data.products;\n total.value = response.data.total;\n separator.value = response.data.separator;\n byCategory.value = response.data.byCategory;\n\n const scrollBar = new SimpleBar(dropdownContent.value);\n\n if (!isTrackingStartSend && isDropdown.value) {\n isTrackingStartSend = true;\n\n let object = {\n event: 'search_start'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n if (!results.value.length && !categories.value.length && isDropdown.value) {\n let object = {\n event: 'search_no_results',\n search_query: term.value,\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n nextTick(() => {\n if (window.promoCodeCallback && typeof window.promoCodeCallback === 'function') {\n window.promoCodeCallback(productsListElement.value, '.dropdown-item:not(.products-list-title)');\n }\n });\n }\n })\n .finally(() => {\n isLoading.value = false;\n });\n }\n }, 300);\n }\n };\n\n const trackSuccessSearch = (type) => {\n let object = {\n event: !results.value.length && !categories.value.length ? 'search_no_results' : 'search_success',\n search_query: term.value,\n search_type: type\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n\n if (type == 'category') {\n trackCatalogEvent();\n }\n }\n\n const trackCatalogEvent = () => {\n let object = {\n event: 'catalog',\n location: 'search'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n const opener = (href, type, callback) => {\n trackSuccessSearch(type);\n\n if (typeof callback === 'function') {\n callback(href);\n }\n };\n\n const saveSearch = () => {\n if (term.value.length > 1) {\n let search = ls.get('search') ? ls.get('search') : [];\n\n if (search.indexOf(term.value) !== -1) {\n search = search.filter((item) => item !== term.value);\n }\n\n if (search.length > 4) {\n search = search.slice(0, 4);\n }\n\n search.unshift(term.value);\n\n ls.set('search', search);\n\n history.value = search;\n }\n };\n\n const setSearchHistory = (term) => {\n term.value = term;\n };\n\n const clearSearchHistory = (event) => {\n ls.remove('search');\n\n history.value = [];\n\n input.value.focus();\n };\n\n onBeforeUpdate(() => {\n refs = [];\n });\n\n watch(\n () => term.value,\n () => {\n isDropdown.value = true;\n current.value = -1;\n search();\n }\n );\n\n const searchUrl = computed(() => {\n return term.value ? $env.locale.url + '/search' + searchHrefWithParameter.value : $env.locale.url + '/search';\n });\n\n const searchHrefWithParameter = computed(() => {\n const out = props.parameter.replace('{separator}', separator.value) + term.value.toLowerCase();\n\n return out.replace(/\\//g, '-');\n });\n\n const preventCaret = (event) => {\n if (event.which == 38 || event.which == 40 || (event.which == 32 && current.value >= 0)) {\n event.preventDefault();\n }\n };\n\n const next = () => {\n if (current.value < results.value.length - 1) {\n current.value++;\n }\n };\n\n const prev = () => {\n if (current.value >= 0) {\n current.value--;\n }\n };\n\n const add = (event) => {\n if (current.value >= 0) {\n event.preventDefault();\n\n refs[current.value].add();\n }\n };\n\n const open = (href) => {\n if (href) {\n window.location.href = href;\n } else {\n if (current.value >= 0) {\n window.location.href = results.value[current.value].href;\n } else {\n window.location.href = searchUrl.value;\n }\n }\n };\n\n const esc = (event) => {\n input.value.blur();\n close(event);\n };\n\n const cartRefs = (el) => {\n if (el) {\n refs.push(el);\n }\n };\n\n const close = (event) => {\n if (!event.target.closest('.cart')) {\n if (props.isToggleDropdownOnClose) {\n isDropdown.value = false;\n if (props.htmlClass) {\n document.querySelector('html').classList.remove(props.htmlClass);\n }\n }\n\n current.value = -1;\n }\n };\n\n const dropdown = () => {\n isDropdown.value = true;\n current.value = -1;\n\n if (props.htmlClass) {\n document.querySelector('html').classList.add(props.htmlClass);\n }\n };\n\n window.addEventListener('click', close);\n\n const categories = computed(() => {\n return term.value.length > 3 ? menu.value.filter((item) => item.search.indexOf(term.value) !== -1) : [];\n });\n\n const load = async () => {\n const menuElement = document.getElementById('menu');\n\n if (menuElement) {\n menuElement.querySelectorAll('[data-search]').forEach((element) => {\n const name = element.textContent.trim();\n const data = element.dataset.search;\n\n menu.value.push({\n name: (data ? data + ' / ' : '') + name,\n search: name.toLowerCase(),\n href: element.closest('a').href\n });\n });\n }\n\n if (props.q) {\n search();\n }\n };\n\n document.addEventListener('DOMContentLoaded', load, false);\n\n const clear = () => {\n term.value = '';\n input.value.focus();\n };\n\n const placeholderMobilized = ref(props.placeholder);\n\n if (props.placeholderMobile) {\n const switchPlaceholder = () => {\n const isMobile = window.matchMedia('(max-width: 768px)').matches;\n\n placeholderMobilized.value = isMobile ? props.placeholderMobile : props.placeholder;\n };\n\n window.addEventListener('resize', switchPlaceholder, { passive: true });\n\n switchPlaceholder();\n }\n\n return {\n isLoading,\n term,\n results,\n next,\n prev,\n current,\n add,\n cartRefs,\n isDropdown,\n preventCaret,\n esc,\n input,\n dropdown,\n total,\n searchUrl,\n searchHrefWithParameter,\n open,\n categories,\n byCategory,\n dropdownContent,\n history,\n clearSearchHistory,\n setSearchHistory,\n user,\n clear,\n placeholderMobilized,\n opener,\n productsListElement,\n };\n }\n});\n</script>"],"names":["script","defineComponent","name","props","q","type","String","default","placeholder","placeholderMobile","parameter","isHistory","Boolean","isToggleDropdownOnClose","htmlClass","setup","ls","SecureLS","isCompression","encoder","document","createElement","innerHTML","value","timeout","isLoading","ref","term","results","byCategory","total","current","isDropdown","input","separator","dropdownContent","history","get","menu","store","useStore","user","computed","getters","productsListElement","refs","isTrackingStartSend","search","clearTimeout","trim","setTimeout","api","shop","then","response","data","saveSearch","products","SimpleBar","object","event","$env","debug","ecommerce","console","log","window","dataLayer","push","length","categories","search_query","nextTick","promoCodeCallback","trackCatalogEvent","location","indexOf","filter","item","slice","unshift","set","onBeforeUpdate","watch","searchUrl","locale","url","searchHrefWithParameter","replace","toLowerCase","close","target","closest","querySelector","classList","remove","addEventListener","load","direct","menuElement","getElementById","querySelectorAll","forEach","element","textContent","dataset","href","args","i","arguments","Promise","resolve","f","apply","this","reject","e","placeholderMobilized","switchPlaceholder","isMobile","matchMedia","matches","passive","next","prev","add","preventDefault","cartRefs","el","preventCaret","which","esc","blur","dropdown","open","clearSearchHistory","focus","setSearchHistory","clear","opener","callback","search_type","trackSuccessSearch","_hoisted_1","class","_hoisted_3","_createElementVNode","createElementVNode","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_11","_hoisted_12","style","max-height","overflow","_hoisted_18","_hoisted_21","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_33","_hoisted_39","_createElementBlock","createElementBlock","onClick","_cache","$event","stopPropagation","_ctx","_normalizeClass","onKeyup","_withKeys","withKeys","onKeydown","_renderSlot","$slots","renderSlot","_withDirectives","_hoisted_5","_openBlock","_hoisted_6","__","_Fragment","_renderList","renderList","index","key","_hoisted_10","withDirectives","_hoisted_13","openBlock","_hoisted_14","_toDisplayString","toDisplayString","_hoisted_15","_hoisted_16","_hoisted_17","_withModifiers","_hoisted_19","count","_hoisted_20","_hoisted_22","_hoisted_23","_hoisted_24","Fragment","is-active","id","_hoisted_29","price","price_old","_hoisted_31","code","quantity","_hoisted_34","_hoisted_35","is_eol","_hoisted_37","_hoisted_36","_createVNode","_component_cart_add","is-change-quantity","is-already-in-cart","_vShow","_hoisted_38"],"mappings":"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"}
1
+ {"version":3,"file":"Search.js","sources":["../../../src/components/shop/Search.vue","../../../src/components/shop/Search.vue?vue&type=template&id=574346dd&lang.js"],"sourcesContent":["<template>\n <div class=\"shop-search\" @click=\"$event.stopPropagation()\">\n <div class=\"dropdown\" v-bind:class=\"{\n 'is-active': isDropdown,\n 'is-dropdown-visible': isDropdown && ((history.length && !term) || results.length || categories.length || (term && !isLoading && !results.length && !categories.length))\n }\">\n <div class=\"overlay search-overlay\" @click=\"esc($event)\" v-if=\"!htmlClass\"></div>\n <div class=\"dropdown-trigger\">\n <div class=\"control has-icons-right\" v-bind:class=\"{ 'is-loading': isLoading }\">\n <input class=\"input\" type=\"text\" v-model=\"term\" ref=\"input\" :placeholder=\"placeholderMobilized\" @keyup.arrow-down=\"next\" @keyup.arrow-up=\"prev\" @keyup.space=\"add($event)\" @keyup.enter=\"opener(null, 'results_page', open)\" @keyup.esc=\"esc($event)\" @click=\"dropdown\" @keydown=\"preventCaret($event)\" />\n <slot name=\"clear\" :clear=\"clear\" :term=\"term\"></slot>\n <slot name=\"icon\" :isLoading=\"isLoading\">\n <span class=\"icon is-small is-right\" v-show=\"!isLoading\">\n <i class=\"fas fa-search\"></i>\n </span>\n </slot>\n </div>\n </div>\n <div class=\"dropdown-menu\" v-if=\"isHistory && isDropdown && history.length && !term\">\n <div class=\"dropdown-content\">\n <div class=\"history-list\">\n <div class=\"dropdown-item history-list-title\">\n <p>{{ __('shop.search.history') }}</p>\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in history\" v-bind:key=\"index\">\n <a @click=\"term = item\">{{ item }}</a>\n </div>\n <div class=\"dropdown-item history-list-clear\">\n <a @click=\"clearSearchHistory($event)\">{{ __('shop.search.history_clear') }}</a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"dropdown-menu\" v-show=\"results.length || term\">\n <div class=\"dropdown-content\" v-show=\"results.length || categories.length\" style=\"max-height: 600px; overflow: auto\" ref=\"dropdownContent\">\n <slot name=\"results-header\"></slot>\n <div class=\"results-list\" v-if=\"categories.length\">\n <div class=\"dropdown-item\" v-for=\"(item, index) in categories\" v-bind:key=\"index\">\n <div>\n <a :href=\"item.href\" @click.prevent=\"opener(item.href, 'category', open)\">{{ item.name }}</a>\n </div>\n </div>\n <hr class=\"dropdown-divider\" v-if=\"byCategory.length\" />\n </div>\n <div class=\"results-list-category\" v-if=\"byCategory.length\">\n <div class=\"dropdown-item categories-list-title\">\n {{ __('shop.search.categories') }}\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in byCategory\" v-bind:key=\"index\">\n <slot name=\"item-category\" :item=\"item\" :searchHrefWithParameter=\"searchHrefWithParameter\" :opener=\"opener\" :open=\"open\">\n <div>\n <a :href=\"item.href + searchHrefWithParameter\" @click.prevent=\"opener(item.href + searchHrefWithParameter, 'category', open)\">{{ item.name }}</a>\n </div>\n <div>\n {{ __('shop.search.category_found', { count: item.count }) }}\n </div>\n </slot>\n </div>\n </div>\n <div class=\"results-list-total\" v-if=\"total\">\n <p class=\"dropdown-item mb-3 mt-2\">\n {{\n __('shop.search.total_found', {\n total: total\n })\n }}\n <br />\n <a :href=\"searchUrl\">{{ __('shop.search.open_results') }}</a>\n </p>\n </div>\n <div class=\"products-list\" v-if=\"results.length\" ref=\"productsListElement\">\n <div class=\"dropdown-item products-list-title\">\n {{ __('shop.search.products') }}\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in results\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-active': current == index }\">\n <slot name=\"item\" :user=\"user\" :item=\"item\" :cart-refs=\"cartRefs\" :opener=\"opener\" :open=\"open\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"title\">\n <a :href=\"item.href\" @click.prevent=\"opener(item.href, 'product', open)\">\n {{ item.name }}\n </a>\n </div>\n <div class=\"price\" v-html=\"item.price\"></div>\n <div class=\"price_old\" v-if=\"item.price_old\">\n <span v-html=\"item.price_old\"></span>\n </div>\n <div class=\"code\">{{ item.code }}</div>\n <div class=\"quantity\" v-if=\"item.quantity\">\n {{ __('shop.search.in_stock') }}\n </div>\n <span class=\"no-quantity\" v-else>\n {{ __('shop.search.out_stock') }}\n </span>\n </div>\n <div class=\"column is-narrow\" v-if=\"!item.is_eol\">\n <cart-add :id=\"item.id\" :is-change-quantity=\"false\" :is-already-in-cart=\"false\" :ref=\"cartRefs\"></cart-add>\n </div>\n <div v-else class=\"column is-eol\">\n {{ __('shop.search.eol') }}\n </div>\n </div>\n </slot>\n </div>\n </div>\n </div>\n <div class=\"dropdown-content\" v-if=\"!isLoading && !results.length && !categories.length\">\n <div class=\"dropdown-item\">\n <div class=\"no-results\" v-html=\"__('shop.search.no_results')\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { ref, watch, onBeforeUpdate, defineComponent, computed, nextTick } from 'vue';\nimport { useStore } from 'vuex';\nimport { shop as api } from '@perevorot/shop/dist/api';\nimport SimpleBar from 'simplebar';\nimport SecureLS from 'secure-ls';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'search',\n props: {\n q: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n },\n placeholderMobile: {\n type: String,\n default: ''\n },\n parameter: {\n type: String,\n default: '/q{separator}'\n },\n isHistory: {\n type: Boolean,\n default: true\n },\n isToggleDropdownOnClose: {\n type: Boolean,\n default: true\n },\n htmlClass: {\n type: String,\n default: ''\n }\n },\n setup(props) {\n const ls = new SecureLS({\n isCompression: false\n });\n\n let q = props.q;\n\n if (q) {\n let encoder = document.createElement('textarea');\n encoder.innerHTML = q;\n q = encoder.value;\n }\n\n const isLoading = ref(false);\n const term = ref(q);\n const results = ref([]);\n const byCategory = ref([]);\n const total = ref(0);\n const current = ref(-1);\n const isDropdown = ref(false);\n const input = ref();\n const separator = ref('');\n const dropdownContent = ref();\n const history = ref(ls.get('search'));\n const menu = ref([]);\n const store = useStore();\n const user = computed(() => store.getters['auth/me']);\n const productsListElement = ref(null);\n\n let refs = [];\n let timeout;\n\n let isTrackingStartSend = false;\n\n const search = () => {\n clearTimeout(timeout);\n\n current.value = -1;\n\n if (!term.value.trim()) {\n results.value = [];\n isLoading.value = false;\n } else {\n isLoading.value = true;\n\n timeout = setTimeout(() => {\n if (term.value.trim()) {\n api.search(term.value)\n .then((response) => {\n if (response.data) {\n saveSearch();\n\n results.value = response.data.products;\n total.value = response.data.total;\n separator.value = response.data.separator;\n byCategory.value = response.data.byCategory;\n\n const scrollBar = new SimpleBar(dropdownContent.value);\n\n if (!isTrackingStartSend && isDropdown.value) {\n isTrackingStartSend = true;\n\n let object = {\n event: 'search_start'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n if (!results.value.length && !categories.value.length && isDropdown.value) {\n let object = {\n event: 'search_no_results',\n search_query: term.value,\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n nextTick(() => {\n if (window.promoCodeCallback && typeof window.promoCodeCallback === 'function') {\n window.promoCodeCallback(productsListElement.value, '.dropdown-item:not(.products-list-title)');\n }\n });\n }\n })\n .finally(() => {\n isLoading.value = false;\n });\n }\n }, 300);\n }\n };\n\n const trackSuccessSearch = (type) => {\n let object = {\n event: !results.value.length && !categories.value.length ? 'search_no_results' : 'search_success',\n search_query: term.value,\n search_type: type\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n\n if (type == 'category') {\n trackCatalogEvent();\n }\n }\n\n const trackCatalogEvent = () => {\n let object = {\n event: 'catalog',\n location: 'search'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n const opener = (href, type, callback) => {\n trackSuccessSearch(type);\n\n if (typeof callback === 'function') {\n callback(href);\n }\n };\n\n const saveSearch = () => {\n if (term.value.length > 1) {\n let search = ls.get('search') ? ls.get('search') : [];\n\n if (search.indexOf(term.value) !== -1) {\n search = search.filter((item) => item !== term.value);\n }\n\n if (search.length > 4) {\n search = search.slice(0, 4);\n }\n\n search.unshift(term.value);\n\n ls.set('search', search);\n\n history.value = search;\n }\n };\n\n const setSearchHistory = (term) => {\n term.value = term;\n };\n\n const clearSearchHistory = (event) => {\n ls.remove('search');\n\n history.value = [];\n\n input.value.focus();\n };\n\n onBeforeUpdate(() => {\n refs = [];\n });\n\n watch(\n () => term.value,\n () => {\n isDropdown.value = true;\n current.value = -1;\n search();\n }\n );\n\n const searchUrl = computed(() => {\n return term.value ? $env.locale.url + '/search' + searchHrefWithParameter.value : $env.locale.url + '/search';\n });\n\n const searchHrefWithParameter = computed(() => {\n const out = props.parameter.replace('{separator}', separator.value) + term.value.toLowerCase();\n\n return out.replace(/\\//g, '-');\n });\n\n const preventCaret = (event) => {\n if (event.which == 38 || event.which == 40 || (event.which == 32 && current.value >= 0)) {\n event.preventDefault();\n }\n };\n\n const next = () => {\n if (current.value < results.value.length - 1) {\n current.value++;\n }\n };\n\n const prev = () => {\n if (current.value >= 0) {\n current.value--;\n }\n };\n\n const add = (event) => {\n if (current.value >= 0) {\n event.preventDefault();\n\n refs[current.value].add();\n }\n };\n\n const open = (href) => {\n if (href) {\n window.location.href = href;\n } else {\n if (current.value >= 0) {\n window.location.href = results.value[current.value].href;\n } else {\n window.location.href = searchUrl.value;\n }\n }\n };\n\n const esc = (event) => {\n input.value.blur();\n close(event);\n };\n\n const cartRefs = (el) => {\n if (el) {\n refs.push(el);\n }\n };\n\n const close = (event) => {\n if (!event.target.closest('.cart')) {\n if (props.isToggleDropdownOnClose) {\n isDropdown.value = false;\n if (props.htmlClass) {\n document.querySelector('html').classList.remove(props.htmlClass);\n }\n }\n\n current.value = -1;\n }\n };\n\n const dropdown = () => {\n isDropdown.value = true;\n current.value = -1;\n\n if (props.htmlClass) {\n document.querySelector('html').classList.add(props.htmlClass);\n }\n };\n\n window.addEventListener('click', close);\n\n const categories = computed(() => {\n return term.value.length > 3 ? menu.value.filter((item) => item.search.indexOf(term.value) !== -1) : [];\n });\n\n const load = async () => {\n const menuElement = document.getElementById('menu');\n\n if (menuElement) {\n menuElement.querySelectorAll('[data-search]').forEach((element) => {\n const name = element.textContent.trim();\n const data = element.dataset.search;\n\n menu.value.push({\n name: (data ? data + ' / ' : '') + name,\n search: name.toLowerCase(),\n href: element.closest('a').href\n });\n });\n }\n\n if (props.q) {\n search();\n }\n };\n\n document.addEventListener('DOMContentLoaded', load, false);\n\n const clear = () => {\n term.value = '';\n input.value.focus();\n };\n\n const placeholderMobilized = ref(props.placeholder);\n\n if (props.placeholderMobile) {\n const switchPlaceholder = () => {\n const isMobile = window.matchMedia('(max-width: 768px)').matches;\n\n placeholderMobilized.value = isMobile ? props.placeholderMobile : props.placeholder;\n };\n\n window.addEventListener('resize', switchPlaceholder, { passive: true });\n\n switchPlaceholder();\n }\n\n return {\n isLoading,\n term,\n results,\n next,\n prev,\n current,\n add,\n cartRefs,\n isDropdown,\n preventCaret,\n esc,\n input,\n dropdown,\n total,\n searchUrl,\n searchHrefWithParameter,\n open,\n categories,\n byCategory,\n dropdownContent,\n history,\n clearSearchHistory,\n setSearchHistory,\n user,\n clear,\n placeholderMobilized,\n opener,\n productsListElement,\n };\n }\n});\n</script>","<template>\n <div class=\"shop-search\" @click=\"$event.stopPropagation()\">\n <div class=\"dropdown\" v-bind:class=\"{\n 'is-active': isDropdown,\n 'is-dropdown-visible': isDropdown && ((history.length && !term) || results.length || categories.length || (term && !isLoading && !results.length && !categories.length))\n }\">\n <div class=\"overlay search-overlay\" @click=\"esc($event)\" v-if=\"!htmlClass\"></div>\n <div class=\"dropdown-trigger\">\n <div class=\"control has-icons-right\" v-bind:class=\"{ 'is-loading': isLoading }\">\n <input class=\"input\" type=\"text\" v-model=\"term\" ref=\"input\" :placeholder=\"placeholderMobilized\" @keyup.arrow-down=\"next\" @keyup.arrow-up=\"prev\" @keyup.space=\"add($event)\" @keyup.enter=\"opener(null, 'results_page', open)\" @keyup.esc=\"esc($event)\" @click=\"dropdown\" @keydown=\"preventCaret($event)\" />\n <slot name=\"clear\" :clear=\"clear\" :term=\"term\"></slot>\n <slot name=\"icon\" :isLoading=\"isLoading\">\n <span class=\"icon is-small is-right\" v-show=\"!isLoading\">\n <i class=\"fas fa-search\"></i>\n </span>\n </slot>\n </div>\n </div>\n <div class=\"dropdown-menu\" v-if=\"isHistory && isDropdown && history.length && !term\">\n <div class=\"dropdown-content\">\n <div class=\"history-list\">\n <div class=\"dropdown-item history-list-title\">\n <p>{{ __('shop.search.history') }}</p>\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in history\" v-bind:key=\"index\">\n <a @click=\"term = item\">{{ item }}</a>\n </div>\n <div class=\"dropdown-item history-list-clear\">\n <a @click=\"clearSearchHistory($event)\">{{ __('shop.search.history_clear') }}</a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"dropdown-menu\" v-show=\"results.length || term\">\n <div class=\"dropdown-content\" v-show=\"results.length || categories.length\" style=\"max-height: 600px; overflow: auto\" ref=\"dropdownContent\">\n <slot name=\"results-header\"></slot>\n <div class=\"results-list\" v-if=\"categories.length\">\n <div class=\"dropdown-item\" v-for=\"(item, index) in categories\" v-bind:key=\"index\">\n <div>\n <a :href=\"item.href\" @click.prevent=\"opener(item.href, 'category', open)\">{{ item.name }}</a>\n </div>\n </div>\n <hr class=\"dropdown-divider\" v-if=\"byCategory.length\" />\n </div>\n <div class=\"results-list-category\" v-if=\"byCategory.length\">\n <div class=\"dropdown-item categories-list-title\">\n {{ __('shop.search.categories') }}\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in byCategory\" v-bind:key=\"index\">\n <slot name=\"item-category\" :item=\"item\" :searchHrefWithParameter=\"searchHrefWithParameter\" :opener=\"opener\" :open=\"open\">\n <div>\n <a :href=\"item.href + searchHrefWithParameter\" @click.prevent=\"opener(item.href + searchHrefWithParameter, 'category', open)\">{{ item.name }}</a>\n </div>\n <div>\n {{ __('shop.search.category_found', { count: item.count }) }}\n </div>\n </slot>\n </div>\n </div>\n <div class=\"results-list-total\" v-if=\"total\">\n <p class=\"dropdown-item mb-3 mt-2\">\n {{\n __('shop.search.total_found', {\n total: total\n })\n }}\n <br />\n <a :href=\"searchUrl\">{{ __('shop.search.open_results') }}</a>\n </p>\n </div>\n <div class=\"products-list\" v-if=\"results.length\" ref=\"productsListElement\">\n <div class=\"dropdown-item products-list-title\">\n {{ __('shop.search.products') }}\n </div>\n <div class=\"dropdown-item\" v-for=\"(item, index) in results\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-active': current == index }\">\n <slot name=\"item\" :user=\"user\" :item=\"item\" :cart-refs=\"cartRefs\" :opener=\"opener\" :open=\"open\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"title\">\n <a :href=\"item.href\" @click.prevent=\"opener(item.href, 'product', open)\">\n {{ item.name }}\n </a>\n </div>\n <div class=\"price\" v-html=\"item.price\"></div>\n <div class=\"price_old\" v-if=\"item.price_old\">\n <span v-html=\"item.price_old\"></span>\n </div>\n <div class=\"code\">{{ item.code }}</div>\n <div class=\"quantity\" v-if=\"item.quantity\">\n {{ __('shop.search.in_stock') }}\n </div>\n <span class=\"no-quantity\" v-else>\n {{ __('shop.search.out_stock') }}\n </span>\n </div>\n <div class=\"column is-narrow\" v-if=\"!item.is_eol\">\n <cart-add :id=\"item.id\" :is-change-quantity=\"false\" :is-already-in-cart=\"false\" :ref=\"cartRefs\"></cart-add>\n </div>\n <div v-else class=\"column is-eol\">\n {{ __('shop.search.eol') }}\n </div>\n </div>\n </slot>\n </div>\n </div>\n </div>\n <div class=\"dropdown-content\" v-if=\"!isLoading && !results.length && !categories.length\">\n <div class=\"dropdown-item\">\n <div class=\"no-results\" v-html=\"__('shop.search.no_results')\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { ref, watch, onBeforeUpdate, defineComponent, computed, nextTick } from 'vue';\nimport { useStore } from 'vuex';\nimport { shop as api } from '@perevorot/shop/dist/api';\nimport SimpleBar from 'simplebar';\nimport SecureLS from 'secure-ls';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'search',\n props: {\n q: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n },\n placeholderMobile: {\n type: String,\n default: ''\n },\n parameter: {\n type: String,\n default: '/q{separator}'\n },\n isHistory: {\n type: Boolean,\n default: true\n },\n isToggleDropdownOnClose: {\n type: Boolean,\n default: true\n },\n htmlClass: {\n type: String,\n default: ''\n }\n },\n setup(props) {\n const ls = new SecureLS({\n isCompression: false\n });\n\n let q = props.q;\n\n if (q) {\n let encoder = document.createElement('textarea');\n encoder.innerHTML = q;\n q = encoder.value;\n }\n\n const isLoading = ref(false);\n const term = ref(q);\n const results = ref([]);\n const byCategory = ref([]);\n const total = ref(0);\n const current = ref(-1);\n const isDropdown = ref(false);\n const input = ref();\n const separator = ref('');\n const dropdownContent = ref();\n const history = ref(ls.get('search'));\n const menu = ref([]);\n const store = useStore();\n const user = computed(() => store.getters['auth/me']);\n const productsListElement = ref(null);\n\n let refs = [];\n let timeout;\n\n let isTrackingStartSend = false;\n\n const search = () => {\n clearTimeout(timeout);\n\n current.value = -1;\n\n if (!term.value.trim()) {\n results.value = [];\n isLoading.value = false;\n } else {\n isLoading.value = true;\n\n timeout = setTimeout(() => {\n if (term.value.trim()) {\n api.search(term.value)\n .then((response) => {\n if (response.data) {\n saveSearch();\n\n results.value = response.data.products;\n total.value = response.data.total;\n separator.value = response.data.separator;\n byCategory.value = response.data.byCategory;\n\n const scrollBar = new SimpleBar(dropdownContent.value);\n\n if (!isTrackingStartSend && isDropdown.value) {\n isTrackingStartSend = true;\n\n let object = {\n event: 'search_start'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n if (!results.value.length && !categories.value.length && isDropdown.value) {\n let object = {\n event: 'search_no_results',\n search_query: term.value,\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n nextTick(() => {\n if (window.promoCodeCallback && typeof window.promoCodeCallback === 'function') {\n window.promoCodeCallback(productsListElement.value, '.dropdown-item:not(.products-list-title)');\n }\n });\n }\n })\n .finally(() => {\n isLoading.value = false;\n });\n }\n }, 300);\n }\n };\n\n const trackSuccessSearch = (type) => {\n let object = {\n event: !results.value.length && !categories.value.length ? 'search_no_results' : 'search_success',\n search_query: term.value,\n search_type: type\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n\n if (type == 'category') {\n trackCatalogEvent();\n }\n }\n\n const trackCatalogEvent = () => {\n let object = {\n event: 'catalog',\n location: 'search'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n const opener = (href, type, callback) => {\n trackSuccessSearch(type);\n\n if (typeof callback === 'function') {\n callback(href);\n }\n };\n\n const saveSearch = () => {\n if (term.value.length > 1) {\n let search = ls.get('search') ? ls.get('search') : [];\n\n if (search.indexOf(term.value) !== -1) {\n search = search.filter((item) => item !== term.value);\n }\n\n if (search.length > 4) {\n search = search.slice(0, 4);\n }\n\n search.unshift(term.value);\n\n ls.set('search', search);\n\n history.value = search;\n }\n };\n\n const setSearchHistory = (term) => {\n term.value = term;\n };\n\n const clearSearchHistory = (event) => {\n ls.remove('search');\n\n history.value = [];\n\n input.value.focus();\n };\n\n onBeforeUpdate(() => {\n refs = [];\n });\n\n watch(\n () => term.value,\n () => {\n isDropdown.value = true;\n current.value = -1;\n search();\n }\n );\n\n const searchUrl = computed(() => {\n return term.value ? $env.locale.url + '/search' + searchHrefWithParameter.value : $env.locale.url + '/search';\n });\n\n const searchHrefWithParameter = computed(() => {\n const out = props.parameter.replace('{separator}', separator.value) + term.value.toLowerCase();\n\n return out.replace(/\\//g, '-');\n });\n\n const preventCaret = (event) => {\n if (event.which == 38 || event.which == 40 || (event.which == 32 && current.value >= 0)) {\n event.preventDefault();\n }\n };\n\n const next = () => {\n if (current.value < results.value.length - 1) {\n current.value++;\n }\n };\n\n const prev = () => {\n if (current.value >= 0) {\n current.value--;\n }\n };\n\n const add = (event) => {\n if (current.value >= 0) {\n event.preventDefault();\n\n refs[current.value].add();\n }\n };\n\n const open = (href) => {\n if (href) {\n window.location.href = href;\n } else {\n if (current.value >= 0) {\n window.location.href = results.value[current.value].href;\n } else {\n window.location.href = searchUrl.value;\n }\n }\n };\n\n const esc = (event) => {\n input.value.blur();\n close(event);\n };\n\n const cartRefs = (el) => {\n if (el) {\n refs.push(el);\n }\n };\n\n const close = (event) => {\n if (!event.target.closest('.cart')) {\n if (props.isToggleDropdownOnClose) {\n isDropdown.value = false;\n if (props.htmlClass) {\n document.querySelector('html').classList.remove(props.htmlClass);\n }\n }\n\n current.value = -1;\n }\n };\n\n const dropdown = () => {\n isDropdown.value = true;\n current.value = -1;\n\n if (props.htmlClass) {\n document.querySelector('html').classList.add(props.htmlClass);\n }\n };\n\n window.addEventListener('click', close);\n\n const categories = computed(() => {\n return term.value.length > 3 ? menu.value.filter((item) => item.search.indexOf(term.value) !== -1) : [];\n });\n\n const load = async () => {\n const menuElement = document.getElementById('menu');\n\n if (menuElement) {\n menuElement.querySelectorAll('[data-search]').forEach((element) => {\n const name = element.textContent.trim();\n const data = element.dataset.search;\n\n menu.value.push({\n name: (data ? data + ' / ' : '') + name,\n search: name.toLowerCase(),\n href: element.closest('a').href\n });\n });\n }\n\n if (props.q) {\n search();\n }\n };\n\n document.addEventListener('DOMContentLoaded', load, false);\n\n const clear = () => {\n term.value = '';\n input.value.focus();\n };\n\n const placeholderMobilized = ref(props.placeholder);\n\n if (props.placeholderMobile) {\n const switchPlaceholder = () => {\n const isMobile = window.matchMedia('(max-width: 768px)').matches;\n\n placeholderMobilized.value = isMobile ? props.placeholderMobile : props.placeholder;\n };\n\n window.addEventListener('resize', switchPlaceholder, { passive: true });\n\n switchPlaceholder();\n }\n\n return {\n isLoading,\n term,\n results,\n next,\n prev,\n current,\n add,\n cartRefs,\n isDropdown,\n preventCaret,\n esc,\n input,\n dropdown,\n total,\n searchUrl,\n searchHrefWithParameter,\n open,\n categories,\n byCategory,\n dropdownContent,\n history,\n clearSearchHistory,\n setSearchHistory,\n user,\n clear,\n placeholderMobilized,\n opener,\n productsListElement,\n };\n }\n});\n</script>"],"names":["script","defineComponent","name","props","q","type","String","default","placeholder","placeholderMobile","parameter","isHistory","Boolean","isToggleDropdownOnClose","htmlClass","setup","ls","SecureLS","isCompression","encoder","document","createElement","innerHTML","value","timeout","isLoading","ref","term","results","byCategory","total","current","isDropdown","input","separator","dropdownContent","history","get","menu","store","useStore","user","computed","getters","productsListElement","refs","isTrackingStartSend","search","clearTimeout","trim","setTimeout","api","shop","then","response","data","saveSearch","products","SimpleBar","object","event","$env","debug","ecommerce","console","log","window","dataLayer","push","length","categories","search_query","nextTick","promoCodeCallback","trackCatalogEvent","location","indexOf","filter","item","slice","unshift","set","onBeforeUpdate","watch","searchUrl","locale","url","searchHrefWithParameter","replace","toLowerCase","close","target","closest","querySelector","classList","remove","addEventListener","load","direct","menuElement","getElementById","querySelectorAll","forEach","element","textContent","dataset","href","args","i","arguments","Promise","resolve","f","apply","this","reject","e","placeholderMobilized","switchPlaceholder","isMobile","matchMedia","matches","passive","next","prev","add","preventDefault","cartRefs","el","preventCaret","which","esc","blur","dropdown","open","clearSearchHistory","focus","setSearchHistory","clear","opener","callback","search_type","trackSuccessSearch","_hoisted_1","class","_hoisted_3","_createElementVNode","createElementVNode","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_11","_hoisted_12","style","max-height","overflow","_hoisted_18","_hoisted_21","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_33","_hoisted_39","_createElementBlock","createElementBlock","onClick","_cache","$event","stopPropagation","_ctx","_normalizeClass","onKeyup","_withKeys","withKeys","onKeydown","_renderSlot","$slots","renderSlot","_withDirectives","_hoisted_5","_openBlock","_hoisted_6","__","_Fragment","_renderList","renderList","index","key","_hoisted_10","withDirectives","_hoisted_13","openBlock","_hoisted_14","_toDisplayString","toDisplayString","_hoisted_15","_hoisted_16","_hoisted_17","_withModifiers","_hoisted_19","count","_hoisted_20","_hoisted_22","_hoisted_23","_hoisted_24","Fragment","is-active","id","_hoisted_29","price","price_old","_hoisted_31","code","quantity","_hoisted_34","_hoisted_35","is_eol","_hoisted_37","_hoisted_36","_createVNode","_component_cart_add","is-change-quantity","is-already-in-cart","_vShow","_hoisted_38"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Bundle.js","sources":["../../../../src/components/shop/bundle/Bundle.vue"],"sourcesContent":["<template></template>\n<script>\nimport Swiper, { Navigation, Pagination } from \"swiper\";\nimport countdown from \"countdown.to\";\n\nexport default {\n name: \"bundle\",\n props: {\n prev: {\n type: String,\n default: \".swiper-button-prev\",\n },\n next: {\n type: String,\n default: \".swiper-button-next\",\n },\n thumbPrev: {\n type: String,\n default: \".swiper-button-prev\",\n },\n thumbNext: {\n type: String,\n default: \".swiper-button-next\",\n },\n },\n setup(props) {\n const pluralize = (count, words) => {\n let cases = [2, 0, 1, 1, 1, 2];\n\n return (\n count +\n \" \" +\n words[\n count % 100 > 4 && count % 100 < 20\n ? 2\n : cases[Math.min(count % 10, 5)]\n ]\n );\n };\n\n window.addEventListener(\"DOMContentLoaded\", () => {\n const container = document.getElementById(\"bundles-root\");\n\n new Swiper(container, {\n slidesPerView: 1,\n spaceBetween: 24,\n allowTouchMove: false,\n mousewheel: {\n forceToAxis: true,\n },\n navigation: {\n nextEl: props.next,\n prevEl: props.prev,\n },\n modules: [Navigation, Pagination]\n });\n\n const bundles = container.querySelectorAll(\n \"#bundles-root > .swiper-wrapper > .swiper-slide\"\n );\n\n bundles.forEach((bundle, bundleIndex) => {\n let active = [];\n let swipers = [];\n\n const infos = bundle.querySelectorAll(\".bundle-info\");\n const sliders = bundle.querySelectorAll(\".bundles-subproduct\");\n\n if (bundle.dataset.finish) {\n const timer = bundle.querySelector(\".countdown\");\n\n new countdown(bundle.dataset.finish, {\n onCalculateRemainingTime: function () {\n const months = this.timeRemaining[1];\n const days = this.timeRemaining[2];\n\n if (months > 0) {\n timer.innerHTML = pluralize(\n months,\n __(\"shop.pluralize.monthes\")\n );\n } else if (days > 0) {\n timer.innerHTML = pluralize(\n days,\n __(\"shop.pluralize.days\")\n );\n } else {\n const hours = this.timeRemaining[3];\n const minutes = this.timeRemaining[4];\n const seconds = this.timeRemaining[5];\n\n timer.innerHTML =\n hours + \":\" + minutes + \":\" + seconds;\n }\n },\n });\n }\n\n sliders.forEach((slider, index) => {\n const next = slider.querySelector(props.thumbNext);\n const prev = slider.querySelector(props.thumbPrev);\n const pagination = slider.querySelector(\".swiper-pagination\");\n\n active[index] = 0;\n\n if (pagination) {\n swipers[index] = new Swiper(\n slider.querySelector(\".swiper\"),\n {\n modules: [Navigation, Pagination],\n slidesPerView: 1,\n spaceBetween: 24,\n navigation: {\n nextEl: next,\n prevEl: prev,\n },\n pagination: {\n el: pagination,\n clickable: true,\n },\n on: {\n slideChange: function (el) {\n active[index] = el.activeIndex;\n\n infos.forEach((info) => {\n info.classList.add(\"is-hidden\");\n });\n\n const id = \"bundle\" + bundleIndex + \"-info-\" + active.join(\"-\");\n\n document.getElementById(id).classList.remove(\"is-hidden\");\n },\n },\n }\n );\n }\n });\n });\n });\n },\n};\n</script>"],"names":["script","name","props","prev","type","String","default","next","thumbPrev","thumbNext","setup","pluralize","count","words","Math","min","window","addEventListener","container","document","getElementById","Swiper","slidesPerView","spaceBetween","allowTouchMove","mousewheel","forceToAxis","navigation","nextEl","prevEl","modules","Navigation","Pagination","querySelectorAll","forEach","bundle","bundleIndex","active","infos","sliders","dataset","finish","timer","querySelector","countdown","onCalculateRemainingTime","months","this","timeRemaining","days","innerHTML","__","hours","minutes","seconds","slider","index","pagination","el","clickable","on","slideChange","activeIndex","info","classList","add","id","join","remove"],"mappings":"yJAKeA,EAAA,CACXC,KAAM,SACNC,MAAO,CACHC,KAAM,CACFC,KAAMC,OACNC,QAAS,uBAEbC,KAAM,CACFH,KAAMC,OACNC,QAAS,uBAEbE,UAAW,CACPJ,KAAMC,OACNC,QAAS,uBAEbG,UAAW,CACPL,KAAMC,OACNC,QAAS,wBAGjBI,MAAK,SAACR,GACF,IAAMS,EAAY,SAACC,EAAOC,GAGtB,OACID,EACA,IACAC,EACAD,EAAQ,IAAM,GAAKA,EAAQ,IAAM,GAC3B,EAPE,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAQZE,KAAKC,IAAIH,EAAQ,GAAI,MAKzCI,OAAOC,iBAAiB,oBAAoB,WACxC,IAAMC,EAAYC,SAASC,eAAe,gBAE1C,IAAIC,EAAAA,QAAOH,EAAW,CAClBI,cAAe,EACfC,aAAc,GACdC,gBAAgB,EAChBC,WAAY,CACRC,aAAa,GAEjBC,WAAY,CACRC,OAAQ1B,EAAMK,KACdsB,OAAQ3B,EAAMC,MAElB2B,QAAS,CAACC,EAAUA,WAAEC,gBAGVd,EAAUe,iBACtB,mDAGIC,SAAQ,SAACC,EAAQC,GACrB,IAAIC,EAAS,GAGPC,EAAQH,EAAOF,iBAAiB,gBAChCM,EAAUJ,EAAOF,iBAAiB,uBAExC,GAAIE,EAAOK,QAAQC,OAAQ,CACvB,IAAMC,EAAQP,EAAOQ,cAAc,cAEnC,IAAIC,UAAUT,EAAOK,QAAQC,OAAQ,CACjCI,yBAA0B,WACtB,IAAMC,EAASC,KAAKC,cAAc,GAC5BC,EAAOF,KAAKC,cAAc,GAEhC,GAAIF,EAAS,EACTJ,EAAMQ,UAAYvC,EACdmC,EACAK,GAAG,gCAEJ,GAAIF,EAAO,EACdP,EAAMQ,UAAYvC,EACdsC,EACAE,GAAG,4BAEJ,CACH,IAAMC,EAAQL,KAAKC,cAAc,GAC3BK,EAAUN,KAAKC,cAAc,GAC7BM,EAAUP,KAAKC,cAAc,GAEnCN,EAAMQ,UACFE,EAAQ,IAAMC,EAAU,IAAMC,MAMlDf,EAAQL,SAAQ,SAACqB,EAAQC,GACrB,IAAMjD,EAAOgD,EAAOZ,cAAczC,EAAMO,WAClCN,EAAOoD,EAAOZ,cAAczC,EAAMM,WAClCiD,EAAaF,EAAOZ,cAAc,sBAExCN,EAAOmB,GAAS,EAEZC,GACiB,IAAIpC,UACjBkC,EAAOZ,cAAc,WACrB,CACIb,QAAS,CAACC,EAAUA,WAAEC,cACtBV,cAAe,EACfC,aAAc,GACdI,WAAY,CACRC,OAAQrB,EACRsB,OAAQ1B,GAEZsD,WAAY,CACRC,GAAID,EACJE,WAAW,GAEfC,GAAI,CACAC,YAAa,SAAUH,GACnBrB,EAAOmB,GAASE,EAAGI,YAEnBxB,EAAMJ,SAAQ,SAAC6B,GACXA,EAAKC,UAAUC,IAAI,gBAGvB,IAAMC,EAAK,SAAW9B,EAAc,SAAWC,EAAO8B,KAAK,KAE3DhD,SAASC,eAAe8C,GAAIF,UAAUI,OAAO"}
1
+ {"version":3,"file":"Bundle.js","sources":["../../../../src/components/shop/bundle/Bundle.vue"],"sourcesContent":["<template></template>\n<script>\nimport Swiper, { Navigation, Pagination } from \"swiper\";\nimport countdown from \"countdown.to\";\n\nexport default {\n name: \"bundle\",\n props: {\n prev: {\n type: String,\n default: \".swiper-button-prev\",\n },\n next: {\n type: String,\n default: \".swiper-button-next\",\n },\n thumbPrev: {\n type: String,\n default: \".swiper-button-prev\",\n },\n thumbNext: {\n type: String,\n default: \".swiper-button-next\",\n },\n },\n setup(props) {\n const pluralize = (count, words) => {\n let cases = [2, 0, 1, 1, 1, 2];\n\n return (\n count +\n \" \" +\n words[\n count % 100 > 4 && count % 100 < 20\n ? 2\n : cases[Math.min(count % 10, 5)]\n ]\n );\n };\n\n window.addEventListener(\"DOMContentLoaded\", () => {\n const container = document.getElementById(\"bundles-root\");\n\n new Swiper(container, {\n slidesPerView: 1,\n spaceBetween: 24,\n allowTouchMove: false,\n mousewheel: {\n forceToAxis: true,\n },\n navigation: {\n nextEl: props.next,\n prevEl: props.prev,\n },\n modules: [Navigation, Pagination]\n });\n\n const bundles = container.querySelectorAll(\n \"#bundles-root > .swiper-wrapper > .swiper-slide\"\n );\n\n bundles.forEach((bundle, bundleIndex) => {\n let active = [];\n let swipers = [];\n\n const infos = bundle.querySelectorAll(\".bundle-info\");\n const sliders = bundle.querySelectorAll(\".bundles-subproduct\");\n\n if (bundle.dataset.finish) {\n const timer = bundle.querySelector(\".countdown\");\n\n new countdown(bundle.dataset.finish, {\n onCalculateRemainingTime: function () {\n const months = this.timeRemaining[1];\n const days = this.timeRemaining[2];\n\n if (months > 0) {\n timer.innerHTML = pluralize(\n months,\n __(\"shop.pluralize.monthes\")\n );\n } else if (days > 0) {\n timer.innerHTML = pluralize(\n days,\n __(\"shop.pluralize.days\")\n );\n } else {\n const hours = this.timeRemaining[3];\n const minutes = this.timeRemaining[4];\n const seconds = this.timeRemaining[5];\n\n timer.innerHTML =\n hours + \":\" + minutes + \":\" + seconds;\n }\n },\n });\n }\n\n sliders.forEach((slider, index) => {\n const next = slider.querySelector(props.thumbNext);\n const prev = slider.querySelector(props.thumbPrev);\n const pagination = slider.querySelector(\".swiper-pagination\");\n\n active[index] = 0;\n\n if (pagination) {\n swipers[index] = new Swiper(\n slider.querySelector(\".swiper\"),\n {\n modules: [Navigation, Pagination],\n slidesPerView: 1,\n spaceBetween: 24,\n navigation: {\n nextEl: next,\n prevEl: prev,\n },\n pagination: {\n el: pagination,\n clickable: true,\n },\n on: {\n slideChange: function (el) {\n active[index] = el.activeIndex;\n\n infos.forEach((info) => {\n info.classList.add(\"is-hidden\");\n });\n\n const id = \"bundle\" + bundleIndex + \"-info-\" + active.join(\"-\");\n\n document.getElementById(id).classList.remove(\"is-hidden\");\n },\n },\n }\n );\n }\n });\n });\n });\n },\n};\n</script>"],"names":["script","name","props","prev","type","String","default","next","thumbPrev","thumbNext","setup","pluralize","count","words","Math","min","window","addEventListener","container","document","getElementById","Swiper","slidesPerView","spaceBetween","allowTouchMove","mousewheel","forceToAxis","navigation","nextEl","prevEl","modules","Navigation","Pagination","querySelectorAll","forEach","bundle","bundleIndex","active","infos","sliders","dataset","finish","timer","querySelector","countdown","onCalculateRemainingTime","months","this","timeRemaining","days","innerHTML","__","hours","minutes","seconds","slider","index","pagination","el","clickable","on","slideChange","activeIndex","info","classList","add","id","join","remove"],"mappings":"yJAKeA,EAAA,CACXC,KAAM,SACNC,MAAO,CACHC,KAAM,CACFC,KAAMC,OACNC,QAAS,uBAEbC,KAAM,CACFH,KAAMC,OACNC,QAAS,uBAEbE,UAAW,CACPJ,KAAMC,OACNC,QAAS,uBAEbG,UAAW,CACPL,KAAMC,OACNC,QAAS,wBAGjBI,MAAAA,SAAMR,GACF,IAAMS,EAAY,SAACC,EAAOC,GAGtB,OACID,EACA,IACAC,EACAD,EAAQ,IAAM,GAAKA,EAAQ,IAAM,GAC3B,EAPE,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAQZE,KAAKC,IAAIH,EAAQ,GAAI,MAKzCI,OAAOC,iBAAiB,oBAAoB,WACxC,IAAMC,EAAYC,SAASC,eAAe,gBAE1C,IAAIC,EAAAA,QAAOH,EAAW,CAClBI,cAAe,EACfC,aAAc,GACdC,gBAAgB,EAChBC,WAAY,CACRC,aAAa,GAEjBC,WAAY,CACRC,OAAQ1B,EAAMK,KACdsB,OAAQ3B,EAAMC,MAElB2B,QAAS,CAACC,EAAUA,WAAEC,gBAGVd,EAAUe,iBACtB,mDAGIC,SAAQ,SAACC,EAAQC,GACrB,IAAIC,EAAS,GAGPC,EAAQH,EAAOF,iBAAiB,gBAChCM,EAAUJ,EAAOF,iBAAiB,uBAExC,GAAIE,EAAOK,QAAQC,OAAQ,CACvB,IAAMC,EAAQP,EAAOQ,cAAc,cAEnC,IAAIC,UAAUT,EAAOK,QAAQC,OAAQ,CACjCI,yBAA0B,WACtB,IAAMC,EAASC,KAAKC,cAAc,GAC5BC,EAAOF,KAAKC,cAAc,GAEhC,GAAIF,EAAS,EACTJ,EAAMQ,UAAYvC,EACdmC,EACAK,GAAG,gCAEJ,GAAIF,EAAO,EACdP,EAAMQ,UAAYvC,EACdsC,EACAE,GAAG,4BAEJ,CACH,IAAMC,EAAQL,KAAKC,cAAc,GAC3BK,EAAUN,KAAKC,cAAc,GAC7BM,EAAUP,KAAKC,cAAc,GAEnCN,EAAMQ,UACFE,EAAQ,IAAMC,EAAU,IAAMC,MAMlDf,EAAQL,SAAQ,SAACqB,EAAQC,GACrB,IAAMjD,EAAOgD,EAAOZ,cAAczC,EAAMO,WAClCN,EAAOoD,EAAOZ,cAAczC,EAAMM,WAClCiD,EAAaF,EAAOZ,cAAc,sBAExCN,EAAOmB,GAAS,EAEZC,GACiB,IAAIpC,UACjBkC,EAAOZ,cAAc,WACrB,CACIb,QAAS,CAACC,EAAUA,WAAEC,cACtBV,cAAe,EACfC,aAAc,GACdI,WAAY,CACRC,OAAQrB,EACRsB,OAAQ1B,GAEZsD,WAAY,CACRC,GAAID,EACJE,WAAW,GAEfC,GAAI,CACAC,YAAa,SAAUH,GACnBrB,EAAOmB,GAASE,EAAGI,YAEnBxB,EAAMJ,SAAQ,SAAC6B,GACXA,EAAKC,UAAUC,IAAI,gBAGvB,IAAMC,EAAK,SAAW9B,EAAc,SAAWC,EAAO8B,KAAK,KAE3DhD,SAASC,eAAe8C,GAAIF,UAAUI,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"BundleAdd.js","sources":["../../../../src/components/shop/bundle/BundleAdd.vue","../../../../src/components/shop/bundle/BundleAdd.vue?vue&type=template&id=cf71b1a8&lang.js"],"sourcesContent":["<template>\n <div class=\"shop-bundle-add\">\n <button\n class=\"button is-link is-small\"\n v-on:click=\"add\"\n :disabled=\"loading\"\n v-text=\"__('shop.bundle.add')\"\n ></button>\n <div v-if=\"$env.shop.isAlreadyInCart && cart > 0\">\n {{ __(\"shop.cart.already\", { quantity: cart }) }}\n <br />\n <a\n v-on:click.prevent=\"remove\"\n :disabled=\"loading\"\n v-text=\"__('shop.cart.remove')\"\n ></a>\n </div>\n </div>\n</template>\n<script>\nimport { ref, computed } from \"vue\";\nimport { useStore } from \"vuex\";\n\nexport default {\n name: \"BundleAdd\",\n props: {\n id: Number,\n second: Number,\n third: Number,\n },\n setup(props) {\n const loading = ref(false);\n const store = useStore();\n const bundleId =\n props.id +\n \"-\" +\n props.second +\n (props.third ? \"-\" + props.third : \"\");\n\n const cart = computed(() =>\n store.getters[\"cart/productQuantity\"](bundleId)\n );\n\n let isAlreadyInCart = props.isAlreadyInCart;\n\n const add = () => {\n loading.value = true;\n\n store.dispatch(\"cart/add\", {\n product: {\n id: bundleId,\n quantity: 1,\n },\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n const remove = () => {\n loading.value = true;\n\n store.dispatch(\"cart/remove\", {\n id: bundleId,\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n return {\n loading,\n add,\n remove,\n cart,\n isAlreadyInCart,\n };\n },\n};\n</script>","<template>\n <div class=\"shop-bundle-add\">\n <button\n class=\"button is-link is-small\"\n v-on:click=\"add\"\n :disabled=\"loading\"\n v-text=\"__('shop.bundle.add')\"\n ></button>\n <div v-if=\"$env.shop.isAlreadyInCart && cart > 0\">\n {{ __(\"shop.cart.already\", { quantity: cart }) }}\n <br />\n <a\n v-on:click.prevent=\"remove\"\n :disabled=\"loading\"\n v-text=\"__('shop.cart.remove')\"\n ></a>\n </div>\n </div>\n</template>\n<script>\nimport { ref, computed } from \"vue\";\nimport { useStore } from \"vuex\";\n\nexport default {\n name: \"BundleAdd\",\n props: {\n id: Number,\n second: Number,\n third: Number,\n },\n setup(props) {\n const loading = ref(false);\n const store = useStore();\n const bundleId =\n props.id +\n \"-\" +\n props.second +\n (props.third ? \"-\" + props.third : \"\");\n\n const cart = computed(() =>\n store.getters[\"cart/productQuantity\"](bundleId)\n );\n\n let isAlreadyInCart = props.isAlreadyInCart;\n\n const add = () => {\n loading.value = true;\n\n store.dispatch(\"cart/add\", {\n product: {\n id: bundleId,\n quantity: 1,\n },\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n const remove = () => {\n loading.value = true;\n\n store.dispatch(\"cart/remove\", {\n id: bundleId,\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n return {\n loading,\n add,\n remove,\n cart,\n isAlreadyInCart,\n };\n },\n};\n</script>"],"names":["script","name","props","id","Number","second","third","setup","loading","ref","store","useStore","bundleId","cart","computed","getters","isAlreadyInCart","add","value","dispatch","product","quantity","finally","remove","_hoisted_1","class","_createElementVNode","createElementVNode","_openBlock","_createElementBlock","onClick","$setup","apply","arguments","disabled","textContent","_toDisplayString","_ctx","__","$env","shop","_hoisted_3","_hoisted_4"],"mappings":"oDAuBeA,EAAA,CACXC,KAAM,YACNC,MAAO,CACHC,GAAIC,OACJC,OAAQD,OACRE,MAAOF,QAEXG,MAAK,SAACL,GACF,IAAMM,EAAUC,OAAI,GACdC,EAAQC,EAAAA,WACRC,EACFV,EAAMC,GACN,IACAD,EAAMG,QACLH,EAAMI,MAAQ,IAAMJ,EAAMI,MAAQ,IAEjCO,EAAOC,EAAAA,UAAS,WAAA,OAClBJ,EAAMK,QAAQ,wBAAwBH,MAGtCI,EAAkBd,EAAMc,gBA2B5B,MAAO,CACHR,QAAAA,EACAS,IA3BQ,WACRT,EAAQU,OAAQ,EAEhBR,EAAMS,SAAS,WAAY,CACvBC,QAAS,CACLjB,GAAIS,EACJS,SAAU,GAEdC,QAAS,WACLd,EAAQU,OAAQ,MAmBxBK,OAdW,WACXf,EAAQU,OAAQ,EAEhBR,EAAMS,SAAS,cAAe,CAC1BhB,GAAIS,EACJU,QAAS,WACLd,EAAQU,OAAQ,MASxBL,KAAAA,EACAG,gBAAAA,KC1EHQ,EAAA,CAAAC,MAAM,4DASHC,EAAKC,mBAAA,KAAA,KAAA,MAAA,+DATb,OAAAC,EAAAA,YAAAC,qBAgBK,MAhBLL,EAgBK,CAfDE,EAKSC,mBAAA,SAAA,CAJLF,MAAM,0BACDK,sCAAOC,EAAGd,KAAAc,EAAAd,IAAAe,MAAAD,EAAAE,aACdC,SAAUH,EAAOvB,QAClB2B,YAAAC,EAAAA,gBAAQC,EAAEC,GAAA,+BAEHD,EAAAE,KAAKC,KAAKxB,iBAAmBe,EAAKlB,KAAA,iBAA7CgB,qBAQK,MAAAY,EAAA,qCAPEJ,EAAEC,GAAA,oBAAA,CAAAjB,SAAkCU,EAAKlB,QAAI,IAChD,GAAA6B,EACAhB,EAIIC,mBAAA,IAAA,CAHKG,uDAAeC,EAAMR,QAAAQ,EAAAR,OAAAS,MAAAD,EAAAE,aAAA,CAAA,aACzBC,SAAUH,EAAOvB,QAClB2B,YAAAC,EAAAA,gBAAQC,EAAEC,GAAA"}
1
+ {"version":3,"file":"BundleAdd.js","sources":["../../../../src/components/shop/bundle/BundleAdd.vue","../../../../src/components/shop/bundle/BundleAdd.vue?vue&type=template&id=cf71b1a8&lang.js"],"sourcesContent":["<template>\n <div class=\"shop-bundle-add\">\n <button\n class=\"button is-link is-small\"\n v-on:click=\"add\"\n :disabled=\"loading\"\n v-text=\"__('shop.bundle.add')\"\n ></button>\n <div v-if=\"$env.shop.isAlreadyInCart && cart > 0\">\n {{ __(\"shop.cart.already\", { quantity: cart }) }}\n <br />\n <a\n v-on:click.prevent=\"remove\"\n :disabled=\"loading\"\n v-text=\"__('shop.cart.remove')\"\n ></a>\n </div>\n </div>\n</template>\n<script>\nimport { ref, computed } from \"vue\";\nimport { useStore } from \"vuex\";\n\nexport default {\n name: \"BundleAdd\",\n props: {\n id: Number,\n second: Number,\n third: Number,\n },\n setup(props) {\n const loading = ref(false);\n const store = useStore();\n const bundleId =\n props.id +\n \"-\" +\n props.second +\n (props.third ? \"-\" + props.third : \"\");\n\n const cart = computed(() =>\n store.getters[\"cart/productQuantity\"](bundleId)\n );\n\n let isAlreadyInCart = props.isAlreadyInCart;\n\n const add = () => {\n loading.value = true;\n\n store.dispatch(\"cart/add\", {\n product: {\n id: bundleId,\n quantity: 1,\n },\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n const remove = () => {\n loading.value = true;\n\n store.dispatch(\"cart/remove\", {\n id: bundleId,\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n return {\n loading,\n add,\n remove,\n cart,\n isAlreadyInCart,\n };\n },\n};\n</script>","<template>\n <div class=\"shop-bundle-add\">\n <button\n class=\"button is-link is-small\"\n v-on:click=\"add\"\n :disabled=\"loading\"\n v-text=\"__('shop.bundle.add')\"\n ></button>\n <div v-if=\"$env.shop.isAlreadyInCart && cart > 0\">\n {{ __(\"shop.cart.already\", { quantity: cart }) }}\n <br />\n <a\n v-on:click.prevent=\"remove\"\n :disabled=\"loading\"\n v-text=\"__('shop.cart.remove')\"\n ></a>\n </div>\n </div>\n</template>\n<script>\nimport { ref, computed } from \"vue\";\nimport { useStore } from \"vuex\";\n\nexport default {\n name: \"BundleAdd\",\n props: {\n id: Number,\n second: Number,\n third: Number,\n },\n setup(props) {\n const loading = ref(false);\n const store = useStore();\n const bundleId =\n props.id +\n \"-\" +\n props.second +\n (props.third ? \"-\" + props.third : \"\");\n\n const cart = computed(() =>\n store.getters[\"cart/productQuantity\"](bundleId)\n );\n\n let isAlreadyInCart = props.isAlreadyInCart;\n\n const add = () => {\n loading.value = true;\n\n store.dispatch(\"cart/add\", {\n product: {\n id: bundleId,\n quantity: 1,\n },\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n const remove = () => {\n loading.value = true;\n\n store.dispatch(\"cart/remove\", {\n id: bundleId,\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n return {\n loading,\n add,\n remove,\n cart,\n isAlreadyInCart,\n };\n },\n};\n</script>"],"names":["script","name","props","id","Number","second","third","setup","loading","ref","store","useStore","bundleId","cart","computed","getters","isAlreadyInCart","add","value","dispatch","product","quantity","finally","remove","_hoisted_1","class","_createElementVNode","createElementVNode","_openBlock","_createElementBlock","onClick","$setup","apply","arguments","disabled","textContent","_toDisplayString","_ctx","__","$env","shop","_hoisted_3","_hoisted_4"],"mappings":"oDAuBeA,EAAA,CACXC,KAAM,YACNC,MAAO,CACHC,GAAIC,OACJC,OAAQD,OACRE,MAAOF,QAEXG,MAAAA,SAAML,GACF,IAAMM,EAAUC,OAAI,GACdC,EAAQC,EAAAA,WACRC,EACFV,EAAMC,GACN,IACAD,EAAMG,QACLH,EAAMI,MAAQ,IAAMJ,EAAMI,MAAQ,IAEjCO,EAAOC,EAAAA,UAAS,WAAA,OAClBJ,EAAMK,QAAQ,wBAAwBH,MAGtCI,EAAkBd,EAAMc,gBA2B5B,MAAO,CACHR,QAAAA,EACAS,IA3BQ,WACRT,EAAQU,OAAQ,EAEhBR,EAAMS,SAAS,WAAY,CACvBC,QAAS,CACLjB,GAAIS,EACJS,SAAU,GAEdC,QAAS,WACLd,EAAQU,OAAQ,MAmBxBK,OAdW,WACXf,EAAQU,OAAQ,EAEhBR,EAAMS,SAAS,cAAe,CAC1BhB,GAAIS,EACJU,QAAS,WACLd,EAAQU,OAAQ,MASxBL,KAAAA,EACAG,gBAAAA,KC1EHQ,EAAA,CAAAC,MAAM,4DASHC,EAAKC,mBAAA,KAAA,KAAA,MAAA,+DATb,OAAAC,EAAAA,YAAAC,qBAgBK,MAhBLL,EAgBK,CAfDE,EAKSC,mBAAA,SAAA,CAJLF,MAAM,0BACDK,sCAAOC,EAAGd,KAAAc,EAAAd,IAAAe,MAAAD,EAAAE,aACdC,SAAUH,EAAOvB,QAClB2B,YAAAC,EAAAA,gBAAQC,EAAEC,GAAA,+BAEHD,EAAAE,KAAKC,KAAKxB,iBAAmBe,EAAKlB,KAAA,iBAA7CgB,qBAQK,MAAAY,EAAA,qCAPEJ,EAAEC,GAAA,oBAAA,CAAAjB,SAAkCU,EAAKlB,QAAI,IAChD,GAAA6B,EACAhB,EAIIC,mBAAA,IAAA,CAHKG,uDAAeC,EAAMR,QAAAQ,EAAAR,OAAAS,MAAAD,EAAAE,aAAA,CAAA,aACzBC,SAAUH,EAAOvB,QAClB2B,YAAAC,EAAAA,gBAAQC,EAAEC,GAAA"}