@perevorot/shop 3.0.9 → 3.0.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -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=5680d4d8&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>&nbsp;<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.last_name }} {{ loggedUser.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\" :take-user-data=\"true\"></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 provide('loggedUser', loggedUser);\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>&nbsp;<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.last_name }} {{ loggedUser.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\" :take-user-data=\"true\"></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 provide('loggedUser', loggedUser);\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","body","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","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_68","_hoisted_70","_hoisted_71","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_82","_hoisted_84","_hoisted_85","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_94","_hoisted_96","_hoisted_97","_hoisted_98","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_104","_hoisted_105","_hoisted_106","_hoisted_108","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_112","_hoisted_113","_hoisted_115","_hoisted_116","_hoisted_117","_hoisted_119","inactive","_hoisted_120","_hoisted_121","_hoisted_122","_hoisted_123","_hoisted_124","_hoisted_125","_hoisted_126","_hoisted_128","_hoisted_129","_hoisted_131","_hoisted_132","_hoisted_133","placeholder","disabled","_hoisted_135","_hoisted_137","_hoisted_138","_hoisted_139","_hoisted_140","filters","_hoisted_141","_hoisted_142","_hoisted_143","_hoisted_144","_hoisted_145","_hoisted_146","_hoisted_147","_hoisted_148","_hoisted_149","_hoisted_152","_hoisted_153","_hoisted_154","_hoisted_157","_hoisted_158","_hoisted_159","_hoisted_160","_hoisted_162","_hoisted_163","_hoisted_164","_hoisted_166"],"mappings":"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"}
1
+ {"version":3,"file":"Checkout.js","sources":["../../../../src/components/shop/order/CheckoutItem.vue","../../../../src/components/shop/order/CheckoutItem.vue?vue&type=template&id=4d5a1fac&lang.js","../../../../src/components/shop/order/Checkout.vue","../../../../src/components/shop/order/Checkout.vue?vue&type=template&id=25662b62&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>&nbsp;<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.last_name }} {{ loggedUser.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-if=\"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-if=\"userType == 'login' && 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\" :take-user-data=\"true\"></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 provide('loggedUser', loggedUser);\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>&nbsp;<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.last_name }} {{ loggedUser.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-if=\"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-if=\"userType == 'login' && 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\" :take-user-data=\"true\"></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 provide('loggedUser', loggedUser);\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","body","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","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_68","_hoisted_70","_hoisted_71","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_82","_hoisted_84","_hoisted_85","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_94","_hoisted_96","_hoisted_97","_hoisted_98","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_104","_hoisted_105","_hoisted_106","_hoisted_108","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_112","_hoisted_113","_hoisted_115","_hoisted_116","_hoisted_117","_hoisted_119","inactive","_hoisted_120","_hoisted_121","_hoisted_122","_hoisted_123","_hoisted_124","_hoisted_125","_hoisted_126","_hoisted_128","_hoisted_129","_hoisted_131","_hoisted_132","_hoisted_133","placeholder","disabled","_hoisted_135","_hoisted_137","_hoisted_138","_hoisted_139","_hoisted_140","filters","_hoisted_141","_hoisted_142","_hoisted_143","_hoisted_144","_hoisted_145","_hoisted_146","_hoisted_147","_hoisted_148","_hoisted_149","_hoisted_152","_hoisted_153","_hoisted_154","_hoisted_157","_hoisted_158","_hoisted_159","_hoisted_160","_hoisted_162","_hoisted_163","_hoisted_164","_hoisted_166"],"mappings":"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"}