@perevorot/shop 3.0.0 → 3.0.1
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.
|
@@ -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=227b30bf&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\" style=\"position: absolute; left: -1000px; top:-1000px;\" 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 checkout-blocks-wrapper\">\n <slot name=\"header\"></slot>\n <div class=\"checkout-block is-cart\"><!--items-->\n <div class=\"wrapper\">\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> <span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <slot name=\"cart\" :items=\"items\">\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 </slot>\n <slot name=\"cart-footer\" :total=\"total\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-user auth-user\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth && isLogin\">\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=\"logged-user\" v-if=\"auth\">\n <p><strong>{{ loggedUser.name }} {{ loggedUser.last_name }} {{ loggedUser.middle_name }}</strong></p>\n <p>{{ phoneFormatted(loggedUser.phone) }}, {{ loggedUser.email }}</p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.company_name\"><strong>{{ loggedUser.company_name }}</strong></p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.registration_number\">ЄДРПОУ {{ loggedUser.registration_number }}</p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.region\">{{ loggedUser.region_name }} {{ loggedUser.district_name ? ', ' + loggedUser.district_name : '' }}</p>\n </div>\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\" :initial-errors=\"userErrors\" :key=\"userKey\" :preventModelCleanupOnSchemaChange=\"true\">\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'\" v-if=\"isLogin\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\" v-if=\"isLogin\">\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>\n <div class=\"checkout-block is-shipping\">\n <div class=\"wrapper shipping-type-block\">\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=\"shippingSelected && shippingSelected.nextDates\">\n <div class=\"next-dates\">на {{ shippingSelected.nextDates }}</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 <div v-if=\"!slots.shippingFooter\">\n <component :is=\"item.component\" v-if=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <slot name=\"shipping-footer\" :shippingTypesRestricted=\"shippingTypesRestricted\" :shipping=\"shipping\" :shippingStoreData=\"shippingStoreData\" :shippingComponentData=\"shippingComponentData\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-payment\" v-if=\"!isPaymentMethodOverSummary\">\n <div class=\"wrapper payment-method-block\">\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\" v-bind:class=\"'is-' + item.code\">\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=\"inner payment-method-block\" v-if=\"isPaymentMethodOverSummary\">\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\" v-bind:class=\"'is-' + item.code\">\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 class=\"divider\"></div>\n <div class=\"inner\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row products\">\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 discount\" 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 fee\" 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 shipping\" 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 promo\" v-if=\"promoCodeApplied\">\n <div class=\"info\">{{ __('shop.order.promo_code') }}<br><span class=\"green\">{{ promoCode }}</span></div>\n <div class=\"value\">\n <span v-html=\"(promoCodeApplied.type == 'percent' ? promoCodeApplied.amount + '%' : $filters.price(promoCodeApplied.amount))\"></span>\n </div>\n </div>\n <div class=\"row price\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(calculateWithPromoCodeDiscount())\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper nocall\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <slot name=\"loyalty\" :loyalty=\"loyalty\" :inactive=\"isUseLoyaltyPoints\"></slot>\n <div class=\"user-loyalty consent\" v-if=\"loggedUser && loggedUser.loyalty_points > 0 && total<=loggedUser.loyalty_points\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"isUseLoyaltyPoints\">\n <div class=\"label\">Сплатити замовлення за <span>{{ pluralize(readableTotalInPoints, __('shop.pluralize.points')) }}</span></div>\n </label>\n </div>\n <!-- <div class=\"notice\">{{ pluralize(readableUserLoyaltyPoints, __('shop.pluralize.points')) }} в наявності</div>\n <div class=\"user-form is-loyalty-use\">\n <div class=\"control\">\n <input type=\"number\" class=\"input\" placeholder=\"Сума бонусів\" v-model=\"loyaltyUse\" :disabled=\"loyaltyUseApplied\">\n </div>\n <button v-if=\"!loyaltyUseApplied\" class=\"button\" @click=\"applyLoyaltyUse\" :disabled=\"!loyaltyUse || loyaltyUse > loggedUser.loyalty_points\">Використати</button>\n <button v-else class=\"button is-reset\" @click=\"resetLoyaltyUse\">Відмінити</button>\n </div> -->\n </div>\n <div class=\"minimum-amount-message\" v-if=\"total < $env.checkout.minimum_amount\">\n <div class=\"columns is-gapless\">\n <div class=\"column is-narrow\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.50007 18C5.35778 18 2 14.6423 2 10.5C2 6.35775 5.35778 3 9.50007 3C13.6424 3 17.0001 6.35775 17.0001 10.5C17.0001 14.6423 13.6424 18 9.50007 18ZM8.75006 12.75V14.25H10.2501V12.75H8.75006ZM8.75006 6.75V11.25H10.2501V6.75H8.75006Z\" fill=\"#7C7C7C\" />\n </svg>\n </div>\n <div class=\"column\">\n <div class=\"message\" v-html=\"__('shop.order.minimum_amount', { amount: $filters.price($env.checkout.minimum_amount) })\"></div>\n </div>\n </div>\n </div>\n <button class=\"button submit\" @click=\"checkout\" v-bind:class=\"{ disabled: total < $env.checkout.minimum_amount, red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <slot name=\"submit\" :total=\"total\"></slot>\n <div class=\"consent\" v-if=\"isConsent\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"consent\" />\n <div class=\"label\" v-html=\"__('shop.order.consent')\"></div>\n </label>\n </div>\n </div>\n <div class=\"comment-wrapper is-promo-code\" v-bind:class=\"{ 'is-open': isPromoCodeToggled }\" v-if=\"isPromoCode\">\n <div class=\"toggler\" @click=\"isPromoCodeToggled = !isPromoCodeToggled\">\n <span>{{ __('shop.order.promo_code') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form is-promo-code\">\n <div class=\"control\">\n <input type=\"text\" class=\"input\" placeholder=\" \" v-model=\"promoCode\" :disabled=\"promoCodeApplied\" id=\"promo-code-applied\">\n <label class=\"label\" for=\"promo-code-applied\">{{ __('shop.order.promo.placeholder') }}</label>\n </div>\n <button v-if=\"!promoCodeApplied\" class=\"button\" @click=\"applyPromoCode\" :disabled=\"!promoCode\" v-bind:class=\"{ 'is-loading': isPromoLoading }\">{{ __('shop.order.promo.apply') }}</button>\n <button v-else class=\"button\" @click=\"resetPromoCode\">{{ __('shop.order.promo.reset') }}</button>\n </div>\n </div>\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>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <slot name=\"thanks\" :order=\"order\" :redirect=\"redirect\" :redirectForm=\"redirectForm\" :home=\"home\" :auth=\"auth\" :filters=\"$filters\" :user=\"user\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ isPayed ? __('shop.order.payed') : __('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 class=\"info-wrapper\" v-if=\"order.promoCode\">\n <div class=\"title\">{{ __('shop.order.promo_code') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\">\n <span v-html=\"order.promoCode\" class=\"green\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </slot>\n </div>\n <div v-else-if=\"!redirectOnEmpty\" 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>, <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, getCurrentInstance, nextTick, provide, useSlots, onMounted } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize, numberFormat } 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 FormRadio from '@perevorot/shop/dist/forms/FormRadio';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\nimport { auth as api } from '@perevorot/shop/dist/api';\nimport { formParse } from '@perevorot/shop/dist/helpers';\n\nyup.addMethod(yup.string, 'numberFilled', function (min, msg) {\n return this.test({\n name: 'numberFilled',\n exclusive: true,\n message: __('auth.validation.number'),\n params: {\n min: min,\n },\n test: (value) => !(value == '' || isNaN(value)),\n });\n});\n\nmarkRaw(FormText);\nmarkRaw(FormRadio);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nconst HtmlMessage = {\n props: {\n message: '',\n },\n template: '<div v-html=\"message\"></div>',\n};\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 props: {\n isLogin: {\n type: Boolean,\n default: true\n },\n isPhoneMasked: {\n type: Boolean,\n default: true\n },\n isPromoCode: {\n type: Boolean,\n default: true\n },\n isConsent: {\n type: Boolean,\n default: false\n },\n isPaymentMethodOverSummary: {\n type: Boolean,\n default: false\n },\n userFields: {\n type: Array,\n default: ['last_name', 'name', 'email', 'phone'],\n },\n redirectOnEmpty: {\n type: String,\n default: false\n },\n showPlaceholders: {\n type: Boolean,\n default: false\n },\n isTrackAfterSuccessOnlinePurchase: {\n type: Boolean,\n default: false\n }\n },\n name: 'order-checkout',\n setup(props) {\n const slots = useSlots();\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 loggedUser = computed(() => store.getters['auth/me']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n const consent = ref(false);\n const shippingComponent = 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 isPromoCodeToggled = ref(false);\n const promoCode = ref('');\n const promoCodeApplied = ref(null);\n const isPromoLoading = ref(false);\n const app = getCurrentInstance();\n\n const loyalty = computed(() => {\n const points = items.value.reduce((acc, array) => acc + (array.attributes.loyalty ? array.attributes.loyalty.points * array.quantity : 0), 0);\n\n return {\n points: points,\n name: pluralize(points, __('shop.pluralize.points'))\n };\n });\n\n const loyaltyUse = ref('');\n const isUseLoyaltyPoints = ref(false);\n\n watch(isUseLoyaltyPoints, (value) => {\n if (value) {\n loyaltyUse.value = total.value;\n } else {\n loyaltyUse.value = '';\n }\n });\n\n const loyaltyUseApplied = ref(false);\n\n const resetLoyaltyUse = () => {\n loyaltyUse.value = 0;\n loyaltyUseApplied.value = false;\n };\n\n const applyLoyaltyUse = () => {\n if (loyaltyUse.value) {\n loyaltyUseApplied.value = true;\n }\n };\n\n const readableTotalInPoints = computed(() => {\n return numberFormat(total.value);\n });\n\n const readableUserLoyaltyPoints = computed(() => {\n return numberFormat(loggedUser.value.loyalty_points - (loyaltyUseApplied.value ? loyaltyUse.value : 0));\n });\n\n const resetPromoCode = () => {\n promoCode.value = '';\n promoCodeApplied.value = null;\n };\n\n const isUserConsent = computed(() => {\n return (props.isConsent && consent.value) || !props.isConsent;\n });\n\n const applyPromoCode = () => {\n if (promoCode.value) {\n isPromoLoading.value = true;\n\n $http\n .post(window.location.href, {\n promoCodeApply: promoCode.value,\n email: user.value.email,\n total: total.value\n })\n .then(response => {\n promoCodeApplied.value = response.data;\n }).catch(error => {\n if (error.response && error.response.data.length) {\n error.response.data.forEach(error => {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.promo.error_' + error.error, { number: app.appContext.config.globalProperties.$filters.price(error.number) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n\n if (error.error == 'not_found') {\n promoCode.value = '';\n }\n });\n\n promoCodeApplied.value = null;\n }\n }).finally(() => {\n isPromoLoading.value = false;\n });\n }\n };\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, defaultValue) => {\n return computed({\n get() {\n return userCheckout.value[name] ? userCheckout.value[name] : defaultValue;\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 provide('field', field);\n\n // const user = ref({\n // last_name: field('last_name'),\n // middle_name: field('middle_name'),\n // name: field('name'),\n // email: field('email'),\n // phone: field('phone'),\n // registration_number: field('registration_number'),\n // company_name: field('company_name'),\n // user_type: field('user_type', 'individual'),\n // });\n const user = ref({});\n\n if (!auth.value) {\n api.registerForm()\n .then((response) => {\n if (response.data) {\n const form = formParse(response.data);\n\n userSchema.value = form.schema;\n user.value = form.model;\n userValidation.value = form.validation;\n }\n })\n .finally(() => {\n\n });\n }\n\n provide('user', user);\n provide('formModel', user);\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const calculateWithPromoCodeDiscount = () => {\n const sum = total.value + fee.value + shippingPrice.value;\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'percent') {\n return Math.round(sum - sum * promoCodeApplied.value.amount / 100);\n }\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'discount') {\n return Math.max(0, sum - promoCodeApplied.value.amount);\n }\n\n return sum;\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 if (ok && r.code === 'user_type') {\n ok = r.value === user.value.user_type;\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 // let userSchemaFields = {\n // user_type: {\n // component: FormRadio,\n // model: 'user_type',\n // label: '',\n // list: [\n // { code: 'individual', value: __('auth.registration.form.user_type_individual') },\n // { code: 'legal', value: __('auth.registration.form.user_type_legal') }\n // ],\n // },\n // name: {\n // component: FormText,\n // label: __('auth.registration.form.name'),\n // model: 'first_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.name') : '',\n // },\n // last_name: {\n // component: FormText,\n // label: __('auth.registration.form.last_name'),\n // model: 'last_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.last_name') : '',\n // },\n // middle_name: {\n // component: FormText,\n // label: __('auth.registration.form.middle_name'),\n // model: 'middle_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.middle_name') : '',\n // },\n // phone: {\n // component: FormText,\n // label: __('auth.registration.form.phone'),\n // model: 'phone',\n // type: 'phone',\n // //placeholder: '(050) 123-45-67'\n // },\n // registration_number: {\n // component: FormText,\n // label: __('auth.registration.form.registration_number'),\n // model: 'registration_number',\n // condition: (model) => model.user_type === 'legal',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.registration_number') : '',\n // },\n // company_name: {\n // component: FormText,\n // label: __('auth.registration.form.company_name'),\n // model: 'company_name',\n // condition: (model) => model.user_type === 'legal',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.company_name') : '',\n // },\n // email: {\n // component: FormText,\n // label: __('auth.login.form.email'),\n // model: 'email',\n // placeholder: props.showPlaceholders ? __('auth.login.form.email') : '',\n // },\n // };\n\n // if (props.isPhoneMasked) {\n // userSchemaFields.phone.mask = '(###) ###-##-##';\n // }\n\n // let userSchemaFieldsFiltered = Object.keys(userSchemaFields).reduce((obj, key) => {\n // if (props.userFields.includes(key)) {\n // obj[key] = userSchemaFields[key];\n // }\n\n // return obj;\n // }, {});\n\n // userSchemaFieldsFiltered = props.userFields.reduce((obj, key) => {\n // obj[key] = userSchemaFieldsFiltered[key];\n // return obj;\n // }, {});\n\n //const userSchema = ref(userSchemaFieldsFiltered);\n const userSchema = ref({});\n const userErrors = ref({});\n const userKey = ref(0);\n\n useSchemaForm(user);\n\n // const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n // const userValidationFields = {\n // last_name: yup.string().trim().required(__('auth.validation.required')),\n // middle_name: yup.string().trim().required(__('auth.validation.required')),\n // name: yup.string().trim().required(__('auth.validation.required')),\n // phone: props.isPhoneMasked ? yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')) : yup.string().required(__('auth.validation.phone')),\n // email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required')),\n // registration_number: yup.string().when('user_type', (user_type) => {\n // if (user_type == 'legal') {\n // return yup.string().numberFilled();\n // }\n // }),\n // company_name: yup.string().when('user_type', (user_type) => {\n // if (user_type == 'legal') {\n // return yup.string().required(__('auth.validation.required'));\n // }\n // }),\n // };\n\n // const userValidationFieldsFiltered = Object.keys(userValidationFields).reduce((obj, key) => {\n // if (props.userFields.includes(key)) {\n // obj[key] = userValidationFields[key];\n // }\n\n // return obj;\n // }, {});\n\n //const userValidation = yup.object().shape(userValidationFieldsFiltered);\n const userValidation = ref({});\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 = async () => {\n if (typeof shippingComponentValid.value == 'function') {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n if (userSubmitButton.value) {\n userSubmitButton.value.click();\n }\n\n if (!auth.value) {\n userValidation.value.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n });\n } else {\n ifCheckoutReady.value = payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n }\n }\n };\n\n const shippingComponentValid = ref(null);\n provide('shippingComponentValid', shippingComponentValid);\n\n const shippingComponentUserData = ref({});\n provide('shippingComponentUserData', shippingComponentUserData);\n\n const initPaymentWidget = (payment, order) => {\n const wayforpay = new Wayforpay();\n\n window.addEventListener('message', (event) => {\n if (event.data == 'WfpWidgetEventClose' || event.data == 'WfpWidgetEventDeclined' || event.data == 'WfpWidgetEventPending') {\n\n }\n\n if (event.data == 'WfpWidgetEventApproved') {\n resetCheckoutForm(order);\n\n isPayed.value = true;\n\n store.dispatch('cart/clear', {\n finally: () => { }\n });\n }\n });\n\n wayforpay.run(payment);\n }\n\n const isPayed = ref(false);\n\n const resetCheckoutForm = (_order) => {\n thanks.value = true;\n order.value = _order;\n\n document.querySelector('html').classList.add('is-checkout-thanks');\n\n resertStore();\n }\n\n const checkout = async () => {\n if (!auth.value) {\n userValidation.value.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 (user.value.is_register) {\n store.dispatch('auth/register', {\n type: 'Full',\n credentials: user.value,\n finally: () => {\n },\n callback: (response) => {\n createOrder();\n },\n catch: (error) => {\n let incomingErrors = {};\n\n if (error.response.data && error.response.data.errors) {\n for (const [field, messages] of Object.entries(error.response.data.errors)) {\n if (messages[0]) {\n incomingErrors[field] = messages[0];\n }\n }\n\n userKey.value++;\n }\n\n userErrors.value = incomingErrors;\n }\n });\n } else {\n createOrder();\n }\n });\n } else {\n createOrder();\n }\n };\n\n const createOrderWithoutValidate = (valid) => {\n let isShippingComponentFormsValid = typeof shippingComponentValid.value == 'function' ? shippingComponentValid.value() : null;\n\n if (shippingSelected.value && !shippingSelected.value.component) {\n isShippingComponentFormsValid = true;\n }\n\n if (total.value < $env.checkout.minimum_amount) {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.validate_minimum_amount', { amount: app.appContext.config.globalProperties.$filters.price($env.checkout.minimum_amount) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n } else 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 (shippingSelected.value.component && (!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 (!isShippingComponentFormsValid) {\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 if (!isUserConsent.value) {\n toast(__('shop.order.validate_consent'), {\n type: 'error'\n });\n } else {\n let clientId;\n let data = shippingComponentData.value[shippingSelected.value.code] ? JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code])) : {};\n\n delete data.isValid;\n\n const shippingUserData = JSON.parse(JSON.stringify(shippingComponentUserData.value));\n\n if (document.cookie) {\n const cookies = document.cookie.split(';');\n\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n\n if (parts[0].trim() === '_ga') {\n clientId = parts[1].split('.')[2] + '.' + parts[1].split('.')[3];\n }\n });\n }\n\n const userValue = auth.value ? loggedUser.value : user.value;\n\n const model = {\n checkout: true,\n user: {\n last_name: userValue.last_name,\n middle_name: userValue.middle_name,\n name: userValue.name,\n phone: userValue.phone,\n email: userValue.email,\n user_type: userValue.user_type,\n registration_number: userValue.registration_number,\n company_name: userValue.company_name,\n district: userValue.district,\n region: userValue.region,\n is_register: userValue.is_register,\n },\n shipping: {\n id: shipping.value,\n data: data,\n user: shippingUserData,\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value,\n promoCode: promoCode.value,\n loyalty: loyaltyUse.value,\n clientId: clientId\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data && response.data.error && response.data.message) {\n toast(response.data.message, {\n type: 'error',\n });\n\n return;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n let product = {\n item_name: item.name,\n item_id: item.attributes.code,\n price: item.price,\n quantity: item.quantity\n };\n\n if (item.attributes.brand) {\n product.item_brand = item.attributes.brand;\n }\n\n if (item.attributes.property) {\n product.item_variant = item.attributes.property;\n }\n\n if (item.attributes.categoryFull) {\n if (item.attributes.categoryFull.indexOf('/') !== -1) {\n item.attributes.categoryFull.split('/').forEach((segment, index) => {\n product['item_category' + (index ? index + 1 : '')] = segment.trim();\n });\n } else {\n product.item_category = item.attributes.categoryFull;\n }\n }\n\n if (item.attributes.index) {\n product.index = item.attributes.index;\n }\n\n if (item.attributes.itemListName) {\n product.item_list_name = item.attributes.itemListName;\n }\n\n products.push(product);\n });\n\n\n let object = {\n payment_type: paymentSelected.value.name,\n shipping_tier: shippingSelected.value.name,\n ecommerce: {\n transaction_id: response.data.order.id,\n affiliation: 'main',\n value: parseFloat(total.value),\n shipping: 0,\n currency: 'UAH',\n items: products\n },\n event: 'purchase',\n };\n\n if (user.value.user_type) {\n object.user_type = __('auth.registration.form.user_type_' + user.value.user_type);\n }\n\n if (promoCode.value) {\n object.ecommerce.coupon = promoCode.value;\n }\n\n if (props.isTrackAfterSuccessOnlinePurchase && (response.data.redirect || (response.data.payment_widget_data && window.Wayforpay))) {\n localStorage.setItem('ecommerce', JSON.stringify(object));\n } else {\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n\n nextTick(() => {\n setTimeout(() => {\n redirectForm.value.submit();\n }, 400);\n });\n }\n\n if (response.data.payment_widget_data && window.Wayforpay) {\n initPaymentWidget(JSON.parse(response.data.payment_widget_data), response.data.order);\n } else {\n resetCheckoutForm(response.data.order);\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 const createOrder = () => {\n if (!auth.value) {\n userValidation.value.isValid(user.value).then(function (valid) {\n createOrderWithoutValidate(valid);\n });\n } else {\n createOrderWithoutValidate(true);\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 // debug\n // store.commit('checkout/reset');\n // store.commit('cart/clear');\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 onMounted(() => {\n if (!quantity.value && props.redirectOnEmpty) {\n window.location.href = props.redirectOnEmpty;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n let product = {\n item_name: item.name,\n item_id: item.attributes.code,\n price: parseFloat(item.attributes.price),\n quantity: item.quantity\n };\n\n if (item.attributes.brand) {\n product.item_brand = item.attributes.brand;\n }\n\n if (item.attributes.property) {\n product.item_variant = item.attributes.property;\n }\n\n if (item.attributes.categoryFull) {\n if (item.attributes.categoryFull.indexOf('/') !== -1) {\n item.attributes.categoryFull.split('/').forEach((segment, index) => {\n product['item_category' + (index ? index + 1 : '')] = segment.trim();\n });\n } else {\n product.item_category = item.attributes.categoryFull;\n }\n }\n\n if (item.attributes.index) {\n product.index = item.attributes.index;\n }\n\n if (item.attributes.itemListName) {\n product.item_list_name = item.attributes.itemListName;\n }\n\n products.push(product);\n });\n\n if (products.length) {\n const object = {\n ecommerce: {\n currency: 'UAH',\n items: products,\n value: parseFloat(total.value),\n },\n event: 'begin_checkout'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n });\n\n const phoneFormatted = (phone) => {\n return phone.replace(/(\\d{3})(\\d{3})(\\d{2})(\\d{2})/, '($1) $2-$3-$4');\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 isPromoCodeToggled,\n applyPromoCode,\n promoCode,\n isPromoLoading,\n promoCodeApplied,\n resetPromoCode,\n calculateWithPromoCodeDiscount,\n consent,\n shippingComponent,\n slots,\n isPayed,\n loyalty,\n loyaltyUse,\n loyaltyUseApplied,\n resetLoyaltyUse,\n applyLoyaltyUse,\n readableUserLoyaltyPoints,\n userErrors,\n userKey,\n loggedUser,\n phoneFormatted,\n readableTotalInPoints,\n isUseLoyaltyPoints,\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" style=\"position: absolute; left: -1000px; top:-1000px;\" 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 checkout-blocks-wrapper\">\n <slot name=\"header\"></slot>\n <div class=\"checkout-block is-cart\"><!--items-->\n <div class=\"wrapper\">\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> <span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <slot name=\"cart\" :items=\"items\">\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 </slot>\n <slot name=\"cart-footer\" :total=\"total\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-user auth-user\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth && isLogin\">\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=\"logged-user\" v-if=\"auth\">\n <p><strong>{{ loggedUser.name }} {{ loggedUser.last_name }} {{ loggedUser.middle_name }}</strong></p>\n <p>{{ phoneFormatted(loggedUser.phone) }}, {{ loggedUser.email }}</p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.company_name\"><strong>{{ loggedUser.company_name }}</strong></p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.registration_number\">ЄДРПОУ {{ loggedUser.registration_number }}</p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.region\">{{ loggedUser.region_name }} {{ loggedUser.district_name ? ', ' + loggedUser.district_name : '' }}</p>\n </div>\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\" :initial-errors=\"userErrors\" :key=\"userKey\" :preventModelCleanupOnSchemaChange=\"true\">\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'\" v-if=\"isLogin\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\" v-if=\"isLogin\">\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>\n <div class=\"checkout-block is-shipping\">\n <div class=\"wrapper shipping-type-block\">\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=\"shippingSelected && shippingSelected.nextDates\">\n <div class=\"next-dates\">на {{ shippingSelected.nextDates }}</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 <div v-if=\"!slots.shippingFooter\">\n <component :is=\"item.component\" v-if=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <slot name=\"shipping-footer\" :shippingTypesRestricted=\"shippingTypesRestricted\" :shipping=\"shipping\" :shippingStoreData=\"shippingStoreData\" :shippingComponentData=\"shippingComponentData\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-payment\" v-if=\"!isPaymentMethodOverSummary\">\n <div class=\"wrapper payment-method-block\">\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\" v-bind:class=\"'is-' + item.code\">\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=\"inner payment-method-block\" v-if=\"isPaymentMethodOverSummary\">\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\" v-bind:class=\"'is-' + item.code\">\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 class=\"divider\"></div>\n <div class=\"inner\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row products\">\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 discount\" 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 fee\" 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 shipping\" 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 promo\" v-if=\"promoCodeApplied\">\n <div class=\"info\">{{ __('shop.order.promo_code') }}<br><span class=\"green\">{{ promoCode }}</span></div>\n <div class=\"value\">\n <span v-html=\"(promoCodeApplied.type == 'percent' ? promoCodeApplied.amount + '%' : $filters.price(promoCodeApplied.amount))\"></span>\n </div>\n </div>\n <div class=\"row price\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(calculateWithPromoCodeDiscount())\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper nocall\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <slot name=\"loyalty\" :loyalty=\"loyalty\" :inactive=\"isUseLoyaltyPoints\"></slot>\n <div class=\"user-loyalty consent\" v-if=\"loggedUser && loggedUser.loyalty_points > 0 && total<=loggedUser.loyalty_points\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"isUseLoyaltyPoints\">\n <div class=\"label\">Сплатити замовлення за <span>{{ pluralize(readableTotalInPoints, __('shop.pluralize.points')) }}</span></div>\n </label>\n </div>\n <!-- <div class=\"notice\">{{ pluralize(readableUserLoyaltyPoints, __('shop.pluralize.points')) }} в наявності</div>\n <div class=\"user-form is-loyalty-use\">\n <div class=\"control\">\n <input type=\"number\" class=\"input\" placeholder=\"Сума бонусів\" v-model=\"loyaltyUse\" :disabled=\"loyaltyUseApplied\">\n </div>\n <button v-if=\"!loyaltyUseApplied\" class=\"button\" @click=\"applyLoyaltyUse\" :disabled=\"!loyaltyUse || loyaltyUse > loggedUser.loyalty_points\">Використати</button>\n <button v-else class=\"button is-reset\" @click=\"resetLoyaltyUse\">Відмінити</button>\n </div> -->\n </div>\n <div class=\"minimum-amount-message\" v-if=\"total < $env.checkout.minimum_amount\">\n <div class=\"columns is-gapless\">\n <div class=\"column is-narrow\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.50007 18C5.35778 18 2 14.6423 2 10.5C2 6.35775 5.35778 3 9.50007 3C13.6424 3 17.0001 6.35775 17.0001 10.5C17.0001 14.6423 13.6424 18 9.50007 18ZM8.75006 12.75V14.25H10.2501V12.75H8.75006ZM8.75006 6.75V11.25H10.2501V6.75H8.75006Z\" fill=\"#7C7C7C\" />\n </svg>\n </div>\n <div class=\"column\">\n <div class=\"message\" v-html=\"__('shop.order.minimum_amount', { amount: $filters.price($env.checkout.minimum_amount) })\"></div>\n </div>\n </div>\n </div>\n <button class=\"button submit\" @click=\"checkout\" v-bind:class=\"{ disabled: total < $env.checkout.minimum_amount, red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <slot name=\"submit\" :total=\"total\"></slot>\n <div class=\"consent\" v-if=\"isConsent\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"consent\" />\n <div class=\"label\" v-html=\"__('shop.order.consent')\"></div>\n </label>\n </div>\n </div>\n <div class=\"comment-wrapper is-promo-code\" v-bind:class=\"{ 'is-open': isPromoCodeToggled }\" v-if=\"isPromoCode\">\n <div class=\"toggler\" @click=\"isPromoCodeToggled = !isPromoCodeToggled\">\n <span>{{ __('shop.order.promo_code') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form is-promo-code\">\n <div class=\"control\">\n <input type=\"text\" class=\"input\" placeholder=\" \" v-model=\"promoCode\" :disabled=\"promoCodeApplied\" id=\"promo-code-applied\">\n <label class=\"label\" for=\"promo-code-applied\">{{ __('shop.order.promo.placeholder') }}</label>\n </div>\n <button v-if=\"!promoCodeApplied\" class=\"button\" @click=\"applyPromoCode\" :disabled=\"!promoCode\" v-bind:class=\"{ 'is-loading': isPromoLoading }\">{{ __('shop.order.promo.apply') }}</button>\n <button v-else class=\"button\" @click=\"resetPromoCode\">{{ __('shop.order.promo.reset') }}</button>\n </div>\n </div>\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>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <slot name=\"thanks\" :order=\"order\" :redirect=\"redirect\" :redirectForm=\"redirectForm\" :home=\"home\" :auth=\"auth\" :filters=\"$filters\" :user=\"user\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ isPayed ? __('shop.order.payed') : __('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 class=\"info-wrapper\" v-if=\"order.promoCode\">\n <div class=\"title\">{{ __('shop.order.promo_code') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\">\n <span v-html=\"order.promoCode\" class=\"green\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </slot>\n </div>\n <div v-else-if=\"!redirectOnEmpty\" 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>, <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, getCurrentInstance, nextTick, provide, useSlots, onMounted } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize, numberFormat } 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 FormRadio from '@perevorot/shop/dist/forms/FormRadio';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\nimport { auth as api } from '@perevorot/shop/dist/api';\nimport { formParse } from '@perevorot/shop/dist/helpers';\n\nyup.addMethod(yup.string, 'numberFilled', function (min, msg) {\n return this.test({\n name: 'numberFilled',\n exclusive: true,\n message: __('auth.validation.number'),\n params: {\n min: min,\n },\n test: (value) => !(value == '' || isNaN(value)),\n });\n});\n\nmarkRaw(FormText);\nmarkRaw(FormRadio);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nconst HtmlMessage = {\n props: {\n message: '',\n },\n template: '<div v-html=\"message\"></div>',\n};\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 props: {\n isLogin: {\n type: Boolean,\n default: true\n },\n isPhoneMasked: {\n type: Boolean,\n default: true\n },\n isPromoCode: {\n type: Boolean,\n default: true\n },\n isConsent: {\n type: Boolean,\n default: false\n },\n isPaymentMethodOverSummary: {\n type: Boolean,\n default: false\n },\n userFields: {\n type: Array,\n default: ['last_name', 'name', 'email', 'phone'],\n },\n redirectOnEmpty: {\n type: String,\n default: false\n },\n showPlaceholders: {\n type: Boolean,\n default: false\n },\n isTrackAfterSuccessOnlinePurchase: {\n type: Boolean,\n default: false\n }\n },\n name: 'order-checkout',\n setup(props) {\n const slots = useSlots();\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 loggedUser = computed(() => store.getters['auth/me']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n const consent = ref(false);\n const shippingComponent = 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 isPromoCodeToggled = ref(false);\n const promoCode = ref('');\n const promoCodeApplied = ref(null);\n const isPromoLoading = ref(false);\n const app = getCurrentInstance();\n\n const loyalty = computed(() => {\n const points = items.value.reduce((acc, array) => acc + (array.attributes.loyalty ? array.attributes.loyalty.points * array.quantity : 0), 0);\n\n return {\n points: points,\n name: pluralize(points, __('shop.pluralize.points'))\n };\n });\n\n const loyaltyUse = ref('');\n const isUseLoyaltyPoints = ref(false);\n\n watch(isUseLoyaltyPoints, (value) => {\n if (value) {\n loyaltyUse.value = total.value;\n } else {\n loyaltyUse.value = '';\n }\n });\n\n const loyaltyUseApplied = ref(false);\n\n const resetLoyaltyUse = () => {\n loyaltyUse.value = 0;\n loyaltyUseApplied.value = false;\n };\n\n const applyLoyaltyUse = () => {\n if (loyaltyUse.value) {\n loyaltyUseApplied.value = true;\n }\n };\n\n const readableTotalInPoints = computed(() => {\n return numberFormat(total.value);\n });\n\n const readableUserLoyaltyPoints = computed(() => {\n return numberFormat(loggedUser.value.loyalty_points - (loyaltyUseApplied.value ? loyaltyUse.value : 0));\n });\n\n const resetPromoCode = () => {\n promoCode.value = '';\n promoCodeApplied.value = null;\n };\n\n const isUserConsent = computed(() => {\n return (props.isConsent && consent.value) || !props.isConsent;\n });\n\n const applyPromoCode = () => {\n if (promoCode.value) {\n isPromoLoading.value = true;\n\n $http\n .post(window.location.href, {\n promoCodeApply: promoCode.value,\n email: user.value.email,\n total: total.value\n })\n .then(response => {\n promoCodeApplied.value = response.data;\n }).catch(error => {\n if (error.response && error.response.data.length) {\n error.response.data.forEach(error => {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.promo.error_' + error.error, { number: app.appContext.config.globalProperties.$filters.price(error.number) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n\n if (error.error == 'not_found') {\n promoCode.value = '';\n }\n });\n\n promoCodeApplied.value = null;\n }\n }).finally(() => {\n isPromoLoading.value = false;\n });\n }\n };\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, defaultValue) => {\n return computed({\n get() {\n return userCheckout.value[name] ? userCheckout.value[name] : defaultValue;\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 provide('field', field);\n\n // const user = ref({\n // last_name: field('last_name'),\n // middle_name: field('middle_name'),\n // name: field('name'),\n // email: field('email'),\n // phone: field('phone'),\n // registration_number: field('registration_number'),\n // company_name: field('company_name'),\n // user_type: field('user_type', 'individual'),\n // });\n const user = ref({});\n\n if (!auth.value) {\n api.registerForm()\n .then((response) => {\n if (response.data) {\n const form = formParse(response.data);\n\n userSchema.value = form.schema;\n user.value = form.model;\n userValidation.value = form.validation;\n }\n })\n .finally(() => {\n\n });\n }\n\n provide('user', user);\n provide('formModel', user);\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const calculateWithPromoCodeDiscount = () => {\n const sum = total.value + fee.value + shippingPrice.value;\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'percent') {\n return Math.round(sum - sum * promoCodeApplied.value.amount / 100);\n }\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'discount') {\n return Math.max(0, sum - promoCodeApplied.value.amount);\n }\n\n return sum;\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 if (ok && r.code === 'user_type') {\n ok = r.value === user.value.user_type;\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 // let userSchemaFields = {\n // user_type: {\n // component: FormRadio,\n // model: 'user_type',\n // label: '',\n // list: [\n // { code: 'individual', value: __('auth.registration.form.user_type_individual') },\n // { code: 'legal', value: __('auth.registration.form.user_type_legal') }\n // ],\n // },\n // name: {\n // component: FormText,\n // label: __('auth.registration.form.name'),\n // model: 'first_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.name') : '',\n // },\n // last_name: {\n // component: FormText,\n // label: __('auth.registration.form.last_name'),\n // model: 'last_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.last_name') : '',\n // },\n // middle_name: {\n // component: FormText,\n // label: __('auth.registration.form.middle_name'),\n // model: 'middle_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.middle_name') : '',\n // },\n // phone: {\n // component: FormText,\n // label: __('auth.registration.form.phone'),\n // model: 'phone',\n // type: 'phone',\n // //placeholder: '(050) 123-45-67'\n // },\n // registration_number: {\n // component: FormText,\n // label: __('auth.registration.form.registration_number'),\n // model: 'registration_number',\n // condition: (model) => model.user_type === 'legal',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.registration_number') : '',\n // },\n // company_name: {\n // component: FormText,\n // label: __('auth.registration.form.company_name'),\n // model: 'company_name',\n // condition: (model) => model.user_type === 'legal',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.company_name') : '',\n // },\n // email: {\n // component: FormText,\n // label: __('auth.login.form.email'),\n // model: 'email',\n // placeholder: props.showPlaceholders ? __('auth.login.form.email') : '',\n // },\n // };\n\n // if (props.isPhoneMasked) {\n // userSchemaFields.phone.mask = '(###) ###-##-##';\n // }\n\n // let userSchemaFieldsFiltered = Object.keys(userSchemaFields).reduce((obj, key) => {\n // if (props.userFields.includes(key)) {\n // obj[key] = userSchemaFields[key];\n // }\n\n // return obj;\n // }, {});\n\n // userSchemaFieldsFiltered = props.userFields.reduce((obj, key) => {\n // obj[key] = userSchemaFieldsFiltered[key];\n // return obj;\n // }, {});\n\n //const userSchema = ref(userSchemaFieldsFiltered);\n const userSchema = ref({});\n const userErrors = ref({});\n const userKey = ref(0);\n\n useSchemaForm(user);\n\n // const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n // const userValidationFields = {\n // last_name: yup.string().trim().required(__('auth.validation.required')),\n // middle_name: yup.string().trim().required(__('auth.validation.required')),\n // name: yup.string().trim().required(__('auth.validation.required')),\n // phone: props.isPhoneMasked ? yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')) : yup.string().required(__('auth.validation.phone')),\n // email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required')),\n // registration_number: yup.string().when('user_type', (user_type) => {\n // if (user_type == 'legal') {\n // return yup.string().numberFilled();\n // }\n // }),\n // company_name: yup.string().when('user_type', (user_type) => {\n // if (user_type == 'legal') {\n // return yup.string().required(__('auth.validation.required'));\n // }\n // }),\n // };\n\n // const userValidationFieldsFiltered = Object.keys(userValidationFields).reduce((obj, key) => {\n // if (props.userFields.includes(key)) {\n // obj[key] = userValidationFields[key];\n // }\n\n // return obj;\n // }, {});\n\n //const userValidation = yup.object().shape(userValidationFieldsFiltered);\n const userValidation = ref({});\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 = async () => {\n if (typeof shippingComponentValid.value == 'function') {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n if (userSubmitButton.value) {\n userSubmitButton.value.click();\n }\n\n if (!auth.value) {\n userValidation.value.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n });\n } else {\n ifCheckoutReady.value = payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n }\n }\n };\n\n const shippingComponentValid = ref(null);\n provide('shippingComponentValid', shippingComponentValid);\n\n const shippingComponentUserData = ref({});\n provide('shippingComponentUserData', shippingComponentUserData);\n\n const initPaymentWidget = (payment, order) => {\n const wayforpay = new Wayforpay();\n\n window.addEventListener('message', (event) => {\n if (event.data == 'WfpWidgetEventClose' || event.data == 'WfpWidgetEventDeclined' || event.data == 'WfpWidgetEventPending') {\n\n }\n\n if (event.data == 'WfpWidgetEventApproved') {\n resetCheckoutForm(order);\n\n isPayed.value = true;\n\n store.dispatch('cart/clear', {\n finally: () => { }\n });\n }\n });\n\n wayforpay.run(payment);\n }\n\n const isPayed = ref(false);\n\n const resetCheckoutForm = (_order) => {\n thanks.value = true;\n order.value = _order;\n\n document.querySelector('html').classList.add('is-checkout-thanks');\n\n resertStore();\n }\n\n const checkout = async () => {\n if (!auth.value) {\n userValidation.value.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 (user.value.is_register) {\n store.dispatch('auth/register', {\n type: 'Full',\n credentials: user.value,\n finally: () => {\n },\n callback: (response) => {\n createOrder();\n },\n catch: (error) => {\n let incomingErrors = {};\n\n if (error.response.data && error.response.data.errors) {\n for (const [field, messages] of Object.entries(error.response.data.errors)) {\n if (messages[0]) {\n incomingErrors[field] = messages[0];\n }\n }\n\n userKey.value++;\n }\n\n userErrors.value = incomingErrors;\n }\n });\n } else {\n createOrder();\n }\n });\n } else {\n createOrder();\n }\n };\n\n const createOrderWithoutValidate = (valid) => {\n let isShippingComponentFormsValid = typeof shippingComponentValid.value == 'function' ? shippingComponentValid.value() : null;\n\n if (shippingSelected.value && !shippingSelected.value.component) {\n isShippingComponentFormsValid = true;\n }\n\n if (total.value < $env.checkout.minimum_amount) {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.validate_minimum_amount', { amount: app.appContext.config.globalProperties.$filters.price($env.checkout.minimum_amount) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n } else 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 (shippingSelected.value.component && (!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 (!isShippingComponentFormsValid) {\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 if (!isUserConsent.value) {\n toast(__('shop.order.validate_consent'), {\n type: 'error'\n });\n } else {\n let clientId;\n let data = shippingComponentData.value[shippingSelected.value.code] ? JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code])) : {};\n\n delete data.isValid;\n\n const shippingUserData = JSON.parse(JSON.stringify(shippingComponentUserData.value));\n\n if (document.cookie) {\n const cookies = document.cookie.split(';');\n\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n\n if (parts[0].trim() === '_ga') {\n clientId = parts[1].split('.')[2] + '.' + parts[1].split('.')[3];\n }\n });\n }\n\n const userValue = auth.value ? loggedUser.value : user.value;\n\n const model = {\n checkout: true,\n user: {\n last_name: userValue.last_name,\n middle_name: userValue.middle_name,\n name: userValue.name,\n phone: userValue.phone,\n email: userValue.email,\n user_type: userValue.user_type,\n registration_number: userValue.registration_number,\n company_name: userValue.company_name,\n district: userValue.district,\n region: userValue.region,\n is_register: userValue.is_register,\n },\n shipping: {\n id: shipping.value,\n data: data,\n user: shippingUserData,\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value,\n promoCode: promoCode.value,\n loyalty: loyaltyUse.value,\n clientId: clientId\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data && response.data.error && response.data.message) {\n toast(response.data.message, {\n type: 'error',\n });\n\n return;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n let product = {\n item_name: item.name,\n item_id: item.attributes.code,\n price: item.price,\n quantity: item.quantity\n };\n\n if (item.attributes.brand) {\n product.item_brand = item.attributes.brand;\n }\n\n if (item.attributes.property) {\n product.item_variant = item.attributes.property;\n }\n\n if (item.attributes.categoryFull) {\n if (item.attributes.categoryFull.indexOf('/') !== -1) {\n item.attributes.categoryFull.split('/').forEach((segment, index) => {\n product['item_category' + (index ? index + 1 : '')] = segment.trim();\n });\n } else {\n product.item_category = item.attributes.categoryFull;\n }\n }\n\n if (item.attributes.index) {\n product.index = item.attributes.index;\n }\n\n if (item.attributes.itemListName) {\n product.item_list_name = item.attributes.itemListName;\n }\n\n products.push(product);\n });\n\n\n let object = {\n payment_type: paymentSelected.value.name,\n shipping_tier: shippingSelected.value.name,\n ecommerce: {\n transaction_id: response.data.order.id,\n affiliation: 'main',\n value: parseFloat(total.value),\n shipping: 0,\n currency: 'UAH',\n items: products\n },\n event: 'purchase',\n };\n\n if (user.value.user_type) {\n object.user_type = __('auth.registration.form.user_type_' + user.value.user_type);\n }\n\n if (promoCode.value) {\n object.ecommerce.coupon = promoCode.value;\n }\n\n if (props.isTrackAfterSuccessOnlinePurchase && (response.data.redirect || (response.data.payment_widget_data && window.Wayforpay))) {\n localStorage.setItem('ecommerce', JSON.stringify(object));\n } else {\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n\n nextTick(() => {\n setTimeout(() => {\n redirectForm.value.submit();\n }, 400);\n });\n }\n\n if (response.data.payment_widget_data && window.Wayforpay) {\n initPaymentWidget(JSON.parse(response.data.payment_widget_data), response.data.order);\n } else {\n resetCheckoutForm(response.data.order);\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 const createOrder = () => {\n if (!auth.value) {\n userValidation.value.isValid(user.value).then(function (valid) {\n createOrderWithoutValidate(valid);\n });\n } else {\n createOrderWithoutValidate(true);\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 // debug\n // store.commit('checkout/reset');\n // store.commit('cart/clear');\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 onMounted(() => {\n if (!quantity.value && props.redirectOnEmpty) {\n window.location.href = props.redirectOnEmpty;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n let product = {\n item_name: item.name,\n item_id: item.attributes.code,\n price: parseFloat(item.attributes.price),\n quantity: item.quantity\n };\n\n if (item.attributes.brand) {\n product.item_brand = item.attributes.brand;\n }\n\n if (item.attributes.property) {\n product.item_variant = item.attributes.property;\n }\n\n if (item.attributes.categoryFull) {\n if (item.attributes.categoryFull.indexOf('/') !== -1) {\n item.attributes.categoryFull.split('/').forEach((segment, index) => {\n product['item_category' + (index ? index + 1 : '')] = segment.trim();\n });\n } else {\n product.item_category = item.attributes.categoryFull;\n }\n }\n\n if (item.attributes.index) {\n product.index = item.attributes.index;\n }\n\n if (item.attributes.itemListName) {\n product.item_list_name = item.attributes.itemListName;\n }\n\n products.push(product);\n });\n\n if (products.length) {\n const object = {\n ecommerce: {\n currency: 'UAH',\n items: products,\n value: parseFloat(total.value),\n },\n event: 'begin_checkout'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n });\n\n const phoneFormatted = (phone) => {\n return phone.replace(/(\\d{3})(\\d{3})(\\d{2})(\\d{2})/, '($1) $2-$3-$4');\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 isPromoCodeToggled,\n applyPromoCode,\n promoCode,\n isPromoLoading,\n promoCodeApplied,\n resetPromoCode,\n calculateWithPromoCodeDiscount,\n consent,\n shippingComponent,\n slots,\n isPayed,\n loyalty,\n loyaltyUse,\n loyaltyUseApplied,\n resetLoyaltyUse,\n applyLoyaltyUse,\n readableUserLoyaltyPoints,\n userErrors,\n userKey,\n loggedUser,\n phoneFormatted,\n readableTotalInPoints,\n isUseLoyaltyPoints,\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","item","Object","setup","options","computed","attributes","length","itemOptions","filter","option","value","indexOf","id","_createElementVNode","then","resolve","i","arguments","_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_31","_hoisted_32","_hoisted_33","second","_hoisted_39","_hoisted_40","_hoisted_41","third","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_51","_hoisted_52","_hoisted_53","yup","addMethod","string","min","msg","this","test","exclusive","message","__","params","isNaN","markRaw","FormText","FormRadio","SchemaForm","SchemaFormFactory","VeeValidatePlugin","HtmlMessage","template","window","viewedSwiperOptions","slidesPerView","freeMode","slideClass","mousewheel","forceToAxis","navigation","nextEl","prevEl","observer","observeParents","components","CheckoutItem","isLogin","type","Boolean","isPhoneMasked","isPromoCode","isConsent","isPaymentMethodOverSummary","userFields","Array","redirectOnEmpty","String","showPlaceholders","isTrackAfterSuccessOnlinePurchase","slots","useSlots","toast","useToast","store","useStore","loading","ref","getters","items","total","auth","userCheckout","loggedUser","ifCheckoutReady","redirectForm","thanks","order","consent","shippingComponent","redirect","shippingTypes","paymentMethods","userType","userSubmitButton","shippingComponentData","isCommentToggled","isPromoCodeToggled","promoCode","promoCodeApplied","isPromoLoading","app","getCurrentInstance","loyalty","points","reduce","acc","array","pluralize","loyaltyUse","isUseLoyaltyPoints","watch","loyaltyUseApplied","readableTotalInPoints","numberFormat","readableUserLoyaltyPoints","loyalty_points","isUserConsent","dontcall","get","set","commit","comment","substring","provide","defaultValue","data","JSON","parse","stringify","user","api","registerForm","response","form","formParse","userSchema","schema","model","userValidation","validation","dispatch","shipping","payment","shippingSelected","find","paymentSelected","shippingPrice","calculatePrice","fee","shippingTypesRestricted","restrictCheck","paymentMethodsRestricted","categoriesInCart","categories","forEach","category_id","push","Math","round","elements","restrictions","keys","ok","r","price_min","price_max","restrictedForce","shipping_type","payment_method","includes","user_type","restricted","discount","s","$http","post","location","userErrors","userKey","useSchemaForm","addEventListener","validate","result","shippingComponentValid","isShippingComponentFormsValid","click","component","isValid","isUserValid","shippingComponentUserData","isPayed","resetCheckoutForm","_order","document","querySelector","classList","add","checkout","createOrder","valid","is_register","credentials","callback","error","incomingErrors","errors","entries","field","messages","createOrderWithoutValidate","$env","minimum_amount","appContext","config","globalProperties","$filters","clientId","shippingUserData","cookie","split","parts","trim","userValue","last_name","middle_name","phone","email","registration_number","company_name","district","region","products","product","item_name","item_id","brand","item_brand","property","item_variant","categoryFull","segment","item_category","itemListName","item_list_name","object","payment_type","shipping_tier","ecommerce","transaction_id","affiliation","parseFloat","currency","event","coupon","payment_widget_data","Wayforpay","localStorage","setItem","debug","console","log","dataLayer","url","nextTick","setTimeout","submit","wayforpay","run","initPaymentWidget","e","onMounted","facebook","$ziggy","provider","google","loginCallback","toggleShippingRadio","togglePaymentRadio","shippingStoreData","d","resertStore","commentMaxLength","home","locale","applyPromoCode","promoCodeApply","number","resetPromoCode","calculateWithPromoCodeDiscount","max","resetLoyaltyUse","applyLoyaltyUse","phoneFormatted","replace","viewBox","fill","xmlns","action","style","method","_hoisted_5","_hoisted_6","_hoisted_7","_renderSlot","_hoisted_8","_createCommentVNode","_hoisted_9","_toDisplayString","_createBlock","_createVNode","onClick","open","_hoisted_15","_hoisted_19","_hoisted_21","region_name","district_name","schemaRowClasses","preventModelCleanupOnSchemaChange","afterForm","_hoisted_30","_hoisted_42","nextDates","_hoisted_46","_hoisted_47","_hoisted_49","_hoisted_50","icon","description","_hoisted_56","_hoisted_57","price_label","_hoisted_58","shippingFooter","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_69","_hoisted_71","_hoisted_72","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_83","_hoisted_85","_hoisted_86","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_95","_hoisted_97","_hoisted_98","_hoisted_99","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_112","_hoisted_113","_hoisted_114","_hoisted_116","_hoisted_117","_hoisted_118","_hoisted_120","inactive","_hoisted_121","_hoisted_122","_hoisted_123","_hoisted_124","_hoisted_125","_hoisted_126","_hoisted_127","_hoisted_129","_hoisted_130","_hoisted_132","_hoisted_133","_hoisted_134","placeholder","disabled","_hoisted_136","_hoisted_138","_hoisted_139","_hoisted_140","_hoisted_141","filters","_hoisted_142","_hoisted_143","_hoisted_144","_hoisted_145","_hoisted_146","_hoisted_147","_hoisted_148","_hoisted_149","_hoisted_150","_hoisted_153","_hoisted_154","_hoisted_155","_hoisted_158","_hoisted_159","_hoisted_160","_hoisted_161","_hoisted_163","_hoisted_164","_hoisted_165","_hoisted_167"],"mappings":"srDA0FA,MAA6BA,kBAAgB,CACzCC,KAAM,eACNC,MAAO,CACHC,KAAMC,QAEVC,eAAMH,OACII,EAAUC,YAAS,kBAAOL,EAAMC,KAAKK,WAAWF,SAAWJ,EAAMC,KAAKK,WAAWF,QAAQG,OAASP,EAAMC,KAAKK,WAAWF,QAAU,YAGjI,CACHI,YAHgBH,YAAS,kBAAOL,EAAMC,KAAKG,SAAWJ,EAAMC,KAAKG,QAAQG,OAASP,EAAMC,KAAKG,QAAQK,QAAO,SAACC,UAAiD,IAAtCN,EAAQO,MAAMC,QAAQF,EAAOG,OAAc,yBC/F5J,yBACI,yBAEJ,wBAEQ,sDAIaC,qBAA0B,oBAAV,4BAI7B,mBACI,oCACI,yBACI,iBACA,6BAIJ,sDACI,2BACA,2CAEJ,6FAQJ,+BACI,oBAGA,oBAEQ,mBACI,yBAEJ,6DAMpB,2BACI,sBACPA,kCAAW,gBAAcA,qBAAiC,oBAAjB,yDAIrBA,qBAA0B,oBAAV,6BAI7B,0BACI,kBACA,qCAKR,4BACI,uBACPA,kCAAW,gBAAcA,qBAAiC,oBAAjB,4DAIrBA,qBAA0B,oBAAV,6BAI7B,0BACI,kBACA,iCCyWRH,gBAEdI,aAEOJ,EAAMI,iBACJC,YAEVD,EAAOJ,EAAMI,KAAKA,GAAQJ,wCApB1B,qBACU,GAAIM,gCACTC,UAAUD,sBAGLD,iHD/adG,oDAAW,mDAAmEC,OAAKd,WAAWe,YAC1DD,OAAKd,WAAWe,sBAAhDF,2BAAAG,GACIR,2BAAAS,oBAA6BH,gEAEjCN,2BAAAU,GACIV,oDAAW,kBAAkCM,OAAKd,WAAWe,YACzDP,2BAAAW,GACIX,0BAAIY,KAAMN,OAAKd,WAAWoB,OACtBZ,uDAAc,+BAA+CM,OAAKd,WAAWqB,WACjCP,OAAKd,WAAWqB,qBAAxDR,kCAAMS,IAAKR,OAAKd,WAAWqB,iCAC3BR,6CAIZL,2BAAAe,GACIf,2BAAAgB,GACIhB,2BAAAiB,GAC4BX,OAAKd,WAAW0B,oBAAxCb,2BAAAc,oBAAiDb,8CAA2BA,OAAKd,WAAW0B,0CAC5FlB,2BAAAoB,GACIpB,0BAAIY,KAAMN,OAAKd,WAAWoB,wBAASN,OAAKrB,eAGhDe,2BAAAqB,GACIrB,2BAAAsB,EAAsB,uBAAKhB,OAAKiB,aACEC,SAASlB,OAAKiB,2BAAhDlB,2BAAAoB,GAA+DzB,6BAAM0B,UAAQpB,WAASqB,MAAMrB,OAAKd,WAAWmC,4DAAqBrB,6DAErIN,2BAAA4B,GACI5B,oDAAW,wBAAwCM,OAAKd,WAAWe,YACpDD,OAAKd,WAAWqC,wBAA3BxB,wCAA2C,YAAYqB,UAAQpB,WAASqB,MAAMrB,OAAKd,WAAWqC,SAAWvB,OAAKiB,sDAC7EjB,OAAKd,WAAWe,QAAUD,OAAKd,WAAWsC,sBAA3EzB,wCAAW,gBAAwEqB,UAAQpB,iCAAiCA,OAAKd,WAAWsC,OAAOC,QAAUzB,OAAKd,WAAWsC,OAAOC,YAAgBzB,WAASqB,MAAMrB,OAAKd,WAAWsC,OAAOE,IAAM1B,OAAKiB,uDACrPvB,4BAAK0B,UAAQpB,WAASqB,MAAMrB,OAAKd,WAAWmC,MAAQrB,OAAKiB,6BAI/BjB,eAAeA,cAAYb,sBAAjEY,2BAAA4B,GACIjC,2BAAAkC,GACIlC,mDAASM,oDAAiCA,cAAYb,aAE1DO,2BAAAmC,oBACI9B,kDAA+BC,wBAAlBV,EAAQwC,wBAArB/B,4BAAmDgC,IAAKD,QAAa,uBACjEpC,2BAAAsC,GACItC,2BAAAuC,oBAA6B3C,EAAOX,WAExCe,2BAAAwC,qBAAwC,KAACxC,qBAAmD,QAA7C0B,UAAQpB,WAASqB,MAAM/B,EAAO+B,0EAM/DrB,OAAKd,WAAWe,sBAAlDF,2BAAAoC,GACIzC,2BAAA0C,GACIC,EACA3C,0BAAIY,KAAMN,OAAKd,WAAWoD,OAAOhC,OAC7BZ,uDAAc,+BAA+CM,OAAKd,WAAWoD,OAAO/B,WACjCP,OAAKd,WAAWoD,OAAO/B,qBAAtER,kCAAMS,IAAKR,OAAKd,WAAWoD,OAAO/B,iCAClCR,8CAIZL,2BAAA6C,IAC4BvC,OAAKd,WAAWoD,OAAO1B,oBAA/Cb,2BAAAyC,qBAAwDxC,8CAA2BA,OAAKd,WAAWoD,OAAO1B,0CAC1GlB,2BAAA+C,IACI/C,0BAAIY,KAAMN,OAAKd,WAAWoD,OAAOhC,wBAASN,OAAKd,WAAWoD,OAAO3D,mDAI3CqB,OAAKd,WAAWe,QAAUD,OAAKd,WAAWwD,qBAA5E3C,2BAAA4C,IACIjD,2BAAAkD,IACIC,GACAnD,0BAAIY,KAAMN,OAAKd,WAAWwD,MAAMpC,OAC5BZ,uDAAc,+BAA+CM,OAAKd,WAAWwD,MAAMnC,WACjCP,OAAKd,WAAWwD,MAAMnC,qBAApER,kCAAMS,IAAKR,OAAKd,WAAWwD,MAAMnC,kCACjCR,gDAIZL,2BAAAoD,IAC4B9C,OAAKd,WAAWwD,MAAM9B,oBAA9Cb,2BAAAgD,qBAAuD/C,8CAA2BA,OAAKd,WAAWwD,MAAM9B,0CACxGlB,2BAAAsD,IACItD,0BAAIY,KAAMN,OAAKd,WAAWwD,MAAMpC,wBAASN,OAAKd,WAAWwD,MAAM/D,0DCkSvFsE,EAAIC,UAAUD,EAAIE,OAAQ,gBAAgB,SAAUC,EAAKC,UAC9CC,KAAKC,KAAK,CACb5E,KAAM,eACN6E,WAAW,EACXC,QAASC,GAAG,0BACZC,OAAQ,CACJP,IAAKA,GAETG,KAAM,SAAChE,WAAqB,IAATA,GAAeqE,MAAMrE,UAIhDsE,UAAQC,WACRD,UAAQE,WAER,IAAMC,GAAaC,oBAAkB,CAACC,UAAkB,MAElDC,GAAc,CAChBvF,MAAO,CACH6E,QAAS,IAEbW,SAAU,gCAGdC,OAAOC,oBAAsB,CACzBC,cAAe,OACfC,UAAU,EACVC,WAAY,UACZC,WAAY,CACRC,aAAa,GAEjBC,WAAY,CACRC,OAAQ,QACRC,OAAQ,SAEZC,UAAU,EACVC,gBAAgB,GAGpB,OAA6BtG,kBAAgB,CACzCuG,WAAY,CACRC,aAAAA,EACAlB,WAAAA,IAEJpF,MAAO,CACHuG,QAAS,CACLC,KAAMC,iBACG,GAEbC,cAAe,CACXF,KAAMC,iBACG,GAEbE,YAAa,CACTH,KAAMC,iBACG,GAEbG,UAAW,CACPJ,KAAMC,iBACG,GAEbI,2BAA4B,CACxBL,KAAMC,iBACG,GAEbK,WAAY,CACRN,KAAMO,cACG,CAAC,YAAa,OAAQ,QAAS,UAE5CC,gBAAiB,CACbR,KAAMS,gBACG,GAEbC,iBAAkB,CACdV,KAAMC,iBACG,GAEbU,kCAAmC,CAC/BX,KAAMC,iBACG,IAGjB1G,KAAM,iBACNI,eAAMH,OACIoH,EAAQC,aACRC,EAAQC,aACRC,EAAQC,aACRC,EAAUC,OAAI,GACdtF,EAAWhC,YAAS,kBAAMmH,EAAMI,QAAQ,oBACxCC,EAAQxH,YAAS,kBAAMmH,EAAMI,QAAQ,iBACrCE,EAAQzH,YAAS,kBAAMmH,EAAMI,QAAQ,iBACrCG,EAAO1H,YAAS,kBAAMmH,EAAMI,QAAQ,cACpCI,EAAe3H,YAAS,kBAAMmH,EAAMI,QAAQ,oBAC5CK,EAAa5H,YAAS,kBAAMmH,EAAMI,QAAQ,cAC1CM,EAAkBP,OAAI,GACtBQ,EAAeR,MAAI,MACnBS,EAAST,OAAI,GACbU,EAAQV,MAAI,MACZW,EAAUX,OAAI,GACdY,EAAoBZ,MAAI,MAExBa,EAAWb,MAAI,IAEfc,EAAgBd,MAAI,IACpBe,EAAiBf,MAAI,IAErBgB,EAAWhB,MAAI,OACfiB,EAAmBjB,MAAI,MAEvBkB,EAAwBxI,YAAS,kBAAMmH,EAAMI,QAAQ,4BACrDkB,EAAmBnB,OAAI,GAGvBoB,EAAqBpB,OAAI,GACzBqB,EAAYrB,MAAI,IAChBsB,EAAmBtB,MAAI,MACvBuB,EAAiBvB,OAAI,GACrBwB,EAAMC,uBAENC,EAAUhJ,YAAS,eACfiJ,EAASzB,EAAMlH,MAAM4I,QAAO,SAACC,EAAKC,UAAUD,GAAOC,EAAMnJ,WAAW+I,QAAUI,EAAMnJ,WAAW+I,QAAQC,OAASG,EAAMpH,SAAW,KAAI,SAEpI,CACHiH,OAAQA,EACRvJ,KAAM2J,YAAUJ,EAAQxE,GAAG,8BAI7B6E,EAAahC,MAAI,IACjBiC,EAAqBjC,OAAI,GAE/BkC,QAAMD,GAAoB,SAACjJ,GAEnBgJ,EAAWhJ,MADXA,EACmBmH,EAAMnH,MAEN,UAIrBmJ,EAAoBnC,OAAI,GAaxBoC,EAAwB1J,YAAS,kBAC5B2J,eAAalC,EAAMnH,UAGxBsJ,EAA4B5J,YAAS,kBAChC2J,eAAa/B,EAAWtH,MAAMuJ,gBAAkBJ,EAAkBnJ,MAAQgJ,EAAWhJ,MAAQ,OAQlGwJ,EAAgB9J,YAAS,kBACnBL,EAAM4G,WAAa0B,EAAQ3H,QAAWX,EAAM4G,aA0ClDwD,EAAW/J,WAAS,CACtBgK,sBACW7C,EAAMI,QAAQ,sBAEzB0C,aAAI3J,GACA6G,EAAM+C,OAAO,oBAAqB5J,MAIpC6J,EAAUnK,WAAS,CACrBgK,mBACUG,EAAUhD,EAAMI,QAAQ,2BAExB4C,IACF1B,EAAiBnI,OAAQ,GAGtB6J,GAEXF,aAAI3J,GACA6G,EAAM+C,OAAO,mBAAoB5J,MAIzCkJ,QAAMW,GAAS,SAAC7J,GACRA,EAAMJ,OA1HW,MA2HjBiK,EAAQ7J,MAAQ6J,EAAQ7J,MAAM8J,UAAU,EA3HvB,SA6IzBC,UAAQ,SAdM,SAAC3K,EAAM4K,UACVtK,WAAS,CACZgK,sBACWrC,EAAarH,MAAMZ,GAAQiI,EAAarH,MAAMZ,GAAQ4K,GAEjEL,aAAI3J,OACIiK,EAAOC,KAAKC,MAAMD,KAAKE,UAAU/C,EAAarH,QAClDiK,EAAK7K,GAAQY,EAEb6G,EAAM+C,OAAO,gBAAiBK,aAiBpCI,EAAOrD,MAAI,IAEZI,EAAKpH,OACNsK,OAAIC,eACCnK,MAAK,SAACoK,MACCA,EAASP,KAAM,KACTQ,EAAOC,YAAUF,EAASP,MAEhCU,GAAW3K,MAAQyK,EAAKG,OACxBP,EAAKrK,MAAQyK,EAAKI,MAClBC,GAAe9K,MAAQyK,EAAKM,wBAG3B,eAKjBhB,UAAQ,OAAQM,GAChBN,UAAQ,YAAaM,GAErBxD,EAAMmE,SAAS,UAAW,SACb,mBAiBPC,EAAWvL,WAAS,CACtBgK,sBACW7C,EAAMI,QAAQ,sBAEzB0C,aAAIzJ,GACA2G,EAAM+C,OAAO,oBAAqB1J,MAIpCgL,EAAUxL,WAAS,CACrBgK,sBACW7C,EAAMI,QAAQ,qBAEzB0C,aAAIzJ,GACA2G,EAAM+C,OAAO,mBAAoB1J,MAInCiL,EAAmBzL,YAAS,kBACvBuL,EAASjL,MAAQ8H,EAAc9H,MAAMoL,MAAK,SAAC9L,UAASA,EAAKY,IAAM+K,EAASjL,SAAS,MAGtFqL,EAAkB3L,YAAS,kBACtBwL,EAAQlL,MAAQ+H,EAAe/H,MAAMoL,MAAK,SAAC9L,UAASA,EAAKY,IAAMgL,EAAQlL,SAAS,MAGrFsL,EAAgB5L,YAAS,kBACpB6L,GAAezD,EAAc9H,MAAOiL,EAASjL,UAGlDwL,EAAM9L,YAAS,kBACV6L,GAAexD,EAAe/H,MAAOkL,EAAQlL,UAGlDyL,EAA0B/L,YAAS,kBAC9BgM,GAAc5D,EAAc9H,UAGjC2L,EAA2BjM,YAAS,kBAC/BgM,GAAc3D,EAAe/H,UAGlC4L,GAAmBlM,YAAS,eAC1BmM,EAAa,UAEjB3E,EAAMlH,MAAM8L,SAAQ,SAACxM,IAC6B,IAA1CuM,EAAW5L,QAAQX,EAAKyM,cACxBF,EAAWG,KAAK1M,EAAKyM,gBAItBF,KAGLN,GAAiB,SAACrE,EAAOlH,OACvB8B,EAAQ,KAER9B,EAAO,KACDV,EAAO4H,EAAMkE,MAAK,SAAC9L,UAASA,EAAKY,IAAMF,KAEzCV,IAEIwC,EADa,OAAbxC,EAAKuG,KACGvG,EAAK2C,OAELgK,KAAKC,MAAO/E,EAAMnH,MAAQV,EAAK2C,OAAU,aAKtDH,GAGL4J,GAAgB,SAACS,OACfjF,EAAQ,UAEZiF,EAASL,SAAQ,SAACxM,MACVA,EAAK8M,cAAgB7M,OAAO8M,KAAK/M,EAAK8M,cAAcxM,OAAQ,KACxD0M,GAAK,EAEHC,EAAIjN,EAAK8M,aAEXG,EAAEC,WAAaD,EAAEE,WACjBH,EAAKnF,EAAMnH,OAASuM,EAAEC,WAAarF,EAAMnH,OAASuM,EAAEE,UACpDnN,EAAKoN,iBAAmBJ,GACjBC,EAAEC,WACTF,EAAKnF,EAAMnH,OAASuM,EAAEC,UACtBlN,EAAKoN,iBAAmBJ,GACjBC,EAAEE,YACTH,EAAKnF,EAAMnH,OAASuM,EAAEE,UACtBnN,EAAKoN,iBAAmBJ,GAGxBA,GAAMrB,EAASjL,OACXuM,EAAEI,eAAiBJ,EAAEI,cAAc/M,SACnC0M,GAAkD,IAA7CC,EAAEI,cAAc1M,QAAQgL,EAASjL,QAI1CsM,GAAMpB,EAAQlL,OACVuM,EAAEK,gBAAkBL,EAAEK,eAAehN,SACrC0M,GAAkD,IAA7CC,EAAEK,eAAe3M,QAAQiL,EAAQlL,QAI1CsM,GAAMC,EAAEV,YAAcU,EAAEV,WAAWjM,SACnC0M,GAAMV,GAAiB5L,MAAMF,QAAO,SAACE,UAAWuM,EAAEV,WAAWgB,SAAS7M,MAAQJ,OAC9EN,EAAKoN,iBAAmBJ,GAGxBA,GAAiB,cAAXC,EAAElL,OACRiL,EAAKC,EAAEvM,QAAUqK,EAAKrK,MAAM8M,UAC5BxN,EAAKoN,iBAAmBJ,GAG5BhN,EAAKyN,YAAcT,OAEnBhN,EAAKyN,YAAa,EAGjBzN,EAAKoN,iBACNxF,EAAM8E,KAAK1M,MAIZ4H,GAGL8F,GAAWtN,YAAS,eAClByC,EAAM,SAEV+E,EAAMlH,MAAM8L,SAAQ,SAACxM,OACb2N,EAAI,EAEJ3N,EAAKK,WAAWqC,WAChBiL,EAAI3N,EAAKK,WAAWqC,SAAW1C,EAAKK,WAAWmC,OAGnDK,GAAO8K,EAAI3N,EAAKoC,YAGbS,KAmBX+K,MAAMC,KAAKrI,OAAOsI,SAASrM,MAAMX,MAAK,SAACoK,GACnC1C,EAAc9H,MAAQwK,EAASP,KAAKgB,SACpClD,EAAe/H,MAAQwK,EAASP,KAAKiB,WAGzChC,QAAMlB,GAAU,SAAChI,GACA,SAATA,GACA6G,EAAM+C,OAAO,aAAc,gBA+E7Be,GAAa3D,MAAI,IACjBqG,GAAarG,MAAI,IACjBsG,GAAUtG,MAAI,GAEpBuG,gBAAclD,OA8BRS,GAAiB9D,MAAI,IAE3BlC,OAAO0I,iBAAiB,gBAAgB,WACpC3G,EAAM+C,OAAO,aAAc,SAG/B9E,OAAO0I,iBAAiB,YAAY,WAChC3G,EAAM+C,OAAO,aAAc,aAGzB6D,qDAlDCC,EAAOtN,YACbsN,EAAOtN,yBAkDuC,mBAAhCuN,GAAuB3N,gBACc2N,GAAuB3N,kBAA7D4N,GAEF3F,EAAiBjI,OACjBiI,EAAiBjI,MAAM6N,QAGtBzG,EAAKpH,MAKNuH,EAAgBvH,MAAQkL,EAAQlL,OAASwJ,EAAcxJ,OAASiL,EAASjL,SAAWmL,EAAiBnL,MAAM8N,WAAc3C,EAAiBnL,MAAM8N,WAAa5F,EAAsBlI,MAAMmL,EAAiBnL,MAAMqB,OAAS6G,EAAsBlI,MAAMmL,EAAiBnL,MAAMqB,MAAM0M,UAAaH,EAJ/R9C,GAAe9K,MAAM+N,QAAQ1D,EAAKrK,OAAOI,MAAK,SAAU4N,GACpDzG,EAAgBvH,MAAQgO,GAAe9C,EAAQlL,OAASwJ,EAAcxJ,OAASiL,EAASjL,SAAWmL,EAAiBnL,MAAM8N,WAAc3C,EAAiBnL,MAAM8N,WAAa5F,EAAsBlI,MAAMmL,EAAiBnL,MAAMqB,OAAS6G,EAAsBlI,MAAMmL,EAAiBnL,MAAMqB,MAAM0M,UAAaH,cAQxTD,GAAyB3G,MAAI,MACnC+C,UAAQ,yBAA0B4D,QAE5BM,GAA4BjH,MAAI,IACtC+C,UAAQ,4BAA6BkE,QAwB/BC,GAAUlH,OAAI,GAEdmH,GAAoB,SAACC,GACvB3G,EAAOzH,OAAQ,EACf0H,EAAM1H,MAAQoO,EAEdC,SAASC,cAAc,QAAQC,UAAUC,IAAI,uBAK3CC,yBACGrH,EAAKpH,MAuCN0O,KAtCA5D,GAAe9K,MAAM+N,QAAQ1D,EAAKrK,OAAOI,MAAK,SAAUuO,GAC/CA,EAOMtE,EAAKrK,MAAM4O,YAClB/H,EAAMmE,SAAS,gBAAiB,CAC5BnF,KAAM,OACNgJ,YAAaxE,EAAKrK,cACT,aAET8O,SAAU,SAACtE,GACPkE,YAEG,SAACK,OACAC,EAAiB,MAEjBD,EAAMvE,SAASP,MAAQ8E,EAAMvE,SAASP,KAAKgF,OAAQ,eACnB1P,OAAO2P,QAAQH,EAAMvE,SAASP,KAAKgF,uBAAS,iBAAhEE,OAAOC,OACXA,EAAS,KACTJ,EAAeG,GAASC,EAAS,IAIzC9B,GAAQtN,QAGZqN,GAAWrN,MAAQgP,KAI3BN,MAhCA1G,EAAShI,MAAQ,MACjBiI,EAAiBjI,MAAM6N,QAEvBlH,EAAMxC,GAAG,4BAA6B,CAClC0B,KAAM,sBAoCpBwJ,GAA6B,SAACV,OAC5Bf,EAAuE,mBAAhCD,GAAuB3N,MAAsB2N,GAAuB3N,QAAU,QAErHmL,EAAiBnL,QAAUmL,EAAiBnL,MAAM8N,YAClDF,GAAgC,GAGhCzG,EAAMnH,MAAQsP,KAAKb,SAASc,eAAgB,KACtCzB,EAAY,CACdA,UAAWlJ,GACXvF,MAAO,CACH6E,QAASC,GAAG,qCAAsC,CAAElC,OAAQuG,EAAIgH,WAAWC,OAAOC,iBAAiBC,SAAS7N,MAAMwN,KAAKb,SAASc,oBAIxI5I,EAAMmH,EAAW,CACbjI,KAAM,eAEP,GAAK8I,EAOL,GAAK1D,EAASjL,MAId,IAAImL,EAAiBnL,MAAM8N,WAAe5F,EAAsBlI,MAAMmL,EAAiBnL,MAAMqB,OAAU6G,EAAsBlI,MAAMmL,EAAiBnL,MAAMqB,MAAM0M,QAIhK,GAAKH,EAIL,GAAK1C,EAAQlL,MAIb,GAAKwJ,EAAcxJ,MAInB,KACC4P,EACA3F,EAAO/B,EAAsBlI,MAAMmL,EAAiBnL,MAAMqB,MAAQ6I,KAAKC,MAAMD,KAAKE,UAAUlC,EAAsBlI,MAAMmL,EAAiBnL,MAAMqB,QAAU,UAEtJ4I,EAAK8D,YAEN8B,EAAmB3F,KAAKC,MAAMD,KAAKE,UAAU6D,GAA0BjO,WAEzEqO,SAASyB,OACOzB,SAASyB,OAAOC,MAAM,KAE9BjE,SAAQ,SAACgE,OACPE,EAAQF,EAAOC,MAAM,KAEH,QAApBC,EAAM,GAAGC,SACTL,EAAWI,EAAM,GAAGD,MAAM,KAAK,GAAK,IAAMC,EAAM,GAAGD,MAAM,KAAK,WAKpEG,EAAY9I,EAAKpH,MAAQsH,EAAWtH,MAAQqK,EAAKrK,MAEjD6K,EAAQ,CACV4D,UAAU,EACVpE,KAAM,CACF8F,UAAWD,EAAUC,UACrBC,YAAaF,EAAUE,YACvBhR,KAAM8Q,EAAU9Q,KAChBiR,MAAOH,EAAUG,MACjBC,MAAOJ,EAAUI,MACjBxD,UAAWoD,EAAUpD,UACrByD,oBAAqBL,EAAUK,oBAC/BC,aAAcN,EAAUM,aACxBC,SAAUP,EAAUO,SACpBC,OAAQR,EAAUQ,OAClB9B,YAAasB,EAAUtB,aAE3B3D,SAAU,CACN/K,GAAI+K,EAASjL,MACbiK,KAAMA,EACNI,KAAMwF,GAEV3E,QAAS,CACLhL,GAAIgL,EAAQlL,OAEhB6J,QAASA,EAAQ7J,MACjByJ,SAAUA,EAASzJ,MACnBqI,UAAWA,EAAUrI,MACrB0I,QAASM,EAAWhJ,MACpB4P,SAAUA,GAGd7I,EAAQ/G,OAAQ,EAEhBkN,MACKC,KAAKrI,OAAOsI,SAASrM,KAAM8J,GAC3BzK,MAAK,SAACoK,MACCA,EAASP,MAAQO,EAASP,KAAK8E,OAASvE,EAASP,KAAK/F,QACtDyC,EAAM6D,EAASP,KAAK/F,QAAS,CACzB2B,KAAM,mBAMV8K,EAAW,GAEfzJ,EAAMlH,MAAM8L,SAAQ,SAACxM,OACbsR,EAAU,CACVC,UAAWvR,EAAKF,KAChB0R,QAASxR,EAAKK,WAAW0B,KACzBS,MAAOxC,EAAKwC,MACZJ,SAAUpC,EAAKoC,UAGfpC,EAAKK,WAAWoR,QAChBH,EAAQI,WAAa1R,EAAKK,WAAWoR,OAGrCzR,EAAKK,WAAWsR,WAChBL,EAAQM,aAAe5R,EAAKK,WAAWsR,UAGvC3R,EAAKK,WAAWwR,gBACmC,IAA/C7R,EAAKK,WAAWwR,aAAalR,QAAQ,KACrCX,EAAKK,WAAWwR,aAAapB,MAAM,KAAKjE,SAAQ,SAACsF,EAAS7O,GACtDqO,EAAQ,iBAAmBrO,EAAQA,EAAQ,EAAI,KAAO6O,EAAQnB,UAGlEW,EAAQS,cAAgB/R,EAAKK,WAAWwR,cAI5C7R,EAAKK,WAAW4C,QAChBqO,EAAQrO,MAAQjD,EAAKK,WAAW4C,OAGhCjD,EAAKK,WAAW2R,eAChBV,EAAQW,eAAiBjS,EAAKK,WAAW2R,cAG7CX,EAAS3E,KAAK4E,UAIdY,EAAS,CACTC,aAAcpG,EAAgBrL,MAAMZ,KACpCsS,cAAevG,EAAiBnL,MAAMZ,KACtCuS,UAAW,CACPC,eAAgBpH,EAASP,KAAKvC,MAAMxH,GACpC2R,YAAa,OACb7R,MAAO8R,WAAW3K,EAAMnH,OACxBiL,SAAU,EACV8G,SAAU,MACV7K,MAAOyJ,GAEXqB,MAAO,YAGP3H,EAAKrK,MAAM8M,YACX0E,EAAO1E,UAAY3I,GAAG,oCAAsCkG,EAAKrK,MAAM8M,YAGvEzE,EAAUrI,QACVwR,EAAOG,UAAUM,OAAS5J,EAAUrI,OAGpCX,EAAMmH,oCAAsCgE,EAASP,KAAKpC,UAAa2C,EAASP,KAAKiI,qBAAuBpN,OAAOqN,WACnHC,aAAaC,QAAQ,YAAanI,KAAKE,UAAUoH,KAE7ClC,KAAKgD,MAAMX,WACXY,QAAQC,IAAIhB,IAGXlC,KAAKgD,MAAMX,WAAa7M,OAAO2N,YAChC3N,OAAO2N,UAAUzG,KAAK,CAClB2F,UAAW,OAGf7M,OAAO2N,UAAUzG,KAAKwF,KAI1BhH,EAASP,KAAKpC,WACdA,EAAS7H,MAAQ,CACb0S,IAAKlI,EAASP,KAAKpC,SAAS6K,IAC5BzI,KAAMO,EAASP,KAAKpC,SAASoC,MAGjC0I,YAAS,WACLC,YAAW,WACPpL,EAAaxH,MAAM6S,WACpB,SAIPrI,EAASP,KAAKiI,qBAAuBpN,OAAOqN,UAtRtC,SAACjH,EAASxD,OAC1BoL,EAAY,IAAIX,UAEtBrN,OAAO0I,iBAAiB,WAAW,SAACwE,GACd,uBAAdA,EAAM/H,MAA+C,0BAAd+H,EAAM/H,MAAoC+H,EAAM/H,KAIzE,0BAAd+H,EAAM/H,OACNkE,GAAkBzG,GAElBwG,GAAQlO,OAAQ,EAEhB6G,EAAMmE,SAAS,aAAc,SAChB,mBAKrB8H,EAAUC,IAAI7H,GAoQE8H,CAAkB9I,KAAKC,MAAMK,EAASP,KAAKiI,qBAAsB1H,EAASP,KAAKvC,OAE/EyG,GAAkB3D,EAASP,KAAKvC,kBAGjC,SAACuL,GACJtM,EAAMxC,GAAG,oBAAqB,CAC1B0B,KAAM,UAGV0M,QAAQxD,MAAMkE,eAET,WACLlM,EAAQ/G,OAAQ,UA7KxB2G,EAAMxC,GAAG,+BAAgC,CACrC0B,KAAM,eALVc,EAAMxC,GAAG,+BAAgC,CACrC0B,KAAM,eALVc,EAAMxC,GAAG,iCAAmC,MAAQgH,EAAiBnL,MAAMZ,KAAO,IAAK,CACnFyG,KAAM,eALVc,EAAMxC,GAAG,iCAAmC,MAAQgH,EAAiBnL,MAAMZ,KAAO,IAAK,CACnFyG,KAAM,eALVc,EAAMxC,GAAG,gCAAiC,CACtC0B,KAAM,eARVmC,EAAShI,MAAQ,MACjBiI,EAAiBjI,MAAM6N,QAEvBlH,EAAMxC,GAAG,4BAA6B,CAClC0B,KAAM,WAqMZ6I,GAAc,WACXtH,EAAKpH,MAKNqP,IAA2B,GAJ3BvE,GAAe9K,MAAM+N,QAAQ1D,EAAKrK,OAAOI,MAAK,SAAUuO,GACpDU,GAA2BV,OAsCvCuE,aAAU,YACDxR,EAAS1B,OAASX,EAAMgH,kBACzBvB,OAAOsI,SAASrM,KAAO1B,EAAMgH,qBAG7BsK,EAAW,MAEfzJ,EAAMlH,MAAM8L,SAAQ,SAACxM,OACbsR,EAAU,CACVC,UAAWvR,EAAKF,KAChB0R,QAASxR,EAAKK,WAAW0B,KACzBS,MAAOgQ,WAAWxS,EAAKK,WAAWmC,OAClCJ,SAAUpC,EAAKoC,UAGfpC,EAAKK,WAAWoR,QAChBH,EAAQI,WAAa1R,EAAKK,WAAWoR,OAGrCzR,EAAKK,WAAWsR,WAChBL,EAAQM,aAAe5R,EAAKK,WAAWsR,UAGvC3R,EAAKK,WAAWwR,gBACmC,IAA/C7R,EAAKK,WAAWwR,aAAalR,QAAQ,KACrCX,EAAKK,WAAWwR,aAAapB,MAAM,KAAKjE,SAAQ,SAACsF,EAAS7O,GACtDqO,EAAQ,iBAAmBrO,EAAQA,EAAQ,EAAI,KAAO6O,EAAQnB,UAGlEW,EAAQS,cAAgB/R,EAAKK,WAAWwR,cAI5C7R,EAAKK,WAAW4C,QAChBqO,EAAQrO,MAAQjD,EAAKK,WAAW4C,OAGhCjD,EAAKK,WAAW2R,eAChBV,EAAQW,eAAiBjS,EAAKK,WAAW2R,cAG7CX,EAAS3E,KAAK4E,MAGdD,EAAS/Q,OAAQ,KACX4R,EAAS,CACXG,UAAW,CACPI,SAAU,MACV7K,MAAOyJ,EACP3Q,MAAO8R,WAAW3K,EAAMnH,QAE5BgS,MAAO,kBAGP1C,KAAKgD,MAAMX,WACXY,QAAQC,IAAIhB,IAGXlC,KAAKgD,MAAMX,WAAa7M,OAAO2N,YAChC3N,OAAO2N,UAAUzG,KAAK,CAClB2F,UAAW,OAGf7M,OAAO2N,UAAUzG,KAAKwF,cAS3B,CACHpK,KAAAA,EACAY,SAAAA,EACAmL,SAvkBa,WACbrO,OAAOsI,SAASrM,KAAOqS,OAAO,oBAAqB,CAC/CC,SAAU,cAskBdC,OAlkBW,WACXxO,OAAOsI,SAASrM,KAAOqS,OAAO,oBAAqB,CAC/CC,SAAU,YAikBdE,cA7jBkB,WAClBvL,EAAShI,MAAQ,OA6jBjB0B,SAAAA,EACAwF,MAAAA,EACAH,QAAAA,EACAgC,UAAAA,YACAiE,SAAAA,GACA7F,MAAAA,EACA8D,SAAAA,EACAK,cAAAA,EACAJ,QAAAA,EACAM,IAAAA,EACAV,eAAAA,GACAH,WAAAA,GACA1C,iBAAAA,EACAwG,SAAAA,GACAlH,gBAAAA,EACAkG,SAAAA,GACAhC,wBAAAA,EACAE,yBAAAA,EACA6H,oBA/HwB,SAACtT,GACrB+K,EAASjL,QAAUE,IACnB+K,EAASjL,MAAQ,OA8HrByT,mBA1HuB,SAACvT,GACpBgL,EAAQlL,QAAUE,IAClBgL,EAAQlL,MAAQ,OAyHpBmL,iBAAAA,EACAE,gBAAAA,EACAnD,sBAAAA,EACAwL,kBAlHsB,SAACrS,EAAM4I,EAAM8D,OAC/B4F,EAAIzJ,KAAKC,MAAMD,KAAKE,UAAUlC,EAAsBlI,QAExDiK,EAAK8D,QAAUA,EACf4F,EAAEtS,GAAQ4I,EAEVpD,EAAM+C,OAAO,wBAAyB+J,IA6GtCC,YAzHgB,aA0HhBvJ,KAAAA,EACAZ,SAAAA,EACAI,QAAAA,EACA1B,iBAAAA,EACA0L,iBAt7BqB,IAu7BrBxM,aAAAA,EACAI,OAAAA,EACAC,MAAAA,EACAG,SAAAA,EACAL,aAAAA,EACAsM,KArHS,WACThP,OAAOsI,SAASrM,KAAOuO,KAAKyE,OAAOrB,IAAMpD,KAAKyE,OAAOrB,IAAM,KAqH3DtK,mBAAAA,EACA4L,eAp4BmB,WACf3L,EAAUrI,QACVuI,EAAevI,OAAQ,EAEvBkN,MACKC,KAAKrI,OAAOsI,SAASrM,KAAM,CACxBkT,eAAgB5L,EAAUrI,MAC1BsQ,MAAOjG,EAAKrK,MAAMsQ,MAClBnJ,MAAOA,EAAMnH,QAEhBI,MAAK,SAAAoK,GACFlC,EAAiBtI,MAAQwK,EAASP,eAC7B,SAAA8E,GACDA,EAAMvE,UAAYuE,EAAMvE,SAASP,KAAKrK,SACtCmP,EAAMvE,SAASP,KAAK6B,SAAQ,SAAAiD,OAClBjB,EAAY,CACdA,UAAWlJ,GACXvF,MAAO,CACH6E,QAASC,GAAG,0BAA4B4K,EAAMA,MAAO,CAAEmF,OAAQ1L,EAAIgH,WAAWC,OAAOC,iBAAiBC,SAAS7N,MAAMiN,EAAMmF,YAInIvN,EAAMmH,EAAW,CACbjI,KAAM,UAGS,aAAfkJ,EAAMA,QACN1G,EAAUrI,MAAQ,OAI1BsI,EAAiBtI,MAAQ,kBAEtB,WACPuI,EAAevI,OAAQ,OAm2BnCqI,UAAAA,EACAE,eAAAA,EACAD,iBAAAA,EACA6L,eAj5BmB,WACnB9L,EAAUrI,MAAQ,GAClBsI,EAAiBtI,MAAQ,MAg5BzBoU,+BAjxBmC,eAC7BjS,EAAMgF,EAAMnH,MAAQwL,EAAIxL,MAAQsL,EAActL,aAEhDsI,EAAiBtI,OAAwC,WAA/BsI,EAAiBtI,MAAM6F,KAC1CoG,KAAKC,MAAM/J,EAAMA,EAAMmG,EAAiBtI,MAAMiC,OAAS,KAG9DqG,EAAiBtI,OAAwC,YAA/BsI,EAAiBtI,MAAM6F,KAC1CoG,KAAKoI,IAAI,EAAGlS,EAAMmG,EAAiBtI,MAAMiC,QAG7CE,GAuwBPwF,QAAAA,EACAC,kBAAAA,EACAnB,MAAAA,EACAyH,QAAAA,GACAxF,QAAAA,EACAM,WAAAA,EACAG,kBAAAA,EACAmL,gBA76BoB,WACpBtL,EAAWhJ,MAAQ,EACnBmJ,EAAkBnJ,OAAQ,GA46B1BuU,gBAz6BoB,WAChBvL,EAAWhJ,QACXmJ,EAAkBnJ,OAAQ,IAw6B9BsJ,0BAAAA,EACA+D,WAAAA,GACAC,QAAAA,GACAhG,WAAAA,EACAkN,eAlEmB,SAACnE,UACbA,EAAMoE,QAAQ,+BAAgC,kBAkErDrL,sBAAAA,EACAH,mBAAAA,gBCn7CG,mEAKI,2BACI,4BACA,qBACI,4CAEI,oCACI,qBACI,uBACI,qEAUC9I,iCACIA,yCAAgB,8BAUjC,8CACI,qBACI,+BACA,uBAIA,2BACI,0DAOA,wBAGS0F,KAAK,SAASmB,IAAI,yBAAyB,6BAIpD,+CAGA,0BACI,yBACI,qBACI,yBACA,eAEH7G,kCAAW,gBACPA,yCAAgB,6BAEpBA,iCAAM,oBAGNA,kCAAW,oBACPA,yCAAgB,2BAEpBA,iCAAM,wBAS3B,wCACI,yCACI,kBACI,kBACI,iBACI,kBACI,oCAEJ,mBACI,wBAQR,iBACI,0DAIe,YACdA,yCAAgB,uCAIb,yBAEJ,yBACK,qDAYzB,uCACI,0CACI,kBACI,kBACI,iBACI,kBACI,8BASJ,+CAKI,+BAEJ,oCASxB,yBACI,0CACI,wCACI,kBACI,kBACI,iBACI,kBACI,8BASJ,+CAKI,+BAEJ,6BAO3BA,kCAAW,8BACA,mBACI,yBACA,kBACI,0BACI,qCACA,0CAIJ,0BACI,kBACA,0CAIJ,qBACI,kBACA,0CAIJ,0BACI,kBACA,0CAEK,yBAGT,uBACI,WAAwCA,qBAAI,6BAAY,mBACxD,oCAIJ,uBACI,kBACA,2CAKR,2CAIA,kCACI,8BAGQ,yBAYZ,oCACI,yBACPA,kCAAW,qBACPA,4BAAKuU,QAAQ,YAAYC,KAAK,OAAOC,MAAM,+BACvCzU,6BAAMwT,EAAE,0OAA0OgB,KAAK,6BAGpP,2CAOR,qBACI,wCAUPxU,iCACIA,yCAAgB,+BAGb,qCACI,qCAEM,YAAY,yCAS7BA,iCACIA,yCAAgB,+BAGb,6BAEI,+BAQ5B,mCAEQ,mBAIA,2BACI,yBACI,4BAGJ,yBAGA,+BACI,0BACI,mBACA,6DAKJ,0BACI,mBACA,6DAKJ,0BACI,mBACA,qBACI,gDASK,kCACzB,mBACA,0BAE+EA,qBAAM,oOA5VxGK,2BAAAG,IACmCF,WAASiS,mBAAxClS,mCAAMwG,IAAI,eAAoC6N,OAAQpU,WAASiS,IAAKoC,MAAA,mDAAwDC,OAAO,0BAC/HvU,kDAAgFC,WAASwJ,eAAhCjK,EAAOZ,EAAMmD,wBAAtE/B,8BAAOqF,KAAK,SAAUzG,KAAMA,EAAOY,MAAOA,EAA4DwC,IAAKD,+DAG9E9B,QAAMb,SAAWa,wBAAlDD,2BAAAM,IACIX,2BAAA6U,qBAA+BvU,sCAC/BN,2BAAA8U,IACI9U,2BAAA+U,IACIC,gCACAhV,2BAAAiV,IAAoCC,8BAChClV,2BAAAmV,IACInV,2BAAAe,IACIf,2BAAAgB,wCACOV,sCACHN,qBAAsF,cAA1E,mBAAOoV,kBAAQ9U,YAAUA,WAAUA,gEAAuC,KAAMN,6BAAM0B,UAAQpB,4BAA8BA,WAASqB,MAAMrB,yBAG/J0U,8BAAmBjO,MAAOzG,UAA1B,mCACID,kDAA8BC,kBAARnB,wBAAtBkW,iBAA4ChT,IAAKlD,EAAKY,GAAKZ,KAAMA,6BACjEmW,uBAAoB,+BAEZ,mBAAAtV,qCAAc,SAAUuV,QAAOrW,EAAMsW,OACjCC,GAGAzV,mDAASM,iDAKzB0U,qCAA0BhO,MAAO1G,cAGzCN,2BAAAqB,IACIrB,2BAAAsB,IACItB,2BAAAyB,qBAA4BnB,sCACEA,QAAQA,yBAAtCD,2BAAAqV,IACI1V,oDAAQA,qBAAmE,SAA5D0F,KAAK,cAAc,6DAAiBpF,eAAUT,MAAM,iCAAhBS,kDAA2BA,kCAC9EN,oDAAQA,qBAAqE,SAA9D0F,KAAK,cAAc,6DAAiBpF,eAAUT,MAAM,mCAAhBS,kDAA6BA,qEAEpFN,2BAAA4B,IACmCtB,sBAA/BD,2BAAAsV,IACI3V,+BAAGA,qBAA8F,gCAAnFM,aAAWrB,4BAAWqB,aAAW0P,iCAAgB1P,aAAW2P,kBAC1EjQ,gDAAMM,iBAAeA,aAAW4P,QAAS,uBAAK5P,aAAW6P,mBAChD7P,aAAWqM,WAAwBrM,aAAW+P,4BAAvDhQ,6BAAqEL,qBAA8C,gCAAnCM,aAAW+P,6DAClF/P,aAAWqM,WAAwBrM,aAAW8P,mCAAvD/P,4BAA4E,4BAAUC,aAAW8P,kEACxF9P,aAAWqM,WAAwBrM,aAAWiQ,sBAAvDlQ,8CAAkEC,aAAWsV,mCAAkBtV,aAAWuV,mBAAuBvV,aAAWuV,0GAEhJ7V,2BAAAkC,mBACImT,iBAAYS,iBAAiB,QAASrL,OAAQnK,iCAAgCA,kCAAiCA,aAAa+B,IAAK/B,UAAUyV,mCAAmC,IAC/JC,qBACP,kBAAAhW,8BAAAmC,iGAH0B7B,cAOsCA,0CAA5ED,2BAAAiC,IACIgT,kCAAwBhV,sEADqBA,8CAGvBA,yBAA1BD,2BAAAkC,IACoCjC,sDAAhCD,2BAAAmC,IACIxC,2BAAAiW,IACIjW,2BAAAyC,qBAA4BnC,mCAC5BN,2BAAA0C,IACI1C,gCAAS,SAAUuV,sCAAOjV,iDAM1BN,gCAAS,SAAUuV,sCAAOjV,6FAatDN,2BAAA6C,IACI7C,2BAAA8C,IACI9C,2BAAA+C,IACI/C,2BAAAkW,IACIlW,2BAAAiD,IACIjD,2BAAAkD,IACIlD,2BAAAmD,qBAAiC7C,kCAEZA,oBAAoBA,mBAAiB6V,yBAA9D9V,2BAAA+V,IACIpW,2BAAAqW,GAAwB,wBAAM/V,mBAAiB6V,sGAO3D9V,kDAAiCC,oCAARnB,wBAAzBkB,oDAAW,sBAAmGlB,EAAKyN,cAAlDvK,IAAKlD,EAAKY,KACvEC,2BAAAsW,IACItW,2BAAAuW,IACIvW,oDACIA,8BAAO0F,KAAK,cAAc,6DAAiBpF,eAAWT,MAAOV,EAAKY,GAAKwV,2BAAOjV,sBAAoBnB,EAAKY,iCAA5DO,cACFnB,EAAKqX,oBAA9CnW,wCAAW,OAAQS,IAAK3B,EAAKqX,iCAC7BnW,2BAAAiD,QAGAtD,mDAASb,EAAKF,WAEaE,EAAKsX,2BAApCpW,2BAAAqW,qBAAoDvX,EAAKsX,mDAE7DzW,2BAAA2W,KAC+BxX,EAAK2C,QAAU3C,EAAKyX,2BAA/CvW,4BAAAwW,qBAA+D1X,EAAKyX,gCACpEvW,mCAAaqB,qBAAQvC,EAAKuG,KAAoBvG,EAAK2C,WAAexB,WAASqB,MAAMxC,EAAK2C,yBAGlFxB,QAAMwW,8DAAlBzW,+BAC0ClB,EAAKwO,WAAaxO,EAAKY,IAAMO,0BAAnE+U,wCAAgBlW,EAAKwO,kBAAyDlE,OAAQnJ,oBAAoBwJ,KAAMxJ,wBAAwBnB,KAAMA,uFAI1J6V,yCAA8B1J,wBAAyBhL,0BAA0BwK,SAAUxK,WAAWiT,kBAAmBjT,oBAAoByH,sBAAuBzH,8BAG9HA,4EAA9CD,2BAAA0W,IACI/W,2BAAAgX,IACIhX,2BAAAiX,IACIjX,2BAAAkX,IACIlX,2BAAAmX,IACInX,2BAAAoX,IACIpX,2BAAAqX,qBAAiC/W,sFAO7CD,kDAAiCC,qCAARnB,wBAAzBkB,oDAAW,sBAAoGlB,EAAKyN,cAAlDvK,IAAKlD,EAAKY,KACxEC,oDAAW,oBAAoCb,EAAK+B,SAChDlB,2BAAAsX,IACItX,oDACIA,8BAAO0F,KAAK,cAAc,6DAAiBpF,cAAUT,MAAOV,EAAKY,GAAKwV,2BAAOjV,qBAAmBnB,EAAKY,iCAA1DO,aAC3CN,mDAASb,EAAKF,WAEaE,EAAKsX,2BAApCpW,2BAAAkX,qBAAoDpY,EAAKsX,mDAEpCtX,EAAK2C,sBAA9BzB,2BAAAmX,IACIxX,6BAAM0B,qBAAQvC,EAAKuG,KAAoBvG,EAAK2C,WAAexB,WAASqB,MAAMxC,EAAK2C,iFAQ3G9B,2BAAAyX,IACIzX,2BAAA0X,IACkDpX,4CAA9CD,2BAAAsX,IACI3X,2BAAA4X,IACI5X,2BAAA6X,IACI7X,2BAAA8X,IACI9X,2BAAA+X,IACI/X,2BAAAgY,qBAAiC1X,sFAO7CD,kDAAiCC,qCAARnB,wBAAzBkB,oDAAW,sBAAoGlB,EAAKyN,cAAlDvK,IAAKlD,EAAKY,KACxEC,oDAAW,oBAAoCb,EAAK+B,SAChDlB,2BAAAiY,IACIjY,oDACIA,8BAAO0F,KAAK,cAAc,6DAAiBpF,cAAUT,MAAOV,EAAKY,GAAKwV,2BAAOjV,qBAAmBnB,EAAKY,iCAA1DO,aAC3CN,mDAASb,EAAKF,WAEaE,EAAKsX,2BAApCpW,2BAAA6X,qBAAoD/Y,EAAKsX,mDAEpCtX,EAAK2C,sBAA9BzB,2BAAA8X,IACInY,6BAAM0B,qBAAQvC,EAAKuG,KAAoBvG,EAAK2C,WAAexB,WAASqB,MAAMxC,EAAK2C,6GAMnGsW,GACApY,2BAAAqY,IACIrY,2BAAAsY,qBAA4BhY,6BAC5BN,2BAAAuY,IACIvY,2BAAAwY,IACIxY,2BAAAyY,IAAkBzY,yCAAMoV,kBAAQ9U,YAAUA,WAAUA,sFAA2CA,8BAC/FN,2BAAA0Y,IACI1Y,6BAAM0B,UAAQpB,WAASqB,MAAMrB,yBAGLA,0BAAhCD,2BAAAsY,IACI3Y,2BAAA4Y,qBAAqBtY,gCACrBN,2BAAA6Y,IACI7Y,6BAAM0B,UAAQpB,WAASqB,MAAMrB,6DAGVA,uBAA3BD,2BAAAyY,IACI9Y,2BAAA+Y,qBAAqBzY,2BACrBN,2BAAAgZ,IACIhZ,6BAAM0B,UAAQpB,WAASqB,MAAMrB,wDAGLA,0BAAhCD,2BAAA4Y,IACIjZ,2BAAAkZ,qBAAqB5Y,sCACrBN,2BAAAmZ,IACuD7Y,iCAAnDD,mCAAMqB,UAAQpB,WAASqB,MAAMrB,8BACEA,oBAAoBA,mBAAiBsW,2BAApEvW,4BAAA+Y,qBAAoF9Y,mBAAiBsW,sFAGhFtW,kCAA7BD,2BAAAgZ,IACIrZ,2BAAAsZ,wCAAqBhZ,kCAA8BiZ,GAAIvZ,qBAA0C,OAA1CwZ,qBAAuBlZ,kBAC9EN,2BAAAyZ,IACIzZ,6BAAM0B,qBAASpB,mBAAiBoF,KAAoBpF,mBAAiBwB,WAAexB,WAASqB,MAAMrB,mBAAiBwB,yDAG5H9B,2BAAA0Z,IACI1Z,2BAAA2Z,qBAAqBrZ,6BACrBN,2BAAA4Z,IACI5Z,6BAAM0B,UAAQpB,WAASqB,MAAMrB,sDAIzCN,2BAAA6Z,IACI7Z,oDAAQA,qBAA6D,SAAtD0F,KAAK,iBAAiB,kEAAoBpF,6CAAAA,kDAAeA,kCAE5E0U,iCAAsBzM,QAASjI,UAAUwZ,SAAUxZ,uBACXA,cAAcA,aAAW8I,kBAAsB9I,SAAOA,aAAW8I,8BAAzG/I,2BAAA0Z,IACI/Z,2BAAAga,IACIha,oDACIA,8BAAO0F,KAAK,iBAAiB,kEAAoBpF,uDAAAA,wBACjDN,2BAAAia,sBAAmB,2BAAuBja,qBAAgF,8BAAvEM,YAAUA,wBAAuBA,yCAG5F4U,61BASsC5U,QAAQA,OAAKgO,SAASc,8BAAhE/O,2BAAA6Z,IACIla,2BAAAma,IACIC,GAKApa,2BAAAqa,IACIra,kCAAW,UAAU0B,UAAQpB,yCAA0CA,WAASqB,MAAMrB,OAAKgO,SAASc,qEAIhHpP,uDAAc,0BAA4DM,QAAQA,OAAKgO,SAASc,oBAAsB9O,+BAA+BA,aAAtHiV,wCAAOjV,+DAA6HA,8BACnK0U,gCAAqBhO,MAAO1G,UACDA,2BAA3BD,2BAAAia,IACIta,2BAAAua,IACIva,oDACIA,8BAAO0F,KAAK,iBAAiB,kEAAoBpF,4CAAAA,aACjDN,kCAAW,QAAQ0B,UAAQpB,8EAI2DA,6BAAlGD,0DAAW,2CAA2DC,0BAClEN,kCAAW,UAAWuV,yCAAOjV,sBAAsBA,yBAC/CN,mDAASM,kCACTka,KAIJxa,2BAAAya,IACIza,2BAAA0a,qBACI1a,8BAAO0F,KAAK,aAAa,QAAQiV,YAAY,2DAAara,gBAAYsa,SAAUta,mBAAkBP,GAAG,gDAA3CO,eAC1DN,6BAAA6a,qBAAiDva,2CAEtCA,kCACfD,2CAAqB,SAAUkV,wCAAOjV,2EAAmBA,mDADzDD,6DAAuC,uBAAsFC,oBAA5EiV,wCAAOjV,wDAAiBsa,UAAWta,+BAA8DA,+EAI1JN,oDAAW,6BAA6CM,wBACpDN,kCAAW,UAAWuV,yCAAOjV,oBAAoBA,uBAC7CN,mDAASM,+BACTwa,KAIJ9a,2BAAA+a,qBACI/a,uCAAgB,kEAAoBM,wCAAAA,aACLA,UAAQb,sBAAvCY,2BAAA2a,qBAAkD1a,mBAAmBA,UAAQb,6DAQ3Da,UAAUA,uBAAxDD,2BAAA4a,IACIjG,gCAAqBzN,MAAOjH,QAAQoH,SAAUpH,WAAW+G,aAAc/G,eAAeqT,KAAMrT,OAAO2G,KAAM3G,OAAO4a,QAAS5a,WAAW4J,KAAM5J,SAA1I,kBACIN,2BAAAmb,wCACO7a,iCACHN,iCAAM,sBAAIM,QAAMP,+CAAgBO,UAAUA,yBAAyBA,iCAEvEN,2BAAAob,IACmC9a,WAASiS,mBAAxClS,2BAAAgb,IACIrb,2BAAAsb,qBAAyBhb,kCACzBN,qCAAc,oBAAqBuV,yCAAOjV,eAAaoS,8BAAapS,uDAExED,2BAAAkb,IACIvb,qCAAc,mBAAoBuV,wCAAOjV,uDAASA,kCAEtDN,2BAAAwb,IACoClb,QAAMwK,2BAAtCzK,2BAAAob,IACIzb,2BAAA0b,qBAAsBpb,gCACtBN,2BAAA2b,IACmCrb,QAAMwK,2BAArCzK,wCAAW,cAAuCqB,UAAQpB,QAAMwK,yDACjCxK,QAAMwK,2BAArCzK,wCAAW,cAAuCqB,UAAQpB,QAAMwK,8FAGxCxK,QAAMyK,0BAAtC1K,2BAAAub,IACI5b,2BAAA6b,qBAAsBvb,+BACtBN,2BAAA8b,IACmCxb,QAAMyK,0BAArC1K,wCAAW,cAAsCqB,UAAQpB,QAAMyK,wDAChCzK,QAAMyK,0BAArC1K,wCAAW,cAAsCqB,UAAQpB,QAAMyK,6FAGvCzK,QAAM4H,yBAAtC7H,2BAAA0b,IACI/b,2BAAAgc,qBAAsB1b,kCACtBN,2BAAAic,IACIjc,2BAAAkc,IACIlc,6BAAM0B,UAAQpB,QAAM4H,gBAAiB,sEAQhD5H,iEAAjBD,2BAAA8b,IACInc,2BAAAoc,qBAAsB9b,4BACtBN,2BAAAqc,wCACO/b,kCACHN,qBAAoF,KAAhFY,KAAMN,OAAKsT,OAAOrB,IAAMjS,OAAKsT,OAAOrB,2BAAcjS,mDAA8B,MAAEgc,uCAAShc,kCAEnGN,gCAAS,kBAAmBY,KAAMN,OAAKsT,OAAOrB,IAAMjS,OAAKsT,OAAOrB,2BAAcjS"}
|
|
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=19896b0b&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\" style=\"position: absolute; left: -1000px; top:-1000px;\" 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 checkout-blocks-wrapper\">\n <slot name=\"header\"></slot>\n <div class=\"checkout-block is-cart\"><!--items-->\n <div class=\"wrapper\">\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> <span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <slot name=\"cart\" :items=\"items\">\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 </slot>\n <slot name=\"cart-footer\" :total=\"total\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-user auth-user\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth && isLogin\">\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=\"logged-user\" v-if=\"auth\">\n <p><strong>{{ loggedUser.name }} {{ loggedUser.last_name }} {{ loggedUser.middle_name }}</strong></p>\n <p>{{ phoneFormatted(loggedUser.phone) }}, {{ loggedUser.email }}</p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.company_name\"><strong>{{ loggedUser.company_name }}</strong></p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.registration_number\">ЄДРПОУ {{ loggedUser.registration_number }}</p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.region\">{{ loggedUser.region_name }} {{ loggedUser.district_name ? ', ' + loggedUser.district_name : '' }}</p>\n </div>\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\" :initial-errors=\"userErrors\" :key=\"userKey\" :preventModelCleanupOnSchemaChange=\"true\">\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'\" v-if=\"isLogin\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\" v-if=\"isLogin\">\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>\n <div class=\"checkout-block is-shipping\">\n <div class=\"wrapper shipping-type-block\">\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=\"shippingSelected && shippingSelected.nextDates\">\n <div class=\"next-dates\">на {{ shippingSelected.nextDates }}</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 <div v-if=\"!slots.shippingFooter\">\n <component :is=\"item.component\" v-if=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <slot name=\"shipping-footer\" :shippingTypesRestricted=\"shippingTypesRestricted\" :shipping=\"shipping\" :shippingStoreData=\"shippingStoreData\" :shippingComponentData=\"shippingComponentData\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-payment\" v-if=\"!isPaymentMethodOverSummary\">\n <div class=\"wrapper payment-method-block\">\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\" v-bind:class=\"'is-' + item.code\">\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=\"inner payment-method-block\" v-if=\"isPaymentMethodOverSummary\">\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\" v-bind:class=\"'is-' + item.code\">\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 class=\"divider\"></div>\n <div class=\"inner\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row products\">\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 discount\" 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 fee\" 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 shipping\" 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 promo\" v-if=\"promoCodeApplied\">\n <div class=\"info\">{{ __('shop.order.promo_code') }}<br><span class=\"green\">{{ promoCode }}</span></div>\n <div class=\"value\">\n <span v-html=\"(promoCodeApplied.type == 'percent' ? promoCodeApplied.amount + '%' : $filters.price(promoCodeApplied.amount))\"></span>\n </div>\n </div>\n <div class=\"row price\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(calculateWithPromoCodeDiscount())\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper nocall\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <slot name=\"loyalty\" :loyalty=\"loyalty\" :inactive=\"isUseLoyaltyPoints\"></slot>\n <div class=\"user-loyalty consent\" v-if=\"loggedUser && loggedUser.loyalty_points > 0 && total<=loggedUser.loyalty_points\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"isUseLoyaltyPoints\">\n <div class=\"label\">Сплатити замовлення за <span>{{ pluralize(readableTotalInPoints, __('shop.pluralize.points')) }}</span></div>\n </label>\n </div>\n <!-- <div class=\"notice\">{{ pluralize(readableUserLoyaltyPoints, __('shop.pluralize.points')) }} в наявності</div>\n <div class=\"user-form is-loyalty-use\">\n <div class=\"control\">\n <input type=\"number\" class=\"input\" placeholder=\"Сума бонусів\" v-model=\"loyaltyUse\" :disabled=\"loyaltyUseApplied\">\n </div>\n <button v-if=\"!loyaltyUseApplied\" class=\"button\" @click=\"applyLoyaltyUse\" :disabled=\"!loyaltyUse || loyaltyUse > loggedUser.loyalty_points\">Використати</button>\n <button v-else class=\"button is-reset\" @click=\"resetLoyaltyUse\">Відмінити</button>\n </div> -->\n </div>\n <div class=\"minimum-amount-message\" v-if=\"total < $env.checkout.minimum_amount\">\n <div class=\"columns is-gapless\">\n <div class=\"column is-narrow\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.50007 18C5.35778 18 2 14.6423 2 10.5C2 6.35775 5.35778 3 9.50007 3C13.6424 3 17.0001 6.35775 17.0001 10.5C17.0001 14.6423 13.6424 18 9.50007 18ZM8.75006 12.75V14.25H10.2501V12.75H8.75006ZM8.75006 6.75V11.25H10.2501V6.75H8.75006Z\" fill=\"#7C7C7C\" />\n </svg>\n </div>\n <div class=\"column\">\n <div class=\"message\" v-html=\"__('shop.order.minimum_amount', { amount: $filters.price($env.checkout.minimum_amount) })\"></div>\n </div>\n </div>\n </div>\n <button class=\"button submit\" @click=\"checkout\" v-bind:class=\"{ disabled: total < $env.checkout.minimum_amount, red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <slot name=\"submit\" :total=\"total\"></slot>\n <div class=\"consent\" v-if=\"isConsent\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"consent\" />\n <div class=\"label\" v-html=\"__('shop.order.consent')\"></div>\n </label>\n </div>\n </div>\n <div class=\"comment-wrapper is-promo-code\" v-bind:class=\"{ 'is-open': isPromoCodeToggled }\" v-if=\"isPromoCode\">\n <div class=\"toggler\" @click=\"isPromoCodeToggled = !isPromoCodeToggled\">\n <span>{{ __('shop.order.promo_code') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form is-promo-code\">\n <div class=\"control\">\n <input type=\"text\" class=\"input\" placeholder=\" \" v-model=\"promoCode\" :disabled=\"promoCodeApplied\" id=\"promo-code-applied\">\n <label class=\"label\" for=\"promo-code-applied\">{{ __('shop.order.promo.placeholder') }}</label>\n </div>\n <button v-if=\"!promoCodeApplied\" class=\"button\" @click=\"applyPromoCode\" :disabled=\"!promoCode\" v-bind:class=\"{ 'is-loading': isPromoLoading }\">{{ __('shop.order.promo.apply') }}</button>\n <button v-else class=\"button\" @click=\"resetPromoCode\">{{ __('shop.order.promo.reset') }}</button>\n </div>\n </div>\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>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <slot name=\"thanks\" :order=\"order\" :redirect=\"redirect\" :redirectForm=\"redirectForm\" :home=\"home\" :auth=\"auth\" :filters=\"$filters\" :user=\"user\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ isPayed ? __('shop.order.payed') : __('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 class=\"info-wrapper\" v-if=\"order.promoCode\">\n <div class=\"title\">{{ __('shop.order.promo_code') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\">\n <span v-html=\"order.promoCode\" class=\"green\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </slot>\n </div>\n <div v-else-if=\"!redirectOnEmpty\" 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>, <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, getCurrentInstance, nextTick, provide, useSlots, onMounted } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize, numberFormat } 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 FormRadio from '@perevorot/shop/dist/forms/FormRadio';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\nimport { auth as api } from '@perevorot/shop/dist/api';\nimport { formParse } from '@perevorot/shop/dist/helpers';\n\nyup.addMethod(yup.string, 'numberFilled', function (min, msg) {\n return this.test({\n name: 'numberFilled',\n exclusive: true,\n message: __('auth.validation.number'),\n params: {\n min: min,\n },\n test: (value) => !(value == '' || isNaN(value)),\n });\n});\n\nmarkRaw(FormText);\nmarkRaw(FormRadio);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nconst HtmlMessage = {\n props: {\n message: '',\n },\n template: '<div v-html=\"message\"></div>',\n};\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 props: {\n isLogin: {\n type: Boolean,\n default: true\n },\n isPhoneMasked: {\n type: Boolean,\n default: true\n },\n isPromoCode: {\n type: Boolean,\n default: true\n },\n isConsent: {\n type: Boolean,\n default: false\n },\n isPaymentMethodOverSummary: {\n type: Boolean,\n default: false\n },\n userFields: {\n type: Array,\n default: ['last_name', 'name', 'email', 'phone'],\n },\n redirectOnEmpty: {\n type: String,\n default: false\n },\n showPlaceholders: {\n type: Boolean,\n default: false\n },\n isTrackAfterSuccessOnlinePurchase: {\n type: Boolean,\n default: false\n }\n },\n name: 'order-checkout',\n setup(props) {\n const slots = useSlots();\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 loggedUser = computed(() => store.getters['auth/me']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n const consent = ref(false);\n const shippingComponent = 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 isPromoCodeToggled = ref(false);\n const promoCode = ref('');\n const promoCodeApplied = ref(null);\n const isPromoLoading = ref(false);\n const app = getCurrentInstance();\n\n const loyalty = computed(() => {\n const points = items.value.reduce((acc, array) => acc + (array.attributes.loyalty ? array.attributes.loyalty.points * array.quantity : 0), 0);\n\n return {\n points: points,\n name: pluralize(points, __('shop.pluralize.points'))\n };\n });\n\n const loyaltyUse = ref('');\n const isUseLoyaltyPoints = ref(false);\n\n watch(isUseLoyaltyPoints, (value) => {\n if (value) {\n loyaltyUse.value = total.value;\n } else {\n loyaltyUse.value = '';\n }\n });\n\n const loyaltyUseApplied = ref(false);\n\n const resetLoyaltyUse = () => {\n loyaltyUse.value = 0;\n loyaltyUseApplied.value = false;\n };\n\n const applyLoyaltyUse = () => {\n if (loyaltyUse.value) {\n loyaltyUseApplied.value = true;\n }\n };\n\n const readableTotalInPoints = computed(() => {\n return numberFormat(total.value);\n });\n\n const readableUserLoyaltyPoints = computed(() => {\n return numberFormat(loggedUser.value.loyalty_points - (loyaltyUseApplied.value ? loyaltyUse.value : 0));\n });\n\n const resetPromoCode = () => {\n promoCode.value = '';\n promoCodeApplied.value = null;\n };\n\n const isUserConsent = computed(() => {\n return (props.isConsent && consent.value) || !props.isConsent;\n });\n\n const applyPromoCode = () => {\n if (promoCode.value) {\n isPromoLoading.value = true;\n\n $http\n .post(window.location.href, {\n promoCodeApply: promoCode.value,\n email: user.value.email,\n total: total.value\n })\n .then(response => {\n promoCodeApplied.value = response.data;\n }).catch(error => {\n if (error.response && error.response.data.length) {\n error.response.data.forEach(error => {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.promo.error_' + error.error, { number: app.appContext.config.globalProperties.$filters.price(error.number) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n\n if (error.error == 'not_found') {\n promoCode.value = '';\n }\n });\n\n promoCodeApplied.value = null;\n }\n }).finally(() => {\n isPromoLoading.value = false;\n });\n }\n };\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, defaultValue) => {\n return computed({\n get() {\n return userCheckout.value[name] ? userCheckout.value[name] : defaultValue;\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 provide('field', field);\n\n // const user = ref({\n // last_name: field('last_name'),\n // middle_name: field('middle_name'),\n // name: field('name'),\n // email: field('email'),\n // phone: field('phone'),\n // registration_number: field('registration_number'),\n // company_name: field('company_name'),\n // user_type: field('user_type', 'individual'),\n // });\n const user = ref({});\n\n if (!auth.value) {\n api.registerForm()\n .then((response) => {\n if (response.data) {\n const form = formParse(response.data);\n\n userSchema.value = form.schema;\n user.value = form.model;\n userValidation.value = form.validation;\n }\n })\n .finally(() => {\n\n });\n }\n\n provide('user', user);\n provide('formModel', user);\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const calculateWithPromoCodeDiscount = () => {\n const sum = total.value + fee.value + shippingPrice.value;\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'percent') {\n return Math.round(sum - sum * promoCodeApplied.value.amount / 100);\n }\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'discount') {\n return Math.max(0, sum - promoCodeApplied.value.amount);\n }\n\n return sum;\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 if (ok && r.code === 'user_type') {\n ok = r.value === user.value.user_type;\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 // let userSchemaFields = {\n // user_type: {\n // component: FormRadio,\n // model: 'user_type',\n // label: '',\n // list: [\n // { code: 'individual', value: __('auth.registration.form.user_type_individual') },\n // { code: 'legal', value: __('auth.registration.form.user_type_legal') }\n // ],\n // },\n // name: {\n // component: FormText,\n // label: __('auth.registration.form.name'),\n // model: 'first_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.name') : '',\n // },\n // last_name: {\n // component: FormText,\n // label: __('auth.registration.form.last_name'),\n // model: 'last_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.last_name') : '',\n // },\n // middle_name: {\n // component: FormText,\n // label: __('auth.registration.form.middle_name'),\n // model: 'middle_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.middle_name') : '',\n // },\n // phone: {\n // component: FormText,\n // label: __('auth.registration.form.phone'),\n // model: 'phone',\n // type: 'phone',\n // //placeholder: '(050) 123-45-67'\n // },\n // registration_number: {\n // component: FormText,\n // label: __('auth.registration.form.registration_number'),\n // model: 'registration_number',\n // condition: (model) => model.user_type === 'legal',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.registration_number') : '',\n // },\n // company_name: {\n // component: FormText,\n // label: __('auth.registration.form.company_name'),\n // model: 'company_name',\n // condition: (model) => model.user_type === 'legal',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.company_name') : '',\n // },\n // email: {\n // component: FormText,\n // label: __('auth.login.form.email'),\n // model: 'email',\n // placeholder: props.showPlaceholders ? __('auth.login.form.email') : '',\n // },\n // };\n\n // if (props.isPhoneMasked) {\n // userSchemaFields.phone.mask = '(###) ###-##-##';\n // }\n\n // let userSchemaFieldsFiltered = Object.keys(userSchemaFields).reduce((obj, key) => {\n // if (props.userFields.includes(key)) {\n // obj[key] = userSchemaFields[key];\n // }\n\n // return obj;\n // }, {});\n\n // userSchemaFieldsFiltered = props.userFields.reduce((obj, key) => {\n // obj[key] = userSchemaFieldsFiltered[key];\n // return obj;\n // }, {});\n\n //const userSchema = ref(userSchemaFieldsFiltered);\n const userSchema = ref({});\n const userErrors = ref({});\n const userKey = ref(0);\n\n useSchemaForm(user);\n\n // const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n // const userValidationFields = {\n // last_name: yup.string().trim().required(__('auth.validation.required')),\n // middle_name: yup.string().trim().required(__('auth.validation.required')),\n // name: yup.string().trim().required(__('auth.validation.required')),\n // phone: props.isPhoneMasked ? yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')) : yup.string().required(__('auth.validation.phone')),\n // email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required')),\n // registration_number: yup.string().when('user_type', (user_type) => {\n // if (user_type == 'legal') {\n // return yup.string().numberFilled();\n // }\n // }),\n // company_name: yup.string().when('user_type', (user_type) => {\n // if (user_type == 'legal') {\n // return yup.string().required(__('auth.validation.required'));\n // }\n // }),\n // };\n\n // const userValidationFieldsFiltered = Object.keys(userValidationFields).reduce((obj, key) => {\n // if (props.userFields.includes(key)) {\n // obj[key] = userValidationFields[key];\n // }\n\n // return obj;\n // }, {});\n\n //const userValidation = yup.object().shape(userValidationFieldsFiltered);\n const userValidation = ref({});\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 = async () => {\n if (typeof shippingComponentValid.value == 'function') {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n if (userSubmitButton.value) {\n userSubmitButton.value.click();\n }\n\n if (!auth.value) {\n userValidation.value.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n });\n } else {\n ifCheckoutReady.value = payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n }\n }\n };\n\n const shippingComponentValid = ref(null);\n provide('shippingComponentValid', shippingComponentValid);\n\n const shippingComponentUserData = ref({});\n provide('shippingComponentUserData', shippingComponentUserData);\n\n const initPaymentWidget = (payment, order) => {\n const wayforpay = new Wayforpay();\n\n window.addEventListener('message', (event) => {\n if (event.data == 'WfpWidgetEventClose' || event.data == 'WfpWidgetEventDeclined' || event.data == 'WfpWidgetEventPending') {\n\n }\n\n if (event.data == 'WfpWidgetEventApproved') {\n resetCheckoutForm(order);\n\n isPayed.value = true;\n\n store.dispatch('cart/clear', {\n finally: () => { }\n });\n }\n });\n\n wayforpay.run(payment);\n }\n\n const isPayed = ref(false);\n\n const resetCheckoutForm = (_order) => {\n thanks.value = true;\n order.value = _order;\n\n document.querySelector('html').classList.add('is-checkout-thanks');\n\n resertStore();\n }\n\n const checkout = async () => {\n if (!auth.value) {\n userValidation.value.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 (user.value.is_register) {\n store.dispatch('auth/register', {\n type: 'Full',\n credentials: user.value,\n finally: () => {\n },\n callback: (response) => {\n createOrder();\n },\n catch: (error) => {\n let incomingErrors = {};\n\n if (error.response.data && error.response.data.errors) {\n for (const [field, messages] of Object.entries(error.response.data.errors)) {\n if (messages[0]) {\n incomingErrors[field] = messages[0];\n }\n }\n\n userKey.value++;\n }\n\n userErrors.value = incomingErrors;\n }\n });\n } else {\n createOrder();\n }\n });\n } else {\n createOrder();\n }\n };\n\n const createOrderWithoutValidate = (valid) => {\n let isShippingComponentFormsValid = typeof shippingComponentValid.value == 'function' ? shippingComponentValid.value() : null;\n\n if (shippingSelected.value && !shippingSelected.value.component) {\n isShippingComponentFormsValid = true;\n }\n\n if (total.value < $env.checkout.minimum_amount) {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.validate_minimum_amount', { amount: app.appContext.config.globalProperties.$filters.price($env.checkout.minimum_amount) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n } else 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 (shippingSelected.value.component && (!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 (!isShippingComponentFormsValid) {\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 if (!isUserConsent.value) {\n toast(__('shop.order.validate_consent'), {\n type: 'error'\n });\n } else {\n let clientId;\n let data = shippingComponentData.value[shippingSelected.value.code] ? JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code])) : {};\n\n delete data.isValid;\n\n const shippingUserData = JSON.parse(JSON.stringify(shippingComponentUserData.value));\n\n if (document.cookie) {\n const cookies = document.cookie.split(';');\n\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n\n if (parts[0].trim() === '_ga') {\n clientId = parts[1].split('.')[2] + '.' + parts[1].split('.')[3];\n }\n });\n }\n\n const userValue = auth.value ? loggedUser.value : user.value;\n\n const model = {\n checkout: true,\n user: {\n last_name: userValue.last_name,\n middle_name: userValue.middle_name,\n name: userValue.name,\n phone: userValue.phone,\n email: userValue.email,\n user_type: userValue.user_type,\n registration_number: userValue.registration_number,\n company_name: userValue.company_name,\n district: userValue.district,\n region: userValue.region,\n is_register: userValue.is_register,\n },\n shipping: {\n id: shipping.value,\n data: data,\n user: shippingUserData,\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value,\n promoCode: promoCode.value,\n loyalty: loyaltyUse.value,\n clientId: clientId\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data && response.data.error && response.data.message) {\n toast(response.data.message, {\n type: 'error',\n });\n\n return;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n let product = {\n item_name: item.name,\n item_id: item.attributes.code,\n price: item.price,\n quantity: item.quantity\n };\n\n if (item.attributes.brand) {\n product.item_brand = item.attributes.brand;\n }\n\n if (item.attributes.property) {\n product.item_variant = item.attributes.property;\n }\n\n if (item.attributes.categoryFull) {\n if (item.attributes.categoryFull.indexOf('/') !== -1) {\n item.attributes.categoryFull.split('/').forEach((segment, index) => {\n product['item_category' + (index ? index + 1 : '')] = segment.trim();\n });\n } else {\n product.item_category = item.attributes.categoryFull;\n }\n }\n\n if (item.attributes.index) {\n product.index = item.attributes.index;\n }\n\n if (item.attributes.itemListName) {\n product.item_list_name = item.attributes.itemListName;\n }\n\n products.push(product);\n });\n\n\n let object = {\n payment_type: paymentSelected.value.name,\n shipping_tier: shippingSelected.value.name,\n ecommerce: {\n transaction_id: response.data.order.id,\n affiliation: 'main',\n value: parseFloat(total.value),\n shipping: 0,\n currency: 'UAH',\n items: products\n },\n event: 'purchase',\n };\n\n if (user.value.user_type) {\n object.user_type = __('auth.registration.form.user_type_' + user.value.user_type);\n }\n\n if (promoCode.value) {\n object.ecommerce.coupon = promoCode.value;\n }\n\n if (props.isTrackAfterSuccessOnlinePurchase && (response.data.redirect || (response.data.payment_widget_data && window.Wayforpay))) {\n localStorage.setItem('ecommerce', JSON.stringify(object));\n } else {\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n\n nextTick(() => {\n setTimeout(() => {\n redirectForm.value.submit();\n }, 400);\n });\n }\n\n if (response.data.payment_widget_data && window.Wayforpay) {\n initPaymentWidget(JSON.parse(response.data.payment_widget_data), response.data.order);\n } else {\n resetCheckoutForm(response.data.order);\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 const createOrder = () => {\n if (!auth.value) {\n userValidation.value.isValid(user.value).then(function (valid) {\n createOrderWithoutValidate(valid);\n });\n } else {\n createOrderWithoutValidate(true);\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 // debug\n store.commit('checkout/reset');\n store.commit('cart/clear');\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 onMounted(() => {\n if (!quantity.value && props.redirectOnEmpty) {\n window.location.href = props.redirectOnEmpty;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n let product = {\n item_name: item.name,\n item_id: item.attributes.code,\n price: parseFloat(item.attributes.price),\n quantity: item.quantity\n };\n\n if (item.attributes.brand) {\n product.item_brand = item.attributes.brand;\n }\n\n if (item.attributes.property) {\n product.item_variant = item.attributes.property;\n }\n\n if (item.attributes.categoryFull) {\n if (item.attributes.categoryFull.indexOf('/') !== -1) {\n item.attributes.categoryFull.split('/').forEach((segment, index) => {\n product['item_category' + (index ? index + 1 : '')] = segment.trim();\n });\n } else {\n product.item_category = item.attributes.categoryFull;\n }\n }\n\n if (item.attributes.index) {\n product.index = item.attributes.index;\n }\n\n if (item.attributes.itemListName) {\n product.item_list_name = item.attributes.itemListName;\n }\n\n products.push(product);\n });\n\n if (products.length) {\n const object = {\n ecommerce: {\n currency: 'UAH',\n items: products,\n value: parseFloat(total.value),\n },\n event: 'begin_checkout'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n });\n\n const phoneFormatted = (phone) => {\n return phone.replace(/(\\d{3})(\\d{3})(\\d{2})(\\d{2})/, '($1) $2-$3-$4');\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 isPromoCodeToggled,\n applyPromoCode,\n promoCode,\n isPromoLoading,\n promoCodeApplied,\n resetPromoCode,\n calculateWithPromoCodeDiscount,\n consent,\n shippingComponent,\n slots,\n isPayed,\n loyalty,\n loyaltyUse,\n loyaltyUseApplied,\n resetLoyaltyUse,\n applyLoyaltyUse,\n readableUserLoyaltyPoints,\n userErrors,\n userKey,\n loggedUser,\n phoneFormatted,\n readableTotalInPoints,\n isUseLoyaltyPoints,\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" style=\"position: absolute; left: -1000px; top:-1000px;\" 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 checkout-blocks-wrapper\">\n <slot name=\"header\"></slot>\n <div class=\"checkout-block is-cart\"><!--items-->\n <div class=\"wrapper\">\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> <span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <slot name=\"cart\" :items=\"items\">\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 </slot>\n <slot name=\"cart-footer\" :total=\"total\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-user auth-user\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth && isLogin\">\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=\"logged-user\" v-if=\"auth\">\n <p><strong>{{ loggedUser.name }} {{ loggedUser.last_name }} {{ loggedUser.middle_name }}</strong></p>\n <p>{{ phoneFormatted(loggedUser.phone) }}, {{ loggedUser.email }}</p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.company_name\"><strong>{{ loggedUser.company_name }}</strong></p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.registration_number\">ЄДРПОУ {{ loggedUser.registration_number }}</p>\n <p v-if=\"loggedUser.user_type == 'legal' && loggedUser.region\">{{ loggedUser.region_name }} {{ loggedUser.district_name ? ', ' + loggedUser.district_name : '' }}</p>\n </div>\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\" :initial-errors=\"userErrors\" :key=\"userKey\" :preventModelCleanupOnSchemaChange=\"true\">\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'\" v-if=\"isLogin\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\" v-if=\"isLogin\">\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>\n <div class=\"checkout-block is-shipping\">\n <div class=\"wrapper shipping-type-block\">\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=\"shippingSelected && shippingSelected.nextDates\">\n <div class=\"next-dates\">на {{ shippingSelected.nextDates }}</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 <div v-if=\"!slots.shippingFooter\">\n <component :is=\"item.component\" v-if=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <slot name=\"shipping-footer\" :shippingTypesRestricted=\"shippingTypesRestricted\" :shipping=\"shipping\" :shippingStoreData=\"shippingStoreData\" :shippingComponentData=\"shippingComponentData\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-payment\" v-if=\"!isPaymentMethodOverSummary\">\n <div class=\"wrapper payment-method-block\">\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\" v-bind:class=\"'is-' + item.code\">\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=\"inner payment-method-block\" v-if=\"isPaymentMethodOverSummary\">\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\" v-bind:class=\"'is-' + item.code\">\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 class=\"divider\"></div>\n <div class=\"inner\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row products\">\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 discount\" 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 fee\" 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 shipping\" 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 promo\" v-if=\"promoCodeApplied\">\n <div class=\"info\">{{ __('shop.order.promo_code') }}<br><span class=\"green\">{{ promoCode }}</span></div>\n <div class=\"value\">\n <span v-html=\"(promoCodeApplied.type == 'percent' ? promoCodeApplied.amount + '%' : $filters.price(promoCodeApplied.amount))\"></span>\n </div>\n </div>\n <div class=\"row price\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(calculateWithPromoCodeDiscount())\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper nocall\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <slot name=\"loyalty\" :loyalty=\"loyalty\" :inactive=\"isUseLoyaltyPoints\"></slot>\n <div class=\"user-loyalty consent\" v-if=\"loggedUser && loggedUser.loyalty_points > 0 && total<=loggedUser.loyalty_points\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"isUseLoyaltyPoints\">\n <div class=\"label\">Сплатити замовлення за <span>{{ pluralize(readableTotalInPoints, __('shop.pluralize.points')) }}</span></div>\n </label>\n </div>\n <!-- <div class=\"notice\">{{ pluralize(readableUserLoyaltyPoints, __('shop.pluralize.points')) }} в наявності</div>\n <div class=\"user-form is-loyalty-use\">\n <div class=\"control\">\n <input type=\"number\" class=\"input\" placeholder=\"Сума бонусів\" v-model=\"loyaltyUse\" :disabled=\"loyaltyUseApplied\">\n </div>\n <button v-if=\"!loyaltyUseApplied\" class=\"button\" @click=\"applyLoyaltyUse\" :disabled=\"!loyaltyUse || loyaltyUse > loggedUser.loyalty_points\">Використати</button>\n <button v-else class=\"button is-reset\" @click=\"resetLoyaltyUse\">Відмінити</button>\n </div> -->\n </div>\n <div class=\"minimum-amount-message\" v-if=\"total < $env.checkout.minimum_amount\">\n <div class=\"columns is-gapless\">\n <div class=\"column is-narrow\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.50007 18C5.35778 18 2 14.6423 2 10.5C2 6.35775 5.35778 3 9.50007 3C13.6424 3 17.0001 6.35775 17.0001 10.5C17.0001 14.6423 13.6424 18 9.50007 18ZM8.75006 12.75V14.25H10.2501V12.75H8.75006ZM8.75006 6.75V11.25H10.2501V6.75H8.75006Z\" fill=\"#7C7C7C\" />\n </svg>\n </div>\n <div class=\"column\">\n <div class=\"message\" v-html=\"__('shop.order.minimum_amount', { amount: $filters.price($env.checkout.minimum_amount) })\"></div>\n </div>\n </div>\n </div>\n <button class=\"button submit\" @click=\"checkout\" v-bind:class=\"{ disabled: total < $env.checkout.minimum_amount, red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <slot name=\"submit\" :total=\"total\"></slot>\n <div class=\"consent\" v-if=\"isConsent\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"consent\" />\n <div class=\"label\" v-html=\"__('shop.order.consent')\"></div>\n </label>\n </div>\n </div>\n <div class=\"comment-wrapper is-promo-code\" v-bind:class=\"{ 'is-open': isPromoCodeToggled }\" v-if=\"isPromoCode\">\n <div class=\"toggler\" @click=\"isPromoCodeToggled = !isPromoCodeToggled\">\n <span>{{ __('shop.order.promo_code') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form is-promo-code\">\n <div class=\"control\">\n <input type=\"text\" class=\"input\" placeholder=\" \" v-model=\"promoCode\" :disabled=\"promoCodeApplied\" id=\"promo-code-applied\">\n <label class=\"label\" for=\"promo-code-applied\">{{ __('shop.order.promo.placeholder') }}</label>\n </div>\n <button v-if=\"!promoCodeApplied\" class=\"button\" @click=\"applyPromoCode\" :disabled=\"!promoCode\" v-bind:class=\"{ 'is-loading': isPromoLoading }\">{{ __('shop.order.promo.apply') }}</button>\n <button v-else class=\"button\" @click=\"resetPromoCode\">{{ __('shop.order.promo.reset') }}</button>\n </div>\n </div>\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>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <slot name=\"thanks\" :order=\"order\" :redirect=\"redirect\" :redirectForm=\"redirectForm\" :home=\"home\" :auth=\"auth\" :filters=\"$filters\" :user=\"user\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ isPayed ? __('shop.order.payed') : __('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 class=\"info-wrapper\" v-if=\"order.promoCode\">\n <div class=\"title\">{{ __('shop.order.promo_code') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\">\n <span v-html=\"order.promoCode\" class=\"green\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </slot>\n </div>\n <div v-else-if=\"!redirectOnEmpty\" 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>, <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, getCurrentInstance, nextTick, provide, useSlots, onMounted } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize, numberFormat } 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 FormRadio from '@perevorot/shop/dist/forms/FormRadio';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\nimport { auth as api } from '@perevorot/shop/dist/api';\nimport { formParse } from '@perevorot/shop/dist/helpers';\n\nyup.addMethod(yup.string, 'numberFilled', function (min, msg) {\n return this.test({\n name: 'numberFilled',\n exclusive: true,\n message: __('auth.validation.number'),\n params: {\n min: min,\n },\n test: (value) => !(value == '' || isNaN(value)),\n });\n});\n\nmarkRaw(FormText);\nmarkRaw(FormRadio);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nconst HtmlMessage = {\n props: {\n message: '',\n },\n template: '<div v-html=\"message\"></div>',\n};\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 props: {\n isLogin: {\n type: Boolean,\n default: true\n },\n isPhoneMasked: {\n type: Boolean,\n default: true\n },\n isPromoCode: {\n type: Boolean,\n default: true\n },\n isConsent: {\n type: Boolean,\n default: false\n },\n isPaymentMethodOverSummary: {\n type: Boolean,\n default: false\n },\n userFields: {\n type: Array,\n default: ['last_name', 'name', 'email', 'phone'],\n },\n redirectOnEmpty: {\n type: String,\n default: false\n },\n showPlaceholders: {\n type: Boolean,\n default: false\n },\n isTrackAfterSuccessOnlinePurchase: {\n type: Boolean,\n default: false\n }\n },\n name: 'order-checkout',\n setup(props) {\n const slots = useSlots();\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 loggedUser = computed(() => store.getters['auth/me']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n const consent = ref(false);\n const shippingComponent = 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 isPromoCodeToggled = ref(false);\n const promoCode = ref('');\n const promoCodeApplied = ref(null);\n const isPromoLoading = ref(false);\n const app = getCurrentInstance();\n\n const loyalty = computed(() => {\n const points = items.value.reduce((acc, array) => acc + (array.attributes.loyalty ? array.attributes.loyalty.points * array.quantity : 0), 0);\n\n return {\n points: points,\n name: pluralize(points, __('shop.pluralize.points'))\n };\n });\n\n const loyaltyUse = ref('');\n const isUseLoyaltyPoints = ref(false);\n\n watch(isUseLoyaltyPoints, (value) => {\n if (value) {\n loyaltyUse.value = total.value;\n } else {\n loyaltyUse.value = '';\n }\n });\n\n const loyaltyUseApplied = ref(false);\n\n const resetLoyaltyUse = () => {\n loyaltyUse.value = 0;\n loyaltyUseApplied.value = false;\n };\n\n const applyLoyaltyUse = () => {\n if (loyaltyUse.value) {\n loyaltyUseApplied.value = true;\n }\n };\n\n const readableTotalInPoints = computed(() => {\n return numberFormat(total.value);\n });\n\n const readableUserLoyaltyPoints = computed(() => {\n return numberFormat(loggedUser.value.loyalty_points - (loyaltyUseApplied.value ? loyaltyUse.value : 0));\n });\n\n const resetPromoCode = () => {\n promoCode.value = '';\n promoCodeApplied.value = null;\n };\n\n const isUserConsent = computed(() => {\n return (props.isConsent && consent.value) || !props.isConsent;\n });\n\n const applyPromoCode = () => {\n if (promoCode.value) {\n isPromoLoading.value = true;\n\n $http\n .post(window.location.href, {\n promoCodeApply: promoCode.value,\n email: user.value.email,\n total: total.value\n })\n .then(response => {\n promoCodeApplied.value = response.data;\n }).catch(error => {\n if (error.response && error.response.data.length) {\n error.response.data.forEach(error => {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.promo.error_' + error.error, { number: app.appContext.config.globalProperties.$filters.price(error.number) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n\n if (error.error == 'not_found') {\n promoCode.value = '';\n }\n });\n\n promoCodeApplied.value = null;\n }\n }).finally(() => {\n isPromoLoading.value = false;\n });\n }\n };\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, defaultValue) => {\n return computed({\n get() {\n return userCheckout.value[name] ? userCheckout.value[name] : defaultValue;\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 provide('field', field);\n\n // const user = ref({\n // last_name: field('last_name'),\n // middle_name: field('middle_name'),\n // name: field('name'),\n // email: field('email'),\n // phone: field('phone'),\n // registration_number: field('registration_number'),\n // company_name: field('company_name'),\n // user_type: field('user_type', 'individual'),\n // });\n const user = ref({});\n\n if (!auth.value) {\n api.registerForm()\n .then((response) => {\n if (response.data) {\n const form = formParse(response.data);\n\n userSchema.value = form.schema;\n user.value = form.model;\n userValidation.value = form.validation;\n }\n })\n .finally(() => {\n\n });\n }\n\n provide('user', user);\n provide('formModel', user);\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const calculateWithPromoCodeDiscount = () => {\n const sum = total.value + fee.value + shippingPrice.value;\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'percent') {\n return Math.round(sum - sum * promoCodeApplied.value.amount / 100);\n }\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'discount') {\n return Math.max(0, sum - promoCodeApplied.value.amount);\n }\n\n return sum;\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 if (ok && r.code === 'user_type') {\n ok = r.value === user.value.user_type;\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 // let userSchemaFields = {\n // user_type: {\n // component: FormRadio,\n // model: 'user_type',\n // label: '',\n // list: [\n // { code: 'individual', value: __('auth.registration.form.user_type_individual') },\n // { code: 'legal', value: __('auth.registration.form.user_type_legal') }\n // ],\n // },\n // name: {\n // component: FormText,\n // label: __('auth.registration.form.name'),\n // model: 'first_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.name') : '',\n // },\n // last_name: {\n // component: FormText,\n // label: __('auth.registration.form.last_name'),\n // model: 'last_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.last_name') : '',\n // },\n // middle_name: {\n // component: FormText,\n // label: __('auth.registration.form.middle_name'),\n // model: 'middle_name',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.middle_name') : '',\n // },\n // phone: {\n // component: FormText,\n // label: __('auth.registration.form.phone'),\n // model: 'phone',\n // type: 'phone',\n // //placeholder: '(050) 123-45-67'\n // },\n // registration_number: {\n // component: FormText,\n // label: __('auth.registration.form.registration_number'),\n // model: 'registration_number',\n // condition: (model) => model.user_type === 'legal',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.registration_number') : '',\n // },\n // company_name: {\n // component: FormText,\n // label: __('auth.registration.form.company_name'),\n // model: 'company_name',\n // condition: (model) => model.user_type === 'legal',\n // placeholder: props.showPlaceholders ? __('auth.registration.form.company_name') : '',\n // },\n // email: {\n // component: FormText,\n // label: __('auth.login.form.email'),\n // model: 'email',\n // placeholder: props.showPlaceholders ? __('auth.login.form.email') : '',\n // },\n // };\n\n // if (props.isPhoneMasked) {\n // userSchemaFields.phone.mask = '(###) ###-##-##';\n // }\n\n // let userSchemaFieldsFiltered = Object.keys(userSchemaFields).reduce((obj, key) => {\n // if (props.userFields.includes(key)) {\n // obj[key] = userSchemaFields[key];\n // }\n\n // return obj;\n // }, {});\n\n // userSchemaFieldsFiltered = props.userFields.reduce((obj, key) => {\n // obj[key] = userSchemaFieldsFiltered[key];\n // return obj;\n // }, {});\n\n //const userSchema = ref(userSchemaFieldsFiltered);\n const userSchema = ref({});\n const userErrors = ref({});\n const userKey = ref(0);\n\n useSchemaForm(user);\n\n // const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n // const userValidationFields = {\n // last_name: yup.string().trim().required(__('auth.validation.required')),\n // middle_name: yup.string().trim().required(__('auth.validation.required')),\n // name: yup.string().trim().required(__('auth.validation.required')),\n // phone: props.isPhoneMasked ? yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')) : yup.string().required(__('auth.validation.phone')),\n // email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required')),\n // registration_number: yup.string().when('user_type', (user_type) => {\n // if (user_type == 'legal') {\n // return yup.string().numberFilled();\n // }\n // }),\n // company_name: yup.string().when('user_type', (user_type) => {\n // if (user_type == 'legal') {\n // return yup.string().required(__('auth.validation.required'));\n // }\n // }),\n // };\n\n // const userValidationFieldsFiltered = Object.keys(userValidationFields).reduce((obj, key) => {\n // if (props.userFields.includes(key)) {\n // obj[key] = userValidationFields[key];\n // }\n\n // return obj;\n // }, {});\n\n //const userValidation = yup.object().shape(userValidationFieldsFiltered);\n const userValidation = ref({});\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 = async () => {\n if (typeof shippingComponentValid.value == 'function') {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n if (userSubmitButton.value) {\n userSubmitButton.value.click();\n }\n\n if (!auth.value) {\n userValidation.value.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n });\n } else {\n ifCheckoutReady.value = payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n }\n }\n };\n\n const shippingComponentValid = ref(null);\n provide('shippingComponentValid', shippingComponentValid);\n\n const shippingComponentUserData = ref({});\n provide('shippingComponentUserData', shippingComponentUserData);\n\n const initPaymentWidget = (payment, order) => {\n const wayforpay = new Wayforpay();\n\n window.addEventListener('message', (event) => {\n if (event.data == 'WfpWidgetEventClose' || event.data == 'WfpWidgetEventDeclined' || event.data == 'WfpWidgetEventPending') {\n\n }\n\n if (event.data == 'WfpWidgetEventApproved') {\n resetCheckoutForm(order);\n\n isPayed.value = true;\n\n store.dispatch('cart/clear', {\n finally: () => { }\n });\n }\n });\n\n wayforpay.run(payment);\n }\n\n const isPayed = ref(false);\n\n const resetCheckoutForm = (_order) => {\n thanks.value = true;\n order.value = _order;\n\n document.querySelector('html').classList.add('is-checkout-thanks');\n\n resertStore();\n }\n\n const checkout = async () => {\n if (!auth.value) {\n userValidation.value.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 (user.value.is_register) {\n store.dispatch('auth/register', {\n type: 'Full',\n credentials: user.value,\n finally: () => {\n },\n callback: (response) => {\n createOrder();\n },\n catch: (error) => {\n let incomingErrors = {};\n\n if (error.response.data && error.response.data.errors) {\n for (const [field, messages] of Object.entries(error.response.data.errors)) {\n if (messages[0]) {\n incomingErrors[field] = messages[0];\n }\n }\n\n userKey.value++;\n }\n\n userErrors.value = incomingErrors;\n }\n });\n } else {\n createOrder();\n }\n });\n } else {\n createOrder();\n }\n };\n\n const createOrderWithoutValidate = (valid) => {\n let isShippingComponentFormsValid = typeof shippingComponentValid.value == 'function' ? shippingComponentValid.value() : null;\n\n if (shippingSelected.value && !shippingSelected.value.component) {\n isShippingComponentFormsValid = true;\n }\n\n if (total.value < $env.checkout.minimum_amount) {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.validate_minimum_amount', { amount: app.appContext.config.globalProperties.$filters.price($env.checkout.minimum_amount) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n } else 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 (shippingSelected.value.component && (!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 (!isShippingComponentFormsValid) {\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 if (!isUserConsent.value) {\n toast(__('shop.order.validate_consent'), {\n type: 'error'\n });\n } else {\n let clientId;\n let data = shippingComponentData.value[shippingSelected.value.code] ? JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code])) : {};\n\n delete data.isValid;\n\n const shippingUserData = JSON.parse(JSON.stringify(shippingComponentUserData.value));\n\n if (document.cookie) {\n const cookies = document.cookie.split(';');\n\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n\n if (parts[0].trim() === '_ga') {\n clientId = parts[1].split('.')[2] + '.' + parts[1].split('.')[3];\n }\n });\n }\n\n const userValue = auth.value ? loggedUser.value : user.value;\n\n const model = {\n checkout: true,\n user: {\n last_name: userValue.last_name,\n middle_name: userValue.middle_name,\n name: userValue.name,\n phone: userValue.phone,\n email: userValue.email,\n user_type: userValue.user_type,\n registration_number: userValue.registration_number,\n company_name: userValue.company_name,\n district: userValue.district,\n region: userValue.region,\n is_register: userValue.is_register,\n },\n shipping: {\n id: shipping.value,\n data: data,\n user: shippingUserData,\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value,\n promoCode: promoCode.value,\n loyalty: loyaltyUse.value,\n clientId: clientId\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data && response.data.error && response.data.message) {\n toast(response.data.message, {\n type: 'error',\n });\n\n return;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n let product = {\n item_name: item.name,\n item_id: item.attributes.code,\n price: item.price,\n quantity: item.quantity\n };\n\n if (item.attributes.brand) {\n product.item_brand = item.attributes.brand;\n }\n\n if (item.attributes.property) {\n product.item_variant = item.attributes.property;\n }\n\n if (item.attributes.categoryFull) {\n if (item.attributes.categoryFull.indexOf('/') !== -1) {\n item.attributes.categoryFull.split('/').forEach((segment, index) => {\n product['item_category' + (index ? index + 1 : '')] = segment.trim();\n });\n } else {\n product.item_category = item.attributes.categoryFull;\n }\n }\n\n if (item.attributes.index) {\n product.index = item.attributes.index;\n }\n\n if (item.attributes.itemListName) {\n product.item_list_name = item.attributes.itemListName;\n }\n\n products.push(product);\n });\n\n\n let object = {\n payment_type: paymentSelected.value.name,\n shipping_tier: shippingSelected.value.name,\n ecommerce: {\n transaction_id: response.data.order.id,\n affiliation: 'main',\n value: parseFloat(total.value),\n shipping: 0,\n currency: 'UAH',\n items: products\n },\n event: 'purchase',\n };\n\n if (user.value.user_type) {\n object.user_type = __('auth.registration.form.user_type_' + user.value.user_type);\n }\n\n if (promoCode.value) {\n object.ecommerce.coupon = promoCode.value;\n }\n\n if (props.isTrackAfterSuccessOnlinePurchase && (response.data.redirect || (response.data.payment_widget_data && window.Wayforpay))) {\n localStorage.setItem('ecommerce', JSON.stringify(object));\n } else {\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n\n nextTick(() => {\n setTimeout(() => {\n redirectForm.value.submit();\n }, 400);\n });\n }\n\n if (response.data.payment_widget_data && window.Wayforpay) {\n initPaymentWidget(JSON.parse(response.data.payment_widget_data), response.data.order);\n } else {\n resetCheckoutForm(response.data.order);\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 const createOrder = () => {\n if (!auth.value) {\n userValidation.value.isValid(user.value).then(function (valid) {\n createOrderWithoutValidate(valid);\n });\n } else {\n createOrderWithoutValidate(true);\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 // debug\n store.commit('checkout/reset');\n store.commit('cart/clear');\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 onMounted(() => {\n if (!quantity.value && props.redirectOnEmpty) {\n window.location.href = props.redirectOnEmpty;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n let product = {\n item_name: item.name,\n item_id: item.attributes.code,\n price: parseFloat(item.attributes.price),\n quantity: item.quantity\n };\n\n if (item.attributes.brand) {\n product.item_brand = item.attributes.brand;\n }\n\n if (item.attributes.property) {\n product.item_variant = item.attributes.property;\n }\n\n if (item.attributes.categoryFull) {\n if (item.attributes.categoryFull.indexOf('/') !== -1) {\n item.attributes.categoryFull.split('/').forEach((segment, index) => {\n product['item_category' + (index ? index + 1 : '')] = segment.trim();\n });\n } else {\n product.item_category = item.attributes.categoryFull;\n }\n }\n\n if (item.attributes.index) {\n product.index = item.attributes.index;\n }\n\n if (item.attributes.itemListName) {\n product.item_list_name = item.attributes.itemListName;\n }\n\n products.push(product);\n });\n\n if (products.length) {\n const object = {\n ecommerce: {\n currency: 'UAH',\n items: products,\n value: parseFloat(total.value),\n },\n event: 'begin_checkout'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n });\n\n const phoneFormatted = (phone) => {\n return phone.replace(/(\\d{3})(\\d{3})(\\d{2})(\\d{2})/, '($1) $2-$3-$4');\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 isPromoCodeToggled,\n applyPromoCode,\n promoCode,\n isPromoLoading,\n promoCodeApplied,\n resetPromoCode,\n calculateWithPromoCodeDiscount,\n consent,\n shippingComponent,\n slots,\n isPayed,\n loyalty,\n loyaltyUse,\n loyaltyUseApplied,\n resetLoyaltyUse,\n applyLoyaltyUse,\n readableUserLoyaltyPoints,\n userErrors,\n userKey,\n loggedUser,\n phoneFormatted,\n readableTotalInPoints,\n isUseLoyaltyPoints,\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","item","Object","setup","options","computed","attributes","length","itemOptions","filter","option","value","indexOf","id","_createElementVNode","then","resolve","i","arguments","_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_31","_hoisted_32","_hoisted_33","second","_hoisted_39","_hoisted_40","_hoisted_41","third","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_51","_hoisted_52","_hoisted_53","yup","addMethod","string","min","msg","this","test","exclusive","message","__","params","isNaN","markRaw","FormText","FormRadio","SchemaForm","SchemaFormFactory","VeeValidatePlugin","HtmlMessage","template","window","viewedSwiperOptions","slidesPerView","freeMode","slideClass","mousewheel","forceToAxis","navigation","nextEl","prevEl","observer","observeParents","components","CheckoutItem","isLogin","type","Boolean","isPhoneMasked","isPromoCode","isConsent","isPaymentMethodOverSummary","userFields","Array","redirectOnEmpty","String","showPlaceholders","isTrackAfterSuccessOnlinePurchase","slots","useSlots","toast","useToast","store","useStore","loading","ref","getters","items","total","auth","userCheckout","loggedUser","ifCheckoutReady","redirectForm","thanks","order","consent","shippingComponent","redirect","shippingTypes","paymentMethods","userType","userSubmitButton","shippingComponentData","isCommentToggled","isPromoCodeToggled","promoCode","promoCodeApplied","isPromoLoading","app","getCurrentInstance","loyalty","points","reduce","acc","array","pluralize","loyaltyUse","isUseLoyaltyPoints","watch","loyaltyUseApplied","readableTotalInPoints","numberFormat","readableUserLoyaltyPoints","loyalty_points","isUserConsent","dontcall","get","set","commit","comment","substring","provide","defaultValue","data","JSON","parse","stringify","user","api","registerForm","response","form","formParse","userSchema","schema","model","userValidation","validation","dispatch","shipping","payment","shippingSelected","find","paymentSelected","shippingPrice","calculatePrice","fee","shippingTypesRestricted","restrictCheck","paymentMethodsRestricted","categoriesInCart","categories","forEach","category_id","push","Math","round","elements","restrictions","keys","ok","r","price_min","price_max","restrictedForce","shipping_type","payment_method","includes","user_type","restricted","discount","s","$http","post","location","userErrors","userKey","useSchemaForm","addEventListener","validate","result","shippingComponentValid","isShippingComponentFormsValid","click","component","isValid","isUserValid","shippingComponentUserData","isPayed","resetCheckoutForm","_order","document","querySelector","classList","add","resertStore","checkout","createOrder","valid","is_register","credentials","callback","error","incomingErrors","errors","entries","field","messages","createOrderWithoutValidate","$env","minimum_amount","appContext","config","globalProperties","$filters","clientId","shippingUserData","cookie","split","parts","trim","userValue","last_name","middle_name","phone","email","registration_number","company_name","district","region","products","product","item_name","item_id","brand","item_brand","property","item_variant","categoryFull","segment","item_category","itemListName","item_list_name","object","payment_type","shipping_tier","ecommerce","transaction_id","affiliation","parseFloat","currency","event","coupon","payment_widget_data","Wayforpay","localStorage","setItem","debug","console","log","dataLayer","url","nextTick","setTimeout","submit","wayforpay","run","initPaymentWidget","e","onMounted","facebook","$ziggy","provider","google","loginCallback","toggleShippingRadio","togglePaymentRadio","shippingStoreData","d","commentMaxLength","home","locale","applyPromoCode","promoCodeApply","number","resetPromoCode","calculateWithPromoCodeDiscount","max","resetLoyaltyUse","applyLoyaltyUse","phoneFormatted","replace","viewBox","fill","xmlns","action","style","method","_hoisted_5","_hoisted_6","_hoisted_7","_renderSlot","_hoisted_8","_createCommentVNode","_hoisted_9","_toDisplayString","_createBlock","_createVNode","onClick","open","_hoisted_15","_hoisted_19","_hoisted_21","region_name","district_name","schemaRowClasses","preventModelCleanupOnSchemaChange","afterForm","_hoisted_30","_hoisted_42","nextDates","_hoisted_46","_hoisted_47","_hoisted_49","_hoisted_50","icon","description","_hoisted_56","_hoisted_57","price_label","_hoisted_58","shippingFooter","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_69","_hoisted_71","_hoisted_72","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_83","_hoisted_85","_hoisted_86","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_95","_hoisted_97","_hoisted_98","_hoisted_99","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_112","_hoisted_113","_hoisted_114","_hoisted_116","_hoisted_117","_hoisted_118","_hoisted_120","inactive","_hoisted_121","_hoisted_122","_hoisted_123","_hoisted_124","_hoisted_125","_hoisted_126","_hoisted_127","_hoisted_129","_hoisted_130","_hoisted_132","_hoisted_133","_hoisted_134","placeholder","disabled","_hoisted_136","_hoisted_138","_hoisted_139","_hoisted_140","_hoisted_141","filters","_hoisted_142","_hoisted_143","_hoisted_144","_hoisted_145","_hoisted_146","_hoisted_147","_hoisted_148","_hoisted_149","_hoisted_150","_hoisted_153","_hoisted_154","_hoisted_155","_hoisted_158","_hoisted_159","_hoisted_160","_hoisted_161","_hoisted_163","_hoisted_164","_hoisted_165","_hoisted_167"],"mappings":"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"}
|