@perevorot/shop 2.0.38 → 2.0.39
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.
- package/dist/components/shop/cart/Cart.js +1 -1
- package/dist/components/shop/cart/Cart.js.map +1 -1
- package/dist/components/shop/cart/CartItem.js +1 -1
- package/dist/components/shop/cart/CartItem.js.map +1 -1
- package/dist/components/shop/order/Checkout.js +1 -1
- package/dist/components/shop/order/Checkout.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkout.js","sources":["../../../../src/components/shop/order/CheckoutItem.vue","../../../../src/components/shop/order/CheckoutItem.vue?vue&type=template&id=4d5a1fac&lang.js","../../../../src/components/shop/order/Checkout.vue","../../../../src/components/shop/order/Checkout.vue?vue&type=template&id=7abdcabc&lang.js"],"sourcesContent":["<template>\n <div class=\"columns is-multiline shop-cart-item\" v-bind:class=\"{ 'is-bundle': item.attributes.bundle }\">\n <div class=\"column is-12\" v-if=\"item.attributes.bundle\">\n <div class=\"bundle-title\">{{ __('shop.cart.bundle') }}</div>\n </div>\n <div class=\"column name\">\n <div class=\"columns\" v-bind:class=\"{ 'mb-0': item.attributes.bundle }\">\n <div class=\"column is-narrow\">\n <a :href=\"item.attributes.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.image }\">\n <img :src=\"item.attributes.image\" v-if=\"item.attributes.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"columns is-gapless mb-0\">\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.code\">{{ __('shop.cart.code') }} {{ item.attributes.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.href\">{{ item.name }}</a>\n </div>\n </div>\n <div class=\"column is-2 has-text-centered is-relative\">\n <div class=\"quantity\">⨉ {{ item.quantity }}</div>\n <div class=\"quantity-price\" v-if=\"parseInt(item.quantity) > 1\"><span v-html=\"$filters.price(item.attributes.price)\"></span> / {{ __('shop.cart.q') }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">\n <div class=\"price\" v-bind:class=\"{ 'bundle-price': item.attributes.bundle }\">\n <div v-if=\"item.attributes.priceOld\" class=\"price-old\" v-html=\"$filters.price(item.attributes.priceOld * item.quantity)\"></div>\n <div class=\"bundle-amount\" v-if=\"item.attributes.bundle && item.attributes.amount\" v-html=\"__('shop.cart.bundle_amount') + (item.attributes.amount.percent ? item.attributes.amount.percent + '%' : $filters.price(item.attributes.amount.sum * item.quantity))\"></div>\n <div v-html=\"$filters.price(item.attributes.price * item.quantity)\"></div>\n </div>\n </div>\n </div>\n <div class=\"options is-toggled\" v-if=\"itemOptions && itemOptions.length\">\n <div class=\"toggler\">\n <span>{{ __('shop.cart.additional') }} {{ itemOptions.length }}</span>\n </div>\n <div class=\"wrapper\">\n <div v-for=\"(option, index) in itemOptions\" v-bind:key=\"index\" class=\"columns is-checked\">\n <div class=\"column\">\n <div class=\"option-title\">{{ option.name }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">+<span v-html=\"$filters.price(option.price)\"></span></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.second.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.second.image }\">\n <img :src=\"item.attributes.second.image\" v-if=\"item.attributes.second.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.second.code\">{{ __('shop.cart.code') }} {{ item.attributes.second.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.second.href\">{{ item.attributes.second.name }}</a>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle && item.attributes.third\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.third.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.third.image }\">\n <img :src=\"item.attributes.third.image\" v-if=\"item.attributes.third.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.third.code\">{{ __('shop.cart.code') }} {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => (props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []));\n const itemOptions = computed(() => (props.item.options && props.item.options.length ? props.item.options.filter((option) => options.value.indexOf(option.id) !== -1) : []));\n\n return {\n itemOptions\n };\n }\n});\n</script>","<template>\n <div class=\"columns is-multiline shop-cart-item\" v-bind:class=\"{ 'is-bundle': item.attributes.bundle }\">\n <div class=\"column is-12\" v-if=\"item.attributes.bundle\">\n <div class=\"bundle-title\">{{ __('shop.cart.bundle') }}</div>\n </div>\n <div class=\"column name\">\n <div class=\"columns\" v-bind:class=\"{ 'mb-0': item.attributes.bundle }\">\n <div class=\"column is-narrow\">\n <a :href=\"item.attributes.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.image }\">\n <img :src=\"item.attributes.image\" v-if=\"item.attributes.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"columns is-gapless mb-0\">\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.code\">{{ __('shop.cart.code') }} {{ item.attributes.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.href\">{{ item.name }}</a>\n </div>\n </div>\n <div class=\"column is-2 has-text-centered is-relative\">\n <div class=\"quantity\">⨉ {{ item.quantity }}</div>\n <div class=\"quantity-price\" v-if=\"parseInt(item.quantity) > 1\"><span v-html=\"$filters.price(item.attributes.price)\"></span> / {{ __('shop.cart.q') }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">\n <div class=\"price\" v-bind:class=\"{ 'bundle-price': item.attributes.bundle }\">\n <div v-if=\"item.attributes.priceOld\" class=\"price-old\" v-html=\"$filters.price(item.attributes.priceOld * item.quantity)\"></div>\n <div class=\"bundle-amount\" v-if=\"item.attributes.bundle && item.attributes.amount\" v-html=\"__('shop.cart.bundle_amount') + (item.attributes.amount.percent ? item.attributes.amount.percent + '%' : $filters.price(item.attributes.amount.sum * item.quantity))\"></div>\n <div v-html=\"$filters.price(item.attributes.price * item.quantity)\"></div>\n </div>\n </div>\n </div>\n <div class=\"options is-toggled\" v-if=\"itemOptions && itemOptions.length\">\n <div class=\"toggler\">\n <span>{{ __('shop.cart.additional') }} {{ itemOptions.length }}</span>\n </div>\n <div class=\"wrapper\">\n <div v-for=\"(option, index) in itemOptions\" v-bind:key=\"index\" class=\"columns is-checked\">\n <div class=\"column\">\n <div class=\"option-title\">{{ option.name }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">+<span v-html=\"$filters.price(option.price)\"></span></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.second.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.second.image }\">\n <img :src=\"item.attributes.second.image\" v-if=\"item.attributes.second.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.second.code\">{{ __('shop.cart.code') }} {{ item.attributes.second.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.second.href\">{{ item.attributes.second.name }}</a>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle && item.attributes.third\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.third.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.third.image }\">\n <img :src=\"item.attributes.third.image\" v-if=\"item.attributes.third.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.third.code\">{{ __('shop.cart.code') }} {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => (props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []));\n const itemOptions = computed(() => (props.item.options && props.item.options.length ? props.item.options.filter((option) => options.value.indexOf(option.id) !== -1) : []));\n\n return {\n itemOptions\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">{{ __('shop.order.checkout_title') }}</div>\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"checkout-block items\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n {{ __('shop.order.your_order') }}\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>\n <span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>{{ __('shop.order.edit') }}</span>\n </button>\n </template>\n </cart-trigger>\n </div>\n <!-- <button @click=\"resertStore\" style=\"position: fixed; bottom: 1px; right: 1px; z-index: 1000\">reset</button> -->\n <div class=\"checkout-block\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" />{{ __('shop.order.auth_new') }}</label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" />{{ __('shop.order.auth_old') }}</label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">{{ __('shop.order.auth_social') }}</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.shipping') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <component :is=\"item.component\" v-show=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> {{ __('shop.cart.bysum') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"discount\">\n <div class=\"info\">{{ __('shop.order.discount') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"fee > 0\">\n <div class=\"info\">{{ __('shop.order.fee') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"shipping\">\n <div class=\"info\">{{ __('shop.order.shipping_price') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(total + fee + shippingPrice)\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>{{ __('shop.order.comment') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ __('shop.order.success') }}\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">{{ __('shop.order.pay_online') }}</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">{{ __('shop.order.pay_online_go') }}</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">{{ __('shop.cart.continue') }}</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">{{ __('shop.order.shipping') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.shipping[0]\" v-html=\"order.shipping[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.shipping[1]\" v-html=\"order.shipping[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">{{ __('shop.order.payment') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"checkout-block empty\">\n <div class=\"title\">{{ __('shop.cart.no_no') }}</div>\n <div class=\"message\">\n {{ __('shop.cart.no_prop') }}\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.no_home') }}</a\n >, <br />{{ __('shop.cart.no_search') }}\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.continue') }}</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nmarkRaw(FormText);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n name: 'order-checkout',\n setup() {\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name) => {\n return computed({\n get() {\n return userCheckout.value[name];\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone')\n });\n\n store.dispatch('auth/me', {\n finally: () => {}\n });\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchema = ref({\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n }\n });\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n\n const userValidation = yup.object().shape({\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required'))\n });\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = () => {\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid));\n });\n };\n\n const checkout = () => {\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast(__('shop.order.validate_user'), {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast(__('shop.order.validate_shipping'), {\n type: 'error'\n });\n } else if (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast(__('shop.order.validate_payment'), {\n type: 'error'\n });\n } else {\n let data = JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code]));\n delete data.isValid;\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email\n },\n shipping: {\n id: shipping.value,\n data: data\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n } else {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n name: item.name,\n id: item.attributes.code,\n price: item.attributes.price,\n brand: item.attributes.brand,\n category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n purchase: {\n actionField: {\n id: response.data.order.id,\n affiliation: 'mrfix.ua',\n revenue: total.value + fee.value + shippingPrice.value,\n tax: '0',\n shipping: shippingPrice.value\n },\n products: [products]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Purchase',\n 'gtm-ee-event-non-interaction': 'False'\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n resertStore();\n\n // nextTick(() => {\n // redirectForm.value.submit();\n // });\n })\n .catch((e) => {\n toast(__('shop.order.error'), {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">{{ __('shop.order.checkout_title') }}</div>\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"checkout-block items\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n {{ __('shop.order.your_order') }}\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>\n <span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>{{ __('shop.order.edit') }}</span>\n </button>\n </template>\n </cart-trigger>\n </div>\n <!-- <button @click=\"resertStore\" style=\"position: fixed; bottom: 1px; right: 1px; z-index: 1000\">reset</button> -->\n <div class=\"checkout-block\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" />{{ __('shop.order.auth_new') }}</label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" />{{ __('shop.order.auth_old') }}</label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">{{ __('shop.order.auth_social') }}</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.shipping') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <component :is=\"item.component\" v-show=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> {{ __('shop.cart.bysum') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"discount\">\n <div class=\"info\">{{ __('shop.order.discount') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"fee > 0\">\n <div class=\"info\">{{ __('shop.order.fee') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"shipping\">\n <div class=\"info\">{{ __('shop.order.shipping_price') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(total + fee + shippingPrice)\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>{{ __('shop.order.comment') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ __('shop.order.success') }}\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">{{ __('shop.order.pay_online') }}</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">{{ __('shop.order.pay_online_go') }}</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">{{ __('shop.cart.continue') }}</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">{{ __('shop.order.shipping') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.shipping[0]\" v-html=\"order.shipping[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.shipping[1]\" v-html=\"order.shipping[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">{{ __('shop.order.payment') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"checkout-block empty\">\n <div class=\"title\">{{ __('shop.cart.no_no') }}</div>\n <div class=\"message\">\n {{ __('shop.cart.no_prop') }}\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.no_home') }}</a\n >, <br />{{ __('shop.cart.no_search') }}\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.continue') }}</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nmarkRaw(FormText);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n name: 'order-checkout',\n setup() {\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name) => {\n return computed({\n get() {\n return userCheckout.value[name];\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone')\n });\n\n store.dispatch('auth/me', {\n finally: () => {}\n });\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchema = ref({\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n }\n });\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n\n const userValidation = yup.object().shape({\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required'))\n });\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = () => {\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid));\n });\n };\n\n const checkout = () => {\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast(__('shop.order.validate_user'), {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast(__('shop.order.validate_shipping'), {\n type: 'error'\n });\n } else if (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast(__('shop.order.validate_payment'), {\n type: 'error'\n });\n } else {\n let data = JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code]));\n delete data.isValid;\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email\n },\n shipping: {\n id: shipping.value,\n data: data\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n } else {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n name: item.name,\n id: item.attributes.code,\n price: item.attributes.price,\n brand: item.attributes.brand,\n category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n purchase: {\n actionField: {\n id: response.data.order.id,\n affiliation: 'mrfix.ua',\n revenue: total.value + fee.value + shippingPrice.value,\n tax: '0',\n shipping: shippingPrice.value\n },\n products: [products]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Purchase',\n 'gtm-ee-event-non-interaction': 'False'\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n resertStore();\n\n // nextTick(() => {\n // redirectForm.value.submit();\n // });\n })\n .catch((e) => {\n toast(__('shop.order.error'), {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","item","Object","setup","options","computed","attributes","length","itemOptions","filter","option","value","indexOf","id","_createElementVNode","_createElementBlock","_ctx","bundle","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","href","image","src","_hoisted_10","_hoisted_11","_hoisted_12","code","_hoisted_13","_hoisted_14","_hoisted_16","_hoisted_17","quantity","parseInt","_hoisted_18","innerHTML","price","_hoisted_20","priceOld","amount","percent","sum","_hoisted_24","_hoisted_25","_hoisted_26","index","key","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_32","_hoisted_33","_hoisted_34","second","_hoisted_40","_hoisted_41","_hoisted_42","third","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_52","_hoisted_53","_hoisted_54","markRaw","FormText","SchemaForm","SchemaFormFactory","VeeValidatePlugin","window","viewedSwiperOptions","slidesPerView","freeMode","slideClass","mousewheel","forceToAxis","navigation","nextEl","prevEl","observer","observeParents","components","CheckoutItem","toast","useToast","store","useStore","loading","ref","getters","items","total","auth","userCheckout","ifCheckoutReady","redirectForm","thanks","order","redirect","shippingTypes","paymentMethods","userType","userSubmitButton","shippingComponentData","isCommentToggled","dontcall","get","set","commit","comment","watch","substring","field","data","JSON","parse","stringify","user","last_name","email","phone","dispatch","shipping","payment","shippingSelected","find","paymentSelected","shippingPrice","calculatePrice","fee","shippingTypesRestricted","restrictCheck","paymentMethodsRestricted","categoriesInCart","categories","forEach","category_id","push","type","Math","round","elements","restrictions","keys","ok","r","price_min","price_max","restrictedForce","shipping_type","payment_method","includes","restricted","discount","s","$http","post","location","then","response","userSchema","component","label","__","model","mask","useSchemaForm","userValidation","yup","object","shape","string","trim","required","matches","addEventListener","resertStore","facebook","$ziggy","provider","google","loginCallback","pluralize","checkout","isValid","valid","url","products","brand","category","ecommerce","purchase","actionField","affiliation","revenue","tax","event","dataLayer","e","console","error","click","validate","isUserValid","toggleShippingRadio","togglePaymentRadio","shippingStoreData","d","commentMaxLength","home","$env","locale","action","method","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_toDisplayString","_createBlock","_createVNode","onClick","open","_createCommentVNode","_hoisted_15","_hoisted_19","schemaRowClasses","schema","afterForm","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","icon","description","_hoisted_48","_hoisted_49","price_label","_hoisted_50","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_59","_hoisted_60","_hoisted_62","_hoisted_63","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_72","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_91","onMouseenter","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_97","_hoisted_98","_hoisted_99","submit","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_104","_hoisted_107","_hoisted_108","_hoisted_109","_hoisted_112","_hoisted_113","_hoisted_114","_hoisted_117"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Checkout.js","sources":["../../../../src/components/shop/order/CheckoutItem.vue","../../../../src/components/shop/order/CheckoutItem.vue?vue&type=template&id=4d5a1fac&lang.js","../../../../src/components/shop/order/Checkout.vue","../../../../src/components/shop/order/Checkout.vue?vue&type=template&id=5680dbe7&lang.js"],"sourcesContent":["<template>\n <div class=\"columns is-multiline shop-cart-item\" v-bind:class=\"{ 'is-bundle': item.attributes.bundle }\">\n <div class=\"column is-12\" v-if=\"item.attributes.bundle\">\n <div class=\"bundle-title\">{{ __('shop.cart.bundle') }}</div>\n </div>\n <div class=\"column name\">\n <div class=\"columns\" v-bind:class=\"{ 'mb-0': item.attributes.bundle }\">\n <div class=\"column is-narrow\">\n <a :href=\"item.attributes.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.image }\">\n <img :src=\"item.attributes.image\" v-if=\"item.attributes.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"columns is-gapless mb-0\">\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.code\">{{ __('shop.cart.code') }} {{ item.attributes.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.href\">{{ item.name }}</a>\n </div>\n </div>\n <div class=\"column is-2 has-text-centered is-relative\">\n <div class=\"quantity\">⨉ {{ item.quantity }}</div>\n <div class=\"quantity-price\" v-if=\"parseInt(item.quantity) > 1\"><span v-html=\"$filters.price(item.attributes.price)\"></span> / {{ __('shop.cart.q') }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">\n <div class=\"price\" v-bind:class=\"{ 'bundle-price': item.attributes.bundle }\">\n <div v-if=\"item.attributes.priceOld\" class=\"price-old\" v-html=\"$filters.price(item.attributes.priceOld * item.quantity)\"></div>\n <div class=\"bundle-amount\" v-if=\"item.attributes.bundle && item.attributes.amount\" v-html=\"__('shop.cart.bundle_amount') + (item.attributes.amount.percent ? item.attributes.amount.percent + '%' : $filters.price(item.attributes.amount.sum * item.quantity))\"></div>\n <div v-html=\"$filters.price(item.attributes.price * item.quantity)\"></div>\n </div>\n </div>\n </div>\n <div class=\"options is-toggled\" v-if=\"itemOptions && itemOptions.length\">\n <div class=\"toggler\">\n <span>{{ __('shop.cart.additional') }} {{ itemOptions.length }}</span>\n </div>\n <div class=\"wrapper\">\n <div v-for=\"(option, index) in itemOptions\" v-bind:key=\"index\" class=\"columns is-checked\">\n <div class=\"column\">\n <div class=\"option-title\">{{ option.name }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">+<span v-html=\"$filters.price(option.price)\"></span></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.second.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.second.image }\">\n <img :src=\"item.attributes.second.image\" v-if=\"item.attributes.second.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.second.code\">{{ __('shop.cart.code') }} {{ item.attributes.second.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.second.href\">{{ item.attributes.second.name }}</a>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle && item.attributes.third\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.third.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.third.image }\">\n <img :src=\"item.attributes.third.image\" v-if=\"item.attributes.third.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.third.code\">{{ __('shop.cart.code') }} {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => (props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []));\n const itemOptions = computed(() => (props.item.options && props.item.options.length ? props.item.options.filter((option) => options.value.indexOf(option.id) !== -1) : []));\n\n return {\n itemOptions\n };\n }\n});\n</script>","<template>\n <div class=\"columns is-multiline shop-cart-item\" v-bind:class=\"{ 'is-bundle': item.attributes.bundle }\">\n <div class=\"column is-12\" v-if=\"item.attributes.bundle\">\n <div class=\"bundle-title\">{{ __('shop.cart.bundle') }}</div>\n </div>\n <div class=\"column name\">\n <div class=\"columns\" v-bind:class=\"{ 'mb-0': item.attributes.bundle }\">\n <div class=\"column is-narrow\">\n <a :href=\"item.attributes.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.image }\">\n <img :src=\"item.attributes.image\" v-if=\"item.attributes.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"columns is-gapless mb-0\">\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.code\">{{ __('shop.cart.code') }} {{ item.attributes.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.href\">{{ item.name }}</a>\n </div>\n </div>\n <div class=\"column is-2 has-text-centered is-relative\">\n <div class=\"quantity\">⨉ {{ item.quantity }}</div>\n <div class=\"quantity-price\" v-if=\"parseInt(item.quantity) > 1\"><span v-html=\"$filters.price(item.attributes.price)\"></span> / {{ __('shop.cart.q') }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">\n <div class=\"price\" v-bind:class=\"{ 'bundle-price': item.attributes.bundle }\">\n <div v-if=\"item.attributes.priceOld\" class=\"price-old\" v-html=\"$filters.price(item.attributes.priceOld * item.quantity)\"></div>\n <div class=\"bundle-amount\" v-if=\"item.attributes.bundle && item.attributes.amount\" v-html=\"__('shop.cart.bundle_amount') + (item.attributes.amount.percent ? item.attributes.amount.percent + '%' : $filters.price(item.attributes.amount.sum * item.quantity))\"></div>\n <div v-html=\"$filters.price(item.attributes.price * item.quantity)\"></div>\n </div>\n </div>\n </div>\n <div class=\"options is-toggled\" v-if=\"itemOptions && itemOptions.length\">\n <div class=\"toggler\">\n <span>{{ __('shop.cart.additional') }} {{ itemOptions.length }}</span>\n </div>\n <div class=\"wrapper\">\n <div v-for=\"(option, index) in itemOptions\" v-bind:key=\"index\" class=\"columns is-checked\">\n <div class=\"column\">\n <div class=\"option-title\">{{ option.name }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">+<span v-html=\"$filters.price(option.price)\"></span></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.second.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.second.image }\">\n <img :src=\"item.attributes.second.image\" v-if=\"item.attributes.second.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.second.code\">{{ __('shop.cart.code') }} {{ item.attributes.second.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.second.href\">{{ item.attributes.second.name }}</a>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle && item.attributes.third\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.third.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.third.image }\">\n <img :src=\"item.attributes.third.image\" v-if=\"item.attributes.third.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.third.code\">{{ __('shop.cart.code') }} {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => (props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []));\n const itemOptions = computed(() => (props.item.options && props.item.options.length ? props.item.options.filter((option) => options.value.indexOf(option.id) !== -1) : []));\n\n return {\n itemOptions\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">{{ __('shop.order.checkout_title') }}</div>\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"checkout-block items\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n {{ __('shop.order.your_order') }}\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>\n <span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>{{ __('shop.order.edit') }}</span>\n </button>\n </template>\n </cart-trigger>\n </div>\n <!-- <button @click=\"resertStore\" style=\"position: fixed; bottom: 1px; right: 1px; z-index: 1000\">reset</button> -->\n <div class=\"checkout-block\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" />{{ __('shop.order.auth_new') }}</label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" />{{ __('shop.order.auth_old') }}</label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">{{ __('shop.order.auth_social') }}</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.shipping') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <component :is=\"item.component\" v-show=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> {{ __('shop.cart.bysum') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"discount\">\n <div class=\"info\">{{ __('shop.order.discount') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"fee > 0\">\n <div class=\"info\">{{ __('shop.order.fee') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"shipping\">\n <div class=\"info\">{{ __('shop.order.shipping_price') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(total + fee + shippingPrice)\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>{{ __('shop.order.comment') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ __('shop.order.success') }}\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">{{ __('shop.order.pay_online') }}</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">{{ __('shop.order.pay_online_go') }}</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">{{ __('shop.cart.continue') }}</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">{{ __('shop.order.shipping') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.shipping[0]\" v-html=\"order.shipping[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.shipping[1]\" v-html=\"order.shipping[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">{{ __('shop.order.payment') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"checkout-block empty\">\n <div class=\"title\">{{ __('shop.cart.no_no') }}</div>\n <div class=\"message\">\n {{ __('shop.cart.no_prop') }}\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.no_home') }}</a\n >, <br />{{ __('shop.cart.no_search') }}\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.continue') }}</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nmarkRaw(FormText);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n name: 'order-checkout',\n setup() {\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name) => {\n return computed({\n get() {\n return userCheckout.value[name];\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone')\n });\n\n store.dispatch('auth/me', {\n finally: () => {}\n });\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchema = ref({\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n }\n });\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n\n const userValidation = yup.object().shape({\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required'))\n });\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n window.addEventListener('pagehide', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = () => {\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid));\n });\n };\n\n const checkout = () => {\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast(__('shop.order.validate_user'), {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast(__('shop.order.validate_shipping'), {\n type: 'error'\n });\n } else if (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast(__('shop.order.validate_payment'), {\n type: 'error'\n });\n } else {\n let data = JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code]));\n delete data.isValid;\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email\n },\n shipping: {\n id: shipping.value,\n data: data\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n } else {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n name: item.name,\n id: item.attributes.code,\n price: item.attributes.price,\n brand: item.attributes.brand,\n category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n purchase: {\n actionField: {\n id: response.data.order.id,\n affiliation: 'mrfix.ua',\n revenue: total.value + fee.value + shippingPrice.value,\n tax: '0',\n shipping: shippingPrice.value\n },\n products: [products]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Purchase',\n 'gtm-ee-event-non-interaction': 'False'\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n resertStore();\n\n // nextTick(() => {\n // redirectForm.value.submit();\n // });\n })\n .catch((e) => {\n toast(__('shop.order.error'), {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">{{ __('shop.order.checkout_title') }}</div>\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"checkout-block items\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n {{ __('shop.order.your_order') }}\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>\n <span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>{{ __('shop.order.edit') }}</span>\n </button>\n </template>\n </cart-trigger>\n </div>\n <!-- <button @click=\"resertStore\" style=\"position: fixed; bottom: 1px; right: 1px; z-index: 1000\">reset</button> -->\n <div class=\"checkout-block\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" />{{ __('shop.order.auth_new') }}</label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" />{{ __('shop.order.auth_old') }}</label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">{{ __('shop.order.auth_social') }}</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.shipping') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <component :is=\"item.component\" v-show=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> {{ __('shop.cart.bysum') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"discount\">\n <div class=\"info\">{{ __('shop.order.discount') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"fee > 0\">\n <div class=\"info\">{{ __('shop.order.fee') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"shipping\">\n <div class=\"info\">{{ __('shop.order.shipping_price') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(total + fee + shippingPrice)\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>{{ __('shop.order.comment') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ __('shop.order.success') }}\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">{{ __('shop.order.pay_online') }}</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">{{ __('shop.order.pay_online_go') }}</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">{{ __('shop.cart.continue') }}</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">{{ __('shop.order.shipping') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.shipping[0]\" v-html=\"order.shipping[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.shipping[1]\" v-html=\"order.shipping[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">{{ __('shop.order.payment') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"checkout-block empty\">\n <div class=\"title\">{{ __('shop.cart.no_no') }}</div>\n <div class=\"message\">\n {{ __('shop.cart.no_prop') }}\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.no_home') }}</a\n >, <br />{{ __('shop.cart.no_search') }}\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.continue') }}</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nmarkRaw(FormText);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n name: 'order-checkout',\n setup() {\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name) => {\n return computed({\n get() {\n return userCheckout.value[name];\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone')\n });\n\n store.dispatch('auth/me', {\n finally: () => {}\n });\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchema = ref({\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n }\n });\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n\n const userValidation = yup.object().shape({\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required'))\n });\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n window.addEventListener('pagehide', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = () => {\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid));\n });\n };\n\n const checkout = () => {\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast(__('shop.order.validate_user'), {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast(__('shop.order.validate_shipping'), {\n type: 'error'\n });\n } else if (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast(__('shop.order.validate_payment'), {\n type: 'error'\n });\n } else {\n let data = JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code]));\n delete data.isValid;\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email\n },\n shipping: {\n id: shipping.value,\n data: data\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n } else {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n name: item.name,\n id: item.attributes.code,\n price: item.attributes.price,\n brand: item.attributes.brand,\n category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n purchase: {\n actionField: {\n id: response.data.order.id,\n affiliation: 'mrfix.ua',\n revenue: total.value + fee.value + shippingPrice.value,\n tax: '0',\n shipping: shippingPrice.value\n },\n products: [products]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Purchase',\n 'gtm-ee-event-non-interaction': 'False'\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n resertStore();\n\n // nextTick(() => {\n // redirectForm.value.submit();\n // });\n })\n .catch((e) => {\n toast(__('shop.order.error'), {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","item","Object","setup","options","computed","attributes","length","itemOptions","filter","option","value","indexOf","id","_createElementVNode","_createElementBlock","_ctx","bundle","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","href","image","src","_hoisted_10","_hoisted_11","_hoisted_12","code","_hoisted_13","_hoisted_14","_hoisted_16","_hoisted_17","quantity","parseInt","_hoisted_18","innerHTML","price","_hoisted_20","priceOld","amount","percent","sum","_hoisted_24","_hoisted_25","_hoisted_26","index","key","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_32","_hoisted_33","_hoisted_34","second","_hoisted_40","_hoisted_41","_hoisted_42","third","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_52","_hoisted_53","_hoisted_54","markRaw","FormText","SchemaForm","SchemaFormFactory","VeeValidatePlugin","window","viewedSwiperOptions","slidesPerView","freeMode","slideClass","mousewheel","forceToAxis","navigation","nextEl","prevEl","observer","observeParents","components","CheckoutItem","toast","useToast","store","useStore","loading","ref","getters","items","total","auth","userCheckout","ifCheckoutReady","redirectForm","thanks","order","redirect","shippingTypes","paymentMethods","userType","userSubmitButton","shippingComponentData","isCommentToggled","dontcall","get","set","commit","comment","watch","substring","field","data","JSON","parse","stringify","user","last_name","email","phone","dispatch","shipping","payment","shippingSelected","find","paymentSelected","shippingPrice","calculatePrice","fee","shippingTypesRestricted","restrictCheck","paymentMethodsRestricted","categoriesInCart","categories","forEach","category_id","push","type","Math","round","elements","restrictions","keys","ok","r","price_min","price_max","restrictedForce","shipping_type","payment_method","includes","restricted","discount","s","$http","post","location","then","response","userSchema","component","label","__","model","mask","useSchemaForm","userValidation","yup","object","shape","string","trim","required","matches","addEventListener","resertStore","facebook","$ziggy","provider","google","loginCallback","pluralize","checkout","isValid","valid","url","products","brand","category","ecommerce","purchase","actionField","affiliation","revenue","tax","event","dataLayer","e","console","error","click","validate","isUserValid","toggleShippingRadio","togglePaymentRadio","shippingStoreData","d","commentMaxLength","home","$env","locale","action","method","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_toDisplayString","_createBlock","_createVNode","onClick","open","_createCommentVNode","_hoisted_15","_hoisted_19","schemaRowClasses","schema","afterForm","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","icon","description","_hoisted_48","_hoisted_49","price_label","_hoisted_50","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_59","_hoisted_60","_hoisted_62","_hoisted_63","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_72","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_91","onMouseenter","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_97","_hoisted_98","_hoisted_99","submit","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_104","_hoisted_107","_hoisted_108","_hoisted_109","_hoisted_112","_hoisted_113","_hoisted_114","_hoisted_117"],"mappings":"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"}
|