@perevorot/shop 2.0.27 → 2.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("vue"),t=require("vuex"),a=require("vue-toastification"),n={setup:function(){return{translate:window.__}}},o={class:"shop-cart-success-message"};n.render=function(t,a,n,r,l,i){return e.openBlock(),e.createElementBlock("div",o,e.toDisplayString(r.translate("shop.cart.message")),1)};var r=a.useToast(),l={name:"cart-add",props:{id:Number,isChangeQuantity:{type:Boolean,default:!0},isAlreadyInCart:{type:Boolean,default:!0},isSimple:{type:Boolean,default:!1},isPlusMinus:{type:Boolean,default:!1},after:{type:String,default:"modal"}},setup:function(a){var o=t.useStore(),l=e.ref(!1),i=e.ref(1),s=e.ref(null),c=e.computed((function(){return o.getters["cart/productQuantity"](a.id)})),d=a.isAlreadyInCart,u=a.isChangeQuantity,p=a.isPlusMinus;a.isSimple&&(d=!1,u=!1,p=!1);return{button:s,loading:l,quantity:i,add:function(){l.value=!0;var e=[];s.value.closest(".product-main")&&document.querySelectorAll("#options input[type=checkbox]:checked").forEach((function(t){e.push(parseInt(t.value))}));var t=Math.max(1,i.value),c=s.value.closest("[shop-product]"),d=c.querySelector("[shop-product-name]").textContent,u=c.querySelector("[shop-product-price]").childNodes[0].nodeValue.replace(/ /g,""),p=c.dataset.code;o.dispatch("cart/add",{product:{id:a.id,quantity:t,options:e},finally:function(){(l.value=!1,i.value=1,"message"==a.after)&&r({component:n},{type:"success-cart"});var e={event:"addToCart",ecommerce:{currencyCode:"UAH",add:{products:[{name:d,id:p,price:u,quantity:t}]}}};window.dataLayer&&(window.dataLayer.push({ecommerce:null}),window.dataLayer.push(e))}})},remove:function(){l.value=!0,o.dispatch("cart/remove",{id:a.id,finally:function(){l.value=!1}})},cart:c,increase:function(){i.value++},decrease:function(){i.value>1&&i.value--},isAlreadyInCart:d,isChangeQuantity:u,isPlusMinus:p}}},i={class:"cart-add",ref:"button"},s={class:"columns"},c={key:0,class:"column"},d={class:"cart-change-quantity"},u=["disabled"],p=["disabled"],m=["disabled"],y={class:"column is-narrow"},v=["disabled"],f=e.createElementVNode("svg",{class:"icon cart"},[e.createElementVNode("use",{"xlink:href":"#cart-add"})],-1),h={class:"cart-add-button-label"},b={key:0},k=e.createElementVNode("br",null,null,-1),C=["disabled","textContent"];l.render=function(t,a,n,o,r,l){return e.openBlock(),e.createElementBlock("div",i,[e.createElementVNode("div",s,[t.$env.shop.isCustomQuantity&&o.isChangeQuantity?(e.openBlock(),e.createElementBlock("div",c,[e.createElementVNode("div",d,[o.isPlusMinus?(e.openBlock(),e.createElementBlock("button",{key:0,class:"button is-small decrease",onClick:a[0]||(a[0]=function(){return o.decrease&&o.decrease.apply(o,arguments)}),disabled:o.loading||1==o.quantity},"-",8,u)):e.createCommentVNode("v-if",!0),e.withDirectives(e.createElementVNode("input",{class:"input is-small",type:"number",min:"1","onUpdate:modelValue":a[1]||(a[1]=function(e){return o.quantity=e}),disabled:o.loading},null,8,p),[[e.vModelText,o.quantity]]),o.isPlusMinus?(e.openBlock(),e.createElementBlock("button",{key:1,class:"button is-small increase",onClick:a[2]||(a[2]=function(){return o.increase&&o.increase.apply(o,arguments)}),disabled:o.loading},"+",8,m)):e.createCommentVNode("v-if",!0)])])):e.createCommentVNode("v-if",!0),e.createElementVNode("div",y,[e.createElementVNode("button",{class:"button is-link is-small",onClick:a[3]||(a[3]=function(){return o.add&&o.add.apply(o,arguments)}),disabled:o.loading},[e.renderSlot(t.$slots,"default",{label:t.__("shop.cart.add")},(function(){return[f,e.createElementVNode("span",h,e.toDisplayString(t.__("shop.cart.add")),1)]}))],8,v)])]),t.$env.shop.isAlreadyInCart&&o.isAlreadyInCart&&o.cart>0?(e.openBlock(),e.createElementBlock("div",b,[e.createTextVNode(e.toDisplayString(t.__("shop.cart.already",{quantity:o.cart}))+" ",1),k,e.createElementVNode("a",{onClick:a[4]||(a[4]=e.withModifiers((function(){return o.remove&&o.remove.apply(o,arguments)}),["prevent"])),disabled:o.loading,textContent:e.toDisplayString(t.__("shop.cart.remove"))},null,8,C)])):e.createCommentVNode("v-if",!0)],512)},module.exports=l;
1
+ "use strict";var e=require("vue"),t=require("vuex"),a=require("vue-toastification"),n={setup:function(){return{translate:window.__}}},o={class:"shop-cart-success-message"};n.render=function(t,a,n,r,l,i){return e.openBlock(),e.createElementBlock("div",o,e.toDisplayString(r.translate("shop.cart.message")),1)};var r=a.useToast(),l={name:"cart-add",props:{id:Number,isChangeQuantity:{type:Boolean,default:!0},isAlreadyInCart:{type:Boolean,default:!0},isSimple:{type:Boolean,default:!1},isPlusMinus:{type:Boolean,default:!1},after:{type:String,default:"modal"}},setup:function(a){var o=t.useStore(),l=e.ref(!1),i=e.ref(1),c=e.ref(null),s=e.computed((function(){return o.getters["cart/productQuantity"](a.id)})),d=a.isAlreadyInCart,u=a.isChangeQuantity,p=a.isPlusMinus;a.isSimple&&(d=!1,u=!1,p=!1);return{button:c,loading:l,quantity:i,add:function(){l.value=!0;var e=[];c.value.closest(".product-main")&&document.querySelectorAll("#options input[type=checkbox]:checked").forEach((function(t){e.push(parseInt(t.value))}));var t=Math.max(1,i.value),s=c.value.closest("[shop-product]"),d=s.querySelector("[shop-product-name]").textContent,u=s.querySelector("[shop-product-price]").childNodes[0].nodeValue.replace(/ /g,""),p=s.dataset.code;o.dispatch("cart/add",{product:{id:a.id,quantity:t,options:e},finally:function(){(l.value=!1,i.value=1,"message"==a.after)&&r({component:n},{type:"success-cart"});var e={ecommerce:{currencyCode:"UAH",add:{products:[{name:d,id:p,price:u,quantity:t}]}},event:"gtm-ee-event","gtm-ee-event-category":"Ecommerce","gtm-ee-event-action":"Add to Cart","gtm-ee-event-non-interaction":"False"};window.dataLayer&&(window.dataLayer.push({ecommerce:null}),window.dataLayer.push(e))}})},remove:function(){l.value=!0,o.dispatch("cart/remove",{id:a.id,finally:function(){l.value=!1}})},cart:s,increase:function(){i.value++},decrease:function(){i.value>1&&i.value--},isAlreadyInCart:d,isChangeQuantity:u,isPlusMinus:p}}},i={class:"cart-add",ref:"button"},c={class:"columns"},s={key:0,class:"column"},d={class:"cart-change-quantity"},u=["disabled"],p=["disabled"],m=["disabled"],y={class:"column is-narrow"},v=["disabled"],f=e.createElementVNode("svg",{class:"icon cart"},[e.createElementVNode("use",{"xlink:href":"#cart-add"})],-1),h={class:"cart-add-button-label"},g={key:0},b=e.createElementVNode("br",null,null,-1),k=["disabled","textContent"];l.render=function(t,a,n,o,r,l){return e.openBlock(),e.createElementBlock("div",i,[e.createElementVNode("div",c,[t.$env.shop.isCustomQuantity&&o.isChangeQuantity?(e.openBlock(),e.createElementBlock("div",s,[e.createElementVNode("div",d,[o.isPlusMinus?(e.openBlock(),e.createElementBlock("button",{key:0,class:"button is-small decrease",onClick:a[0]||(a[0]=function(){return o.decrease&&o.decrease.apply(o,arguments)}),disabled:o.loading||1==o.quantity},"-",8,u)):e.createCommentVNode("v-if",!0),e.withDirectives(e.createElementVNode("input",{class:"input is-small",type:"number",min:"1","onUpdate:modelValue":a[1]||(a[1]=function(e){return o.quantity=e}),disabled:o.loading},null,8,p),[[e.vModelText,o.quantity]]),o.isPlusMinus?(e.openBlock(),e.createElementBlock("button",{key:1,class:"button is-small increase",onClick:a[2]||(a[2]=function(){return o.increase&&o.increase.apply(o,arguments)}),disabled:o.loading},"+",8,m)):e.createCommentVNode("v-if",!0)])])):e.createCommentVNode("v-if",!0),e.createElementVNode("div",y,[e.createElementVNode("button",{class:"button is-link is-small",onClick:a[3]||(a[3]=function(){return o.add&&o.add.apply(o,arguments)}),disabled:o.loading},[e.renderSlot(t.$slots,"default",{label:t.__("shop.cart.add")},(function(){return[f,e.createElementVNode("span",h,e.toDisplayString(t.__("shop.cart.add")),1)]}))],8,v)])]),t.$env.shop.isAlreadyInCart&&o.isAlreadyInCart&&o.cart>0?(e.openBlock(),e.createElementBlock("div",g,[e.createTextVNode(e.toDisplayString(t.__("shop.cart.already",{quantity:o.cart}))+" ",1),b,e.createElementVNode("a",{onClick:a[4]||(a[4]=e.withModifiers((function(){return o.remove&&o.remove.apply(o,arguments)}),["prevent"])),disabled:o.loading,textContent:e.toDisplayString(t.__("shop.cart.remove"))},null,8,k)])):e.createCommentVNode("v-if",!0)],512)},module.exports=l;
2
2
  //# sourceMappingURL=CartAdd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CartAdd.js","sources":["../../../../src/components/shop/cart/SuccessMessage.vue","../../../../src/components/shop/cart/SuccessMessage.vue?vue&type=template&id=75a41ddb&lang.js","../../../../src/components/shop/cart/CartAdd.vue","../../../../src/components/shop/cart/CartAdd.vue?vue&type=template&id=3f7690d4&lang.js"],"sourcesContent":["<template>\n <div class=\"shop-cart-success-message\">\n {{ translate(\"shop.cart.message\") }}\n </div>\n</template>\n<script>\nexport default {\n setup() {\n const translate = window.__;\n\n return {\n translate,\n };\n },\n};\n</script>","<template>\n <div class=\"shop-cart-success-message\">\n {{ translate(\"shop.cart.message\") }}\n </div>\n</template>\n<script>\nexport default {\n setup() {\n const translate = window.__;\n\n return {\n translate,\n };\n },\n};\n</script>","<template>\n <div class=\"cart-add\" ref=\"button\">\n <div class=\"columns\">\n <div class=\"column\" v-if=\"$env.shop.isCustomQuantity && isChangeQuantity\">\n <div class=\"cart-change-quantity\">\n <button\n class=\"button is-small decrease\"\n @click=\"decrease\"\n :disabled=\"loading || quantity == 1\"\n v-if=\"isPlusMinus\"\n >-</button>\n <input\n class=\"input is-small\"\n type=\"number\"\n min=\"1\"\n v-model=\"quantity\"\n :disabled=\"loading\"\n />\n <button\n class=\"button is-small increase\"\n @click=\"increase\"\n :disabled=\"loading\"\n v-if=\"isPlusMinus\"\n >+</button>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <button class=\"button is-link is-small\" v-on:click=\"add\" :disabled=\"loading\">\n <slot :label=\"__('shop.cart.add')\">\n <svg class=\"icon cart\">\n <use xlink:href=\"#cart-add\" />\n </svg>\n <span class=\"cart-add-button-label\">\n {{\n __(\"shop.cart.add\")\n }}\n </span>\n </slot>\n </button>\n </div>\n </div>\n <div v-if=\"$env.shop.isAlreadyInCart && isAlreadyInCart && cart > 0\">\n {{ __(\"shop.cart.already\", { quantity: cart }) }}\n <br />\n <a v-on:click.prevent=\"remove\" :disabled=\"loading\" v-text=\"__('shop.cart.remove')\"></a>\n </div>\n </div>\n</template>\n<script>\nimport { ref, computed } from \"vue\";\nimport { useStore } from \"vuex\";\nimport { useToast } from \"vue-toastification\";\nimport SuccessMessage from \"./SuccessMessage.vue\";\n\nconst toast = useToast();\n\nexport default {\n name: 'cart-add',\n props: {\n id: Number,\n isChangeQuantity: {\n type: Boolean,\n default: true,\n },\n isAlreadyInCart: {\n type: Boolean,\n default: true,\n },\n isSimple: {\n type: Boolean,\n default: false,\n },\n isPlusMinus: {\n type: Boolean,\n default: false,\n },\n after: {\n type: String,\n default: \"modal\",\n },\n },\n setup(props) {\n const store = useStore();\n const loading = ref(false);\n const quantity = ref(1);\n const button = ref(null);\n\n const cart = computed(() =>\n store.getters[\"cart/productQuantity\"](props.id)\n );\n\n let isAlreadyInCart = props.isAlreadyInCart;\n let isChangeQuantity = props.isChangeQuantity;\n let isPlusMinus = props.isPlusMinus;\n\n if (props.isSimple) {\n isAlreadyInCart = false;\n isChangeQuantity = false;\n isPlusMinus = false;\n }\n\n const add = () => {\n loading.value = true;\n\n let options = [];\n\n if (button.value.closest('.product-main')) {\n const checkedOptions = document.querySelectorAll(\n \"#options input[type=checkbox]:checked\"\n );\n\n checkedOptions.forEach((element) => {\n options.push(parseInt(element.value));\n });\n }\n\n const q = Math.max(1, quantity.value);\n const product = button.value.closest('[shop-product]');\n const name = product.querySelector('[shop-product-name]').textContent;\n const price = product.querySelector('[shop-product-price]').childNodes[0].nodeValue.replace(/ /g, '');\n const code = product.dataset.code;\n\n store.dispatch(\"cart/add\", {\n product: {\n id: props.id,\n quantity: q,\n options: options,\n },\n finally: () => {\n loading.value = false;\n quantity.value = 1;\n\n if (props.after == \"message\") {\n const component = {\n component: SuccessMessage,\n };\n\n toast(component, {\n type: \"success-cart\",\n });\n }\n\n const object = {\n 'event': 'addToCart',\n 'ecommerce': {\n 'currencyCode': 'UAH',\n 'add': {\n 'products': [{\n 'name': name,\n 'id': code,\n 'price': price,\n 'quantity': q\n }]\n }\n }\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n },\n });\n };\n\n const remove = () => {\n loading.value = true;\n\n store.dispatch(\"cart/remove\", {\n id: props.id,\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n const increase = () => {\n quantity.value++;\n };\n\n const decrease = () => {\n if (quantity.value > 1) {\n quantity.value--;\n }\n };\n\n return {\n button,\n loading,\n quantity,\n add,\n remove,\n cart,\n increase,\n decrease,\n isAlreadyInCart,\n isChangeQuantity,\n isPlusMinus,\n };\n },\n};\n</script>","<template>\n <div class=\"cart-add\" ref=\"button\">\n <div class=\"columns\">\n <div class=\"column\" v-if=\"$env.shop.isCustomQuantity && isChangeQuantity\">\n <div class=\"cart-change-quantity\">\n <button\n class=\"button is-small decrease\"\n @click=\"decrease\"\n :disabled=\"loading || quantity == 1\"\n v-if=\"isPlusMinus\"\n >-</button>\n <input\n class=\"input is-small\"\n type=\"number\"\n min=\"1\"\n v-model=\"quantity\"\n :disabled=\"loading\"\n />\n <button\n class=\"button is-small increase\"\n @click=\"increase\"\n :disabled=\"loading\"\n v-if=\"isPlusMinus\"\n >+</button>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <button class=\"button is-link is-small\" v-on:click=\"add\" :disabled=\"loading\">\n <slot :label=\"__('shop.cart.add')\">\n <svg class=\"icon cart\">\n <use xlink:href=\"#cart-add\" />\n </svg>\n <span class=\"cart-add-button-label\">\n {{\n __(\"shop.cart.add\")\n }}\n </span>\n </slot>\n </button>\n </div>\n </div>\n <div v-if=\"$env.shop.isAlreadyInCart && isAlreadyInCart && cart > 0\">\n {{ __(\"shop.cart.already\", { quantity: cart }) }}\n <br />\n <a v-on:click.prevent=\"remove\" :disabled=\"loading\" v-text=\"__('shop.cart.remove')\"></a>\n </div>\n </div>\n</template>\n<script>\nimport { ref, computed } from \"vue\";\nimport { useStore } from \"vuex\";\nimport { useToast } from \"vue-toastification\";\nimport SuccessMessage from \"./SuccessMessage.vue\";\n\nconst toast = useToast();\n\nexport default {\n name: 'cart-add',\n props: {\n id: Number,\n isChangeQuantity: {\n type: Boolean,\n default: true,\n },\n isAlreadyInCart: {\n type: Boolean,\n default: true,\n },\n isSimple: {\n type: Boolean,\n default: false,\n },\n isPlusMinus: {\n type: Boolean,\n default: false,\n },\n after: {\n type: String,\n default: \"modal\",\n },\n },\n setup(props) {\n const store = useStore();\n const loading = ref(false);\n const quantity = ref(1);\n const button = ref(null);\n\n const cart = computed(() =>\n store.getters[\"cart/productQuantity\"](props.id)\n );\n\n let isAlreadyInCart = props.isAlreadyInCart;\n let isChangeQuantity = props.isChangeQuantity;\n let isPlusMinus = props.isPlusMinus;\n\n if (props.isSimple) {\n isAlreadyInCart = false;\n isChangeQuantity = false;\n isPlusMinus = false;\n }\n\n const add = () => {\n loading.value = true;\n\n let options = [];\n\n if (button.value.closest('.product-main')) {\n const checkedOptions = document.querySelectorAll(\n \"#options input[type=checkbox]:checked\"\n );\n\n checkedOptions.forEach((element) => {\n options.push(parseInt(element.value));\n });\n }\n\n const q = Math.max(1, quantity.value);\n const product = button.value.closest('[shop-product]');\n const name = product.querySelector('[shop-product-name]').textContent;\n const price = product.querySelector('[shop-product-price]').childNodes[0].nodeValue.replace(/ /g, '');\n const code = product.dataset.code;\n\n store.dispatch(\"cart/add\", {\n product: {\n id: props.id,\n quantity: q,\n options: options,\n },\n finally: () => {\n loading.value = false;\n quantity.value = 1;\n\n if (props.after == \"message\") {\n const component = {\n component: SuccessMessage,\n };\n\n toast(component, {\n type: \"success-cart\",\n });\n }\n\n const object = {\n 'event': 'addToCart',\n 'ecommerce': {\n 'currencyCode': 'UAH',\n 'add': {\n 'products': [{\n 'name': name,\n 'id': code,\n 'price': price,\n 'quantity': q\n }]\n }\n }\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n },\n });\n };\n\n const remove = () => {\n loading.value = true;\n\n store.dispatch(\"cart/remove\", {\n id: props.id,\n finally: () => {\n loading.value = false;\n },\n });\n };\n\n const increase = () => {\n quantity.value++;\n };\n\n const decrease = () => {\n if (quantity.value > 1) {\n quantity.value--;\n }\n };\n\n return {\n button,\n loading,\n quantity,\n add,\n remove,\n cart,\n increase,\n decrease,\n isAlreadyInCart,\n isChangeQuantity,\n isPlusMinus,\n };\n },\n};\n</script>"],"names":["setup","translate","window","__","_createElementBlock","_hoisted_1","$setup","toast","useToast","name","props","id","Number","isChangeQuantity","type","Boolean","isAlreadyInCart","isSimple","isPlusMinus","after","String","store","useStore","loading","ref","quantity","button","cart","computed","getters","add","value","options","closest","document","querySelectorAll","forEach","element","push","parseInt","q","Math","max","product","querySelector","textContent","price","childNodes","nodeValue","replace","code","dataset","dispatch","component","SuccessMessage","object","dataLayer","ecommerce","remove","increase","decrease","_createElementVNode","_hoisted_2","_ctx","shop","isCustomQuantity","_hoisted_3","_hoisted_4","onClick","disabled","min","_hoisted_8","_renderSlot","label","_hoisted_10","_hoisted_11","_hoisted_13","_toDisplayString"],"mappings":"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"}
1
+ {"version":3,"file":"CartAdd.js","sources":["../../../../src/components/shop/cart/SuccessMessage.vue","../../../../src/components/shop/cart/SuccessMessage.vue?vue&type=template&id=75a41ddb&lang.js","../../../../src/components/shop/cart/CartAdd.vue","../../../../src/components/shop/cart/CartAdd.vue?vue&type=template&id=cd5783a4&lang.js"],"sourcesContent":["<template>\n <div class=\"shop-cart-success-message\">\n {{ translate(\"shop.cart.message\") }}\n </div>\n</template>\n<script>\nexport default {\n setup() {\n const translate = window.__;\n\n return {\n translate,\n };\n },\n};\n</script>","<template>\n <div class=\"shop-cart-success-message\">\n {{ translate(\"shop.cart.message\") }}\n </div>\n</template>\n<script>\nexport default {\n setup() {\n const translate = window.__;\n\n return {\n translate,\n };\n },\n};\n</script>","<template>\n <div class=\"cart-add\" ref=\"button\">\n <div class=\"columns\">\n <div class=\"column\" v-if=\"$env.shop.isCustomQuantity && isChangeQuantity\">\n <div class=\"cart-change-quantity\">\n <button class=\"button is-small decrease\" @click=\"decrease\" :disabled=\"loading || quantity == 1\" v-if=\"isPlusMinus\">-</button>\n <input class=\"input is-small\" type=\"number\" min=\"1\" v-model=\"quantity\" :disabled=\"loading\" />\n <button class=\"button is-small increase\" @click=\"increase\" :disabled=\"loading\" v-if=\"isPlusMinus\">+</button>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <button class=\"button is-link is-small\" v-on:click=\"add\" :disabled=\"loading\">\n <slot :label=\"__('shop.cart.add')\">\n <svg class=\"icon cart\">\n <use xlink:href=\"#cart-add\" />\n </svg>\n <span class=\"cart-add-button-label\">\n {{ __('shop.cart.add') }}\n </span>\n </slot>\n </button>\n </div>\n </div>\n <div v-if=\"$env.shop.isAlreadyInCart && isAlreadyInCart && cart > 0\">\n {{ __('shop.cart.already', { quantity: cart }) }}\n <br />\n <a v-on:click.prevent=\"remove\" :disabled=\"loading\" v-text=\"__('shop.cart.remove')\"></a>\n </div>\n </div>\n</template>\n<script>\nimport { ref, computed } from 'vue';\nimport { useStore } from 'vuex';\nimport { useToast } from 'vue-toastification';\nimport SuccessMessage from './SuccessMessage.vue';\n\nconst toast = useToast();\n\nexport default {\n name: 'cart-add',\n props: {\n id: Number,\n isChangeQuantity: {\n type: Boolean,\n default: true\n },\n isAlreadyInCart: {\n type: Boolean,\n default: true\n },\n isSimple: {\n type: Boolean,\n default: false\n },\n isPlusMinus: {\n type: Boolean,\n default: false\n },\n after: {\n type: String,\n default: 'modal'\n }\n },\n setup(props) {\n const store = useStore();\n const loading = ref(false);\n const quantity = ref(1);\n const button = ref(null);\n\n const cart = computed(() => store.getters['cart/productQuantity'](props.id));\n\n let isAlreadyInCart = props.isAlreadyInCart;\n let isChangeQuantity = props.isChangeQuantity;\n let isPlusMinus = props.isPlusMinus;\n\n if (props.isSimple) {\n isAlreadyInCart = false;\n isChangeQuantity = false;\n isPlusMinus = false;\n }\n\n const add = () => {\n loading.value = true;\n\n let options = [];\n\n if (button.value.closest('.product-main')) {\n const checkedOptions = document.querySelectorAll('#options input[type=checkbox]:checked');\n\n checkedOptions.forEach((element) => {\n options.push(parseInt(element.value));\n });\n }\n\n const q = Math.max(1, quantity.value);\n const product = button.value.closest('[shop-product]');\n const name = product.querySelector('[shop-product-name]').textContent;\n const price = product.querySelector('[shop-product-price]').childNodes[0].nodeValue.replace(/ /g, '');\n const code = product.dataset.code;\n\n store.dispatch('cart/add', {\n product: {\n id: props.id,\n quantity: q,\n options: options\n },\n finally: () => {\n loading.value = false;\n quantity.value = 1;\n\n if (props.after == 'message') {\n const component = {\n component: SuccessMessage\n };\n\n toast(component, {\n type: 'success-cart'\n });\n }\n\n const object = {\n ecommerce: {\n currencyCode: 'UAH',\n add: {\n products: [\n {\n name: name,\n id: code,\n price: price,\n quantity: q\n }\n ]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Add to Cart',\n 'gtm-ee-event-non-interaction': 'False'\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n });\n };\n\n const remove = () => {\n loading.value = true;\n\n store.dispatch('cart/remove', {\n id: props.id,\n finally: () => {\n loading.value = false;\n }\n });\n };\n\n const increase = () => {\n quantity.value++;\n };\n\n const decrease = () => {\n if (quantity.value > 1) {\n quantity.value--;\n }\n };\n\n return {\n button,\n loading,\n quantity,\n add,\n remove,\n cart,\n increase,\n decrease,\n isAlreadyInCart,\n isChangeQuantity,\n isPlusMinus\n };\n }\n};\n</script>","<template>\n <div class=\"cart-add\" ref=\"button\">\n <div class=\"columns\">\n <div class=\"column\" v-if=\"$env.shop.isCustomQuantity && isChangeQuantity\">\n <div class=\"cart-change-quantity\">\n <button class=\"button is-small decrease\" @click=\"decrease\" :disabled=\"loading || quantity == 1\" v-if=\"isPlusMinus\">-</button>\n <input class=\"input is-small\" type=\"number\" min=\"1\" v-model=\"quantity\" :disabled=\"loading\" />\n <button class=\"button is-small increase\" @click=\"increase\" :disabled=\"loading\" v-if=\"isPlusMinus\">+</button>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <button class=\"button is-link is-small\" v-on:click=\"add\" :disabled=\"loading\">\n <slot :label=\"__('shop.cart.add')\">\n <svg class=\"icon cart\">\n <use xlink:href=\"#cart-add\" />\n </svg>\n <span class=\"cart-add-button-label\">\n {{ __('shop.cart.add') }}\n </span>\n </slot>\n </button>\n </div>\n </div>\n <div v-if=\"$env.shop.isAlreadyInCart && isAlreadyInCart && cart > 0\">\n {{ __('shop.cart.already', { quantity: cart }) }}\n <br />\n <a v-on:click.prevent=\"remove\" :disabled=\"loading\" v-text=\"__('shop.cart.remove')\"></a>\n </div>\n </div>\n</template>\n<script>\nimport { ref, computed } from 'vue';\nimport { useStore } from 'vuex';\nimport { useToast } from 'vue-toastification';\nimport SuccessMessage from './SuccessMessage.vue';\n\nconst toast = useToast();\n\nexport default {\n name: 'cart-add',\n props: {\n id: Number,\n isChangeQuantity: {\n type: Boolean,\n default: true\n },\n isAlreadyInCart: {\n type: Boolean,\n default: true\n },\n isSimple: {\n type: Boolean,\n default: false\n },\n isPlusMinus: {\n type: Boolean,\n default: false\n },\n after: {\n type: String,\n default: 'modal'\n }\n },\n setup(props) {\n const store = useStore();\n const loading = ref(false);\n const quantity = ref(1);\n const button = ref(null);\n\n const cart = computed(() => store.getters['cart/productQuantity'](props.id));\n\n let isAlreadyInCart = props.isAlreadyInCart;\n let isChangeQuantity = props.isChangeQuantity;\n let isPlusMinus = props.isPlusMinus;\n\n if (props.isSimple) {\n isAlreadyInCart = false;\n isChangeQuantity = false;\n isPlusMinus = false;\n }\n\n const add = () => {\n loading.value = true;\n\n let options = [];\n\n if (button.value.closest('.product-main')) {\n const checkedOptions = document.querySelectorAll('#options input[type=checkbox]:checked');\n\n checkedOptions.forEach((element) => {\n options.push(parseInt(element.value));\n });\n }\n\n const q = Math.max(1, quantity.value);\n const product = button.value.closest('[shop-product]');\n const name = product.querySelector('[shop-product-name]').textContent;\n const price = product.querySelector('[shop-product-price]').childNodes[0].nodeValue.replace(/ /g, '');\n const code = product.dataset.code;\n\n store.dispatch('cart/add', {\n product: {\n id: props.id,\n quantity: q,\n options: options\n },\n finally: () => {\n loading.value = false;\n quantity.value = 1;\n\n if (props.after == 'message') {\n const component = {\n component: SuccessMessage\n };\n\n toast(component, {\n type: 'success-cart'\n });\n }\n\n const object = {\n ecommerce: {\n currencyCode: 'UAH',\n add: {\n products: [\n {\n name: name,\n id: code,\n price: price,\n quantity: q\n }\n ]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Add to Cart',\n 'gtm-ee-event-non-interaction': 'False'\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n });\n };\n\n const remove = () => {\n loading.value = true;\n\n store.dispatch('cart/remove', {\n id: props.id,\n finally: () => {\n loading.value = false;\n }\n });\n };\n\n const increase = () => {\n quantity.value++;\n };\n\n const decrease = () => {\n if (quantity.value > 1) {\n quantity.value--;\n }\n };\n\n return {\n button,\n loading,\n quantity,\n add,\n remove,\n cart,\n increase,\n decrease,\n isAlreadyInCart,\n isChangeQuantity,\n isPlusMinus\n };\n }\n};\n</script>"],"names":["setup","translate","window","__","_createElementBlock","_hoisted_1","$setup","toast","useToast","name","props","id","Number","isChangeQuantity","type","Boolean","isAlreadyInCart","isSimple","isPlusMinus","after","String","store","useStore","loading","ref","quantity","button","cart","computed","getters","add","value","options","closest","document","querySelectorAll","forEach","element","push","parseInt","q","Math","max","product","querySelector","textContent","price","childNodes","nodeValue","replace","code","dataset","dispatch","component","SuccessMessage","object","ecommerce","currencyCode","products","event","dataLayer","remove","increase","decrease","_createElementVNode","_hoisted_2","_ctx","shop","isCustomQuantity","_hoisted_3","_hoisted_4","onClick","disabled","min","_hoisted_8","_renderSlot","label","_hoisted_10","_hoisted_11","_hoisted_13","_toDisplayString"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("vue"),t=require("@perevorot/shop/dist/helpers"),n=require("vuex"),o=require("formvuelate"),l=require("@formvuelate/plugin-vee-validate"),a=require("@perevorot/shop/dist/forms/FormText"),i=require("yup"),r=require("vue-toastification");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var u=c(l),m=c(a),d=s(i),p=e.defineComponent({name:"CheckoutItem",props:{item:Object},setup:function(t){var n=e.computed((function(){return t.item.attributes.options&&t.item.attributes.options.length?t.item.attributes.options:[]}));return{itemOptions:e.computed((function(){return t.item.options&&t.item.options.length?t.item.options.filter((function(e){return-1!==n.value.indexOf(e.id)})):[]}))}}}),v={key:0,class:"column is-12"},f=[e.createElementVNode("div",{class:"bundle-title"},"Вместе дешевле",-1)],h={class:"column name"},k={class:"column is-narrow"},g=["href"],E=["src"],V={key:1},N=[e.createElementVNode("use",{"xlink:href":"#logo"},null,-1)],y={class:"column"},b={class:"columns is-gapless mb-0"},B={class:"column"},C={key:0,class:"code"},w={class:"title"},T=["href"],x={class:"column is-2 has-text-centered is-relative"},_={class:"quantity"},S={key:0,class:"quantity-price"},M=["innerHTML"],L=e.createTextVNode(" / шт"),D={class:"column is-2 has-text-right"},H=["innerHTML"],q=["innerHTML"],O=["innerHTML"],$={key:0,class:"options is-toggled"},F={class:"toggler"},z={class:"wrapper"},R={class:"column"},P={class:"option-title"},j={class:"column is-2 has-text-right"},J=e.createTextVNode("+"),U=["innerHTML"],I={key:0,class:"bundle columns"},A={class:"column is-narrow"},G=e.createElementVNode("svg",{class:"bundle-icon"},[e.createElementVNode("use",{"xlink:href":"#bundle-plus"})],-1),K=["href"],Q=["src"],W={key:1},X=[e.createElementVNode("use",{"xlink:href":"#logo"},null,-1)],Y={class:"column"},Z={key:0,class:"code"},ee={class:"title"},te=["href"],ne={key:1,class:"bundle columns"},oe={class:"column is-narrow"},le=e.createElementVNode("svg",{class:"bundle-icon"},[e.createElementVNode("use",{"xlink:href":"#bundle-plus"})],-1),ae=["href"],ie=["src"],re={key:1},ce=[e.createElementVNode("use",{"xlink:href":"#logo"},null,-1)],se={class:"column"},ue={key:0,class:"code"},me={class:"title"},de=["href"];p.render=function(t,n,o,l,a,i){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["columns is-multiline shop-cart-item",{"is-bundle":t.item.attributes.bundle}])},[t.item.attributes.bundle?(e.openBlock(),e.createElementBlock("div",v,f)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",h,[e.createElementVNode("div",{class:e.normalizeClass(["columns",{"mb-0":t.item.attributes.bundle}])},[e.createElementVNode("div",k,[e.createElementVNode("a",{href:t.item.attributes.href},[e.createElementVNode("figure",{class:e.normalizeClass(["image is-square",{"no-thumb":!t.item.attributes.image}])},[t.item.attributes.image?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.item.attributes.image},null,8,E)):(e.openBlock(),e.createElementBlock("svg",V,N))],2)],8,g)]),e.createElementVNode("div",y,[e.createElementVNode("div",b,[e.createElementVNode("div",B,[t.item.attributes.code?(e.openBlock(),e.createElementBlock("div",C,"Код продукта: "+e.toDisplayString(t.item.attributes.code),1)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",w,[e.createElementVNode("a",{href:t.item.attributes.href},e.toDisplayString(t.item.name),9,T)])]),e.createElementVNode("div",x,[e.createElementVNode("div",_,"⨉ "+e.toDisplayString(t.item.quantity),1),parseInt(t.item.quantity)>1?(e.openBlock(),e.createElementBlock("div",S,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.item.attributes.price)},null,8,M),L])):e.createCommentVNode("v-if",!0)]),e.createElementVNode("div",D,[e.createElementVNode("div",{class:e.normalizeClass(["price",{"bundle-price":t.item.attributes.bundle}])},[t.item.attributes.priceOld?(e.openBlock(),e.createElementBlock("div",{key:0,class:"price-old",innerHTML:t.$filters.price(t.item.attributes.priceOld*t.item.quantity)},null,8,H)):e.createCommentVNode("v-if",!0),t.item.attributes.bundle&&t.item.attributes.amount?(e.openBlock(),e.createElementBlock("div",{key:1,class:"bundle-amount",innerHTML:"Выгода "+(t.item.attributes.amount.percent?t.item.attributes.amount.percent+"%":t.$filters.price(t.item.attributes.amount.sum*t.item.quantity))},null,8,q)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",{innerHTML:t.$filters.price(t.item.attributes.price*t.item.quantity)},null,8,O)],2)])]),t.itemOptions&&t.itemOptions.length?(e.openBlock(),e.createElementBlock("div",$,[e.createElementVNode("div",F,[e.createElementVNode("span",null,"Дополнительные услуги, "+e.toDisplayString(t.itemOptions.length),1)]),e.createElementVNode("div",z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.itemOptions,(function(n,o){return e.openBlock(),e.createElementBlock("div",{key:o,class:"columns is-checked"},[e.createElementVNode("div",R,[e.createElementVNode("div",P,e.toDisplayString(n.name),1)]),e.createElementVNode("div",j,[J,e.createElementVNode("span",{innerHTML:t.$filters.price(n.price)},null,8,U)])])})),128))])])):e.createCommentVNode("v-if",!0)])],2),t.item.attributes.bundle?(e.openBlock(),e.createElementBlock("div",I,[e.createElementVNode("div",A,[G,e.createElementVNode("a",{href:t.item.attributes.second.href},[e.createElementVNode("figure",{class:e.normalizeClass(["image is-square",{"no-thumb":!t.item.attributes.second.image}])},[t.item.attributes.second.image?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.item.attributes.second.image},null,8,Q)):(e.openBlock(),e.createElementBlock("svg",W,X))],2)],8,K)]),e.createElementVNode("div",Y,[t.item.attributes.second.code?(e.openBlock(),e.createElementBlock("div",Z,"Код продукта: "+e.toDisplayString(t.item.attributes.second.code),1)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",ee,[e.createElementVNode("a",{href:t.item.attributes.second.href},e.toDisplayString(t.item.attributes.second.name),9,te)])])])):e.createCommentVNode("v-if",!0),t.item.attributes.bundle&&t.item.attributes.third?(e.openBlock(),e.createElementBlock("div",ne,[e.createElementVNode("div",oe,[le,e.createElementVNode("a",{href:t.item.attributes.third.href},[e.createElementVNode("figure",{class:e.normalizeClass(["image is-square",{"no-thumb":!t.item.attributes.third.image}])},[t.item.attributes.third.image?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.item.attributes.third.image},null,8,ie)):(e.openBlock(),e.createElementBlock("svg",re,ce))],2)],8,ae)]),e.createElementVNode("div",se,[t.item.attributes.third.code?(e.openBlock(),e.createElementBlock("div",ue,"Код продукта: "+e.toDisplayString(t.item.attributes.third.code),1)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",me,[e.createElementVNode("a",{href:t.item.attributes.third.href},e.toDisplayString(t.item.attributes.third.name),9,de)])])])):e.createCommentVNode("v-if",!0)])],2)},e.markRaw(m.default);var pe=o.SchemaFormFactory([u.default({})]);window.viewedSwiperOptions={slidesPerView:"auto",freeMode:!0,slideClass:"product",mousewheel:{forceToAxis:!0},navigation:{nextEl:".next",prevEl:".prev"},observer:!0,observeParents:!0};var ve=e.defineComponent({components:{CheckoutItem:p,SchemaForm:pe},name:"order-checkout",setup:function(){var l=r.useToast(),a=n.useStore(),i=e.ref(!1),c=e.computed((function(){return a.getters["cart/quantity"]})),s=e.computed((function(){return a.getters["cart/items"]})),u=e.computed((function(){return a.getters["cart/total"]})),p=e.computed((function(){return a.getters["auth/is"]})),v=e.computed((function(){return a.getters["checkout/user"]})),f=e.ref(!0),h=e.ref(null),k=e.ref(!1),g=e.ref(null),E=e.ref({}),V=e.ref([]),N=e.ref([]),y=e.ref("new"),b=e.ref(null),B=e.computed((function(){return a.getters["checkout/shippingData"]})),C=e.ref(!1),w=e.computed({get:function(){return a.getters["checkout/dontcall"]},set:function(e){a.commit("checkout/dontcall",e)}}),T=e.computed({get:function(){var e=a.getters["checkout/comment"];return e&&(C.value=!0),e},set:function(e){a.commit("checkout/comment",e)}});e.watch(T,(function(e){e.length>1e3&&(T.value=T.value.substring(0,1e3))}));var x=function(t){return e.computed({get:function(){return v.value[t]},set:function(e){var n=JSON.parse(JSON.stringify(v.value));n[t]=e,a.commit("checkout/user",n)}})},_=e.ref({last_name:x("last_name"),name:x("name"),email:x("email"),phone:x("phone")});a.dispatch("auth/me",{finally:function(){}});var S=e.computed({get:function(){return a.getters["checkout/shipping"]},set:function(e){a.commit("checkout/shipping",e)}}),M=e.computed({get:function(){return a.getters["checkout/payment"]},set:function(e){a.commit("checkout/payment",e)}}),L=e.computed((function(){return S.value?V.value.find((function(e){return e.id==S.value})):{}})),D=e.computed((function(){return M.value?N.value.find((function(e){return e.id==M.value})):{}})),H=e.computed((function(){return z(V.value,S.value)})),q=e.computed((function(){return z(N.value,M.value)})),O=e.computed((function(){return R(V.value)})),$=e.computed((function(){return R(N.value)})),F=e.computed((function(){var e=[];return s.value.forEach((function(t){-1===e.indexOf(t.category_id)&&e.push(t.category_id)})),e})),z=function(e,t){var n=0;if(t){var o=e.find((function(e){return e.id==t}));o&&(n="sum"==o.type?o.amount:Math.round(u.value*o.amount/100))}return n},R=function(e){var t=[];return e.forEach((function(e){if(e.restrictions&&Object.keys(e.restrictions).length){var n=!0,o=e.restrictions;o.price_min&&o.price_max?(n=u.value>=o.price_min&&u.value<=o.price_max,e.restrictedForce=!n):o.price_min?(n=u.value>=o.price_min,e.restrictedForce=!n):o.price_max&&(n=u.value<=o.price_max,e.restrictedForce=!n),n&&S.value&&o.shipping_type&&o.shipping_type.length&&(n=-1!==o.shipping_type.indexOf(S.value)),n&&M.value&&o.payment_method&&o.payment_method.length&&(n=-1!==o.payment_method.indexOf(M.value)),n&&o.categories&&o.categories.length&&(n=!F.value.filter((function(e){return!o.categories.includes(e)})).length,e.restrictedForce=!n),e.restricted=!n}else e.restricted=!1;e.restrictedForce||t.push(e)})),t},P=e.computed((function(){var e=0;return s.value.forEach((function(t){var n=0;t.attributes.priceOld&&(n=t.attributes.priceOld-t.attributes.price),e+=n*t.quantity})),e}));$http.post(window.location.href).then((function(e){V.value=e.data.shipping,N.value=e.data.payment})),e.watch(y,(function(e){"login"==e&&a.commit("auth/modal","login")}));var j=e.ref({last_name:{component:m.default,label:__("auth.registration.form.last_name"),model:"last_name"},name:{component:m.default,label:__("auth.registration.form.name"),model:"first_name"},phone:{component:m.default,label:__("auth.registration.form.phone"),model:"phone",mask:"(###) ###-##-##",type:"phone"},email:{component:m.default,label:__("auth.login.form.email"),model:"email"}});o.useSchemaForm(_);var J=d.object().shape({last_name:d.string().trim().required(__("auth.validation.required")),name:d.string().trim().required(__("auth.validation.required")),phone:d.string().required(__("auth.validation.phone")).matches(/^\(\d{3}\) \d{3}\-\d{2}\-\d{2}$/,__("auth.validation.phone")),email:d.string().trim().email(__("auth.validation.email")).required(__("auth.validation.required"))});window.addEventListener("beforeunload",(function(){a.commit("auth/modal",null)}));var U=function(){a.commit("checkout/reset")};return{auth:p,userType:y,facebook:function(){window.location.href=$ziggy("auth.login.social",{provider:"facebook"})},google:function(){window.location.href=$ziggy("auth.login.social",{provider:"google"})},loginCallback:function(){y.value="new"},quantity:c,items:s,loading:i,pluralize:t.pluralize,discount:P,total:u,shipping:S,shippingPrice:H,payment:M,fee:q,userValidation:J,userSchema:j,userSubmitButton:b,checkout:function(){J.isValid(_.value).then((function(e){if(e)if(S.value)if(B.value[L.value.code]&&B.value[L.value.code].isValid)if(M.value){var t=JSON.parse(JSON.stringify(B.value[L.value.code]));delete t.isValid;var n={checkout:!0,user:{last_name:_.value.last_name,name:_.value.name,phone:_.value.phone,email:_.value.email},shipping:{id:S.value,data:t},payment:{id:M.value},comment:T.value,dontcall:w.value};i.value=!0,$http.post(window.location.href,n).then((function(e){if(e.data.redirect)E.value={url:e.data.redirect.url,data:e.data.redirect.data};else{var t=[];s.value.forEach((function(e){t.push({name:e.name,id:e.attributes.code,price:e.attributes.price,brand:e.attributes.brand,category:e.attributes.category,quantity:e.quantity})}));var n={ecommerce:{purchase:{actionField:{id:e.data.order.id,affiliation:"mrfix.ua",revenue:u.value+q.value+H.value,tax:"0",shipping:H.value},products:[t]}}};window.dataLayer&&(window.dataLayer.push({ecommerce:null}),window.dataLayer.push(n))}k.value=!0,g.value=e.data.order,U()})).catch((function(e){l("Ошибка сохранения заказа",{type:"error"}),console.error(e)})).finally((function(){i.value=!1}))}else l("Выберите вид оплаты",{type:"error"});else l("Заполните все поля для доставки: «"+L.value.name+"»",{type:"error"});else l("Выберите способ доставки",{type:"error"});else y.value="new",b.value.click(),l("Заполните данные получателя заказа",{type:"error"})}))},ifCheckoutReady:f,validate:function(){J.isValid(_.value).then((function(e){f.value=e&&M.value&&S.value&&(!L.value.component||L.value.component&&B.value[L.value.code]&&B.value[L.value.code].isValid)}))},shippingTypesRestricted:O,paymentMethodsRestricted:$,toggleShippingRadio:function(e){S.value===e&&(S.value=null)},togglePaymentRadio:function(e){M.value===e&&(M.value=null)},shippingSelected:L,paymentSelected:D,shippingComponentData:B,shippingStoreData:function(e,t,n){var o=JSON.parse(JSON.stringify(B.value));t.isValid=n,o[e]=t,a.commit("checkout/shippingData",o)},resertStore:U,user:_,dontcall:w,comment:T,isCommentToggled:C,commentMaxLength:1e3,userCheckout:v,thanks:k,order:g,redirect:E,redirectForm:h,home:function(){window.location.href=$env.locale.url?$env.locale.url:"/"}}}}),fe={class:"cart checkout"},he=["action"],ke=["name","value"],ge={key:1,class:"items-wrapper"},Ee=e.createElementVNode("div",{class:"checkout-title"},"Оформление заказа",-1),Ve={class:"columns"},Ne={class:"column"},ye={class:"checkout-block items"},be={class:"title-row"},Be={class:"items-title"},Ce=e.createTextVNode(" Ваш заказ "),we=["textContent"],Te=["innerHTML"],xe=["onClick"],_e=[e.createElementVNode("svg",null,[e.createElementVNode("use",{"xlink:href":"#cart-edit"})],-1),e.createElementVNode("span",null,"Редактировать заказ",-1)],Se={class:"checkout-block"},Me={class:"wrapper"},Le=e.createElementVNode("div",{class:"items-title"},"Контактные даные получателя заказа",-1),De={key:0,class:"user-tabs"},He=e.createTextVNode(" Я новый клиент "),qe=e.createTextVNode(" Я постоянный клиент "),Oe={class:"columns"},$e={class:"column user-form"},Fe={type:"submit",ref:"userSubmitButton",class:"is-hidden"},ze={class:"column user-login user-form"},Re={class:"column"},Pe={key:0,class:"social-auth"},je={class:"socials"},Je=e.createElementVNode("div",{class:"description"},"Или авторизируйтесь через социальные сети:",-1),Ue={class:"buttons"},Ie=[e.createElementVNode("svg",{class:"icon fb-btn"},[e.createElementVNode("use",{"xlink:href":"#logo-facebook-icon"})],-1),e.createElementVNode("span",null,"Facebook",-1)],Ae=[e.createElementVNode("svg",{class:"icon google-btn"},[e.createElementVNode("use",{"xlink:href":"#logo-google-icon"})],-1),e.createElementVNode("span",null,"Google",-1)],Ge={class:"wrapper"},Ke={class:"rows"},Qe={class:"item"},We={class:"row"},Xe=e.createElementVNode("div",{class:"info"},[e.createElementVNode("div",{class:"items-title mb-1"},"Доставка")],-1),Ye={class:"row"},Ze={class:"info"},et=["value","onClick"],tt=["src"],nt={key:1,class:"icon"},ot=[e.createElementVNode("use",{"xlink:href":"#shipping"},null,-1)],lt={key:0,class:"description"},at={class:"value"},it={key:0,class:"green"},rt=["innerHTML"],ct={class:"wrapper"},st={class:"rows"},ut={class:"item"},mt={class:"row"},dt=e.createElementVNode("div",{class:"info"},[e.createElementVNode("div",{class:"items-title mb-1"},"Оплата")],-1),pt={class:"row no-icon"},vt={class:"info"},ft=["value","onClick"],ht={key:0,class:"description"},kt={key:0,class:"value"},gt=["innerHTML"],Et={class:"column is-4"},Vt={class:"checkout-block summary"},Nt=e.createElementVNode("div",{class:"items-title"},"Итого",-1),yt={class:"rows"},bt={class:"row"},Bt={class:"info"},Ct=["textContent"],wt=e.createTextVNode(" на сумму "),Tt={class:"value"},xt=["innerHTML"],_t={key:0,class:"row"},St=e.createElementVNode("div",{class:"info"},"Скидка",-1),Mt={class:"value"},Lt=["innerHTML"],Dt={key:1,class:"row"},Ht=e.createElementVNode("div",{class:"info"},"Сервисный сбор",-1),qt={class:"value"},Ot=["innerHTML"],$t={key:2,class:"row"},Ft=e.createElementVNode("div",{class:"info"},"Стоимость доставки",-1),zt={class:"value"},Rt=["innerHTML"],Pt={key:1,class:"green"},jt={class:"row"},Jt=e.createElementVNode("div",{class:"info"},"К оплате",-1),Ut={class:"value orange"},It=["innerHTML"],At={class:"checkbox-wrapper"},Gt=e.createTextVNode(" Мне можно не перезванивать для оформления заказа "),Kt=[e.createElementVNode("span",null,"Добавить комментарий к заказу",-1),e.createElementVNode("svg",null,[e.createElementVNode("use",{"xlink:href":"#arrow-down"})],-1)],Qt={class:"user-form"},Wt={key:0,class:"chars-count"},Xt={key:2,class:"checkout-block thanks"},Yt={class:"title"},Zt=e.createTextVNode(" Заказ "),en=e.createTextVNode(" успешно создан! "),tn={class:"columns"},nn={key:0,class:"column is-6"},on=e.createElementVNode("div",{class:"subtitle"},"Перейдите к оплате для завершения покупки",-1),ln={key:1,class:"column is-6"},an={class:"column is-6"},rn={key:0,class:"info-wrapper"},cn=e.createElementVNode("div",{class:"title"},"Доставка",-1),sn={class:"columns"},un=["innerHTML"],mn=["innerHTML"],dn={key:1,class:"info-wrapper"},pn=e.createElementVNode("div",{class:"title"},"Оплата",-1),vn={class:"columns"},fn=["innerHTML"],hn=["innerHTML"],kn={key:3,class:"checkout-block empty"},gn=e.createElementVNode("div",{class:"title"},"В корзине пока что нет товаров",-1),En={class:"message"},Vn=e.createTextVNode(" Посмотрите предложения на "),Nn=["href"],yn=e.createTextVNode(", "),bn=e.createElementVNode("br",null,null,-1),Bn=e.createTextVNode("воспользуйтесь каталогом или поиском "),Cn=["href"];ve.render=function(t,n,o,l,a,i){var r=e.resolveComponent("checkout-item"),c=e.resolveComponent("cart-trigger"),s=e.resolveComponent("SchemaForm"),u=e.resolveComponent("login");return e.openBlock(),e.createElementBlock("div",fe,[t.redirect.url?(e.openBlock(),e.createElementBlock("form",{key:0,ref:"redirectForm",action:t.redirect.url,class:"is-hidden",method:"post"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.redirect.data,(function(t,n,o){return e.openBlock(),e.createElementBlock("input",{type:"hidden",name:n,value:t,key:o},null,8,ke)})),128))],8,he)):e.createCommentVNode("v-if",!0),t.items.length&&!t.thanks?(e.openBlock(),e.createElementBlock("div",ge,[Ee,e.createElementVNode("div",Ve,[e.createElementVNode("div",Ne,[e.createElementVNode("div",ye,[e.createElementVNode("div",be,[e.createElementVNode("div",Be,[Ce,e.createElementVNode("span",{class:"ml-3",textContent:e.toDisplayString(t.pluralize(t.quantity,t.__("shop.pluralize.products")))},null,8,we),e.createElementVNode("span",{innerHTML:"на сумму "+t.$filters.price(t.total)},null,8,Te)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(function(t){return e.openBlock(),e.createBlock(r,{key:t.id,item:t},null,8,["item"])})),128)),e.createVNode(c,{class:"trigger"},{default:e.withCtx((function(t){return[e.createElementVNode("button",{class:"button",onClick:t.open},_e,8,xe)]})),_:1})]),e.createElementVNode("button",{onClick:n[0]||(n[0]=function(){return t.resertStore&&t.resertStore.apply(t,arguments)}),style:{position:"fixed",bottom:"1px",right:"1px","z-index":"1000"}},"reset"),e.createElementVNode("div",Se,[e.createElementVNode("div",Me,[Le,t.auth?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("div",De,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"radio","onUpdate:modelValue":n[1]||(n[1]=function(e){return t.userType=e}),value:"new"},null,512),[[e.vModelRadio,t.userType]]),He]),e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"radio","onUpdate:modelValue":n[2]||(n[2]=function(e){return t.userType=e}),value:"login"},null,512),[[e.vModelRadio,t.userType]]),qe])])),e.createElementVNode("div",Oe,[e.withDirectives(e.createElementVNode("div",$e,[e.createVNode(s,{schemaRowClasses:"field",schema:t.userSchema,"validation-schema":t.userValidation},{afterForm:e.withCtx((function(){return[e.createElementVNode("button",Fe,null,512)]})),_:1},8,["schema","validation-schema"])],512),[[e.vShow,"new"==t.userType]]),e.withDirectives(e.createElementVNode("div",ze,[e.createVNode(u,{"login-callback":t.loginCallback},null,8,["login-callback"])],512),[[e.vShow,"login"==t.userType]]),e.createElementVNode("div",Re,[t.auth?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("div",Pe,[e.createElementVNode("div",je,[Je,e.createElementVNode("div",Ue,[e.createElementVNode("a",{class:"button",onClick:n[3]||(n[3]=function(){return t.facebook&&t.facebook.apply(t,arguments)})},Ie),e.createElementVNode("a",{class:"button",onClick:n[4]||(n[4]=function(){return t.google&&t.google.apply(t,arguments)})},Ae)])])]))])])]),e.createElementVNode("div",Ge,[e.createElementVNode("div",Ke,[e.createElementVNode("div",Qe,[e.createElementVNode("div",We,[Xe,e.createCommentVNode("v-if",!0)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.shippingTypesRestricted,(function(o){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["item",{"is-disabled":o.restricted}]),key:o.id},[e.createElementVNode("div",Ye,[e.createElementVNode("div",Ze,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"radio","onUpdate:modelValue":n[6]||(n[6]=function(e){return t.shipping=e}),value:o.id,onClick:function(e){return t.toggleShippingRadio(o.id)}},null,8,et),[[e.vModelRadio,t.shipping]]),o.icon?(e.openBlock(),e.createElementBlock("img",{key:0,class:"icon",src:o.icon},null,8,tt)):(e.openBlock(),e.createElementBlock("svg",nt,ot)),e.createElementVNode("span",null,e.toDisplayString(o.name),1)]),o.description?(e.openBlock(),e.createElementBlock("div",lt,e.toDisplayString(o.description),1)):e.createCommentVNode("v-if",!0)]),e.createElementVNode("div",at,[!o.amount&&o.price_label?(e.openBlock(),e.createElementBlock("span",it,e.toDisplayString(o.price_label),1)):(e.openBlock(),e.createElementBlock("span",{key:1,innerHTML:"percent"==o.type?o.amount+"%":t.$filters.price(o.amount)},null,8,rt))])]),e.withDirectives((e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.component),{commit:t.shippingStoreData,data:t.shippingComponentData,item:o},null,8,["commit","data","item"])),[[e.vShow,o.component&&o.id==t.shipping]])],2)})),128))])]),e.createElementVNode("div",ct,[e.createElementVNode("div",st,[e.createElementVNode("div",ut,[e.createElementVNode("div",mt,[dt,e.createCommentVNode("v-if",!0)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.paymentMethodsRestricted,(function(o){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["item",{"is-disabled":o.restricted}]),key:o.id},[e.createElementVNode("div",pt,[e.createElementVNode("div",vt,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"radio","onUpdate:modelValue":n[8]||(n[8]=function(e){return t.payment=e}),value:o.id,onClick:function(e){return t.togglePaymentRadio(o.id)}},null,8,ft),[[e.vModelRadio,t.payment]]),e.createElementVNode("span",null,e.toDisplayString(o.name),1)]),o.description?(e.openBlock(),e.createElementBlock("div",ht,e.toDisplayString(o.description),1)):e.createCommentVNode("v-if",!0)]),o.amount?(e.openBlock(),e.createElementBlock("div",kt,[e.createElementVNode("span",{innerHTML:"percent"==o.type?o.amount+"%":t.$filters.price(o.amount)},null,8,gt)])):e.createCommentVNode("v-if",!0)])],2)})),128))])])])]),e.createElementVNode("div",Et,[e.createElementVNode("div",Vt,[Nt,e.createElementVNode("div",yt,[e.createElementVNode("div",bt,[e.createElementVNode("div",Bt,[e.createElementVNode("span",{textContent:e.toDisplayString(t.pluralize(t.quantity,t.__("shop.pluralize.products")))},null,8,Ct),wt]),e.createElementVNode("div",Tt,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.total)},null,8,xt)])]),t.discount?(e.openBlock(),e.createElementBlock("div",_t,[St,e.createElementVNode("div",Mt,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.discount)},null,8,Lt)])])):e.createCommentVNode("v-if",!0),t.fee>0?(e.openBlock(),e.createElementBlock("div",Dt,[Ht,e.createElementVNode("div",qt,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.fee)},null,8,Ot)])])):e.createCommentVNode("v-if",!0),t.shipping?(e.openBlock(),e.createElementBlock("div",$t,[Ft,e.createElementVNode("div",zt,[t.shippingPrice>0?(e.openBlock(),e.createElementBlock("span",{key:0,innerHTML:t.$filters.price(t.shippingPrice)},null,8,Rt)):t.shippingSelected&&t.shippingSelected.price_label?(e.openBlock(),e.createElementBlock("span",Pt,e.toDisplayString(t.shippingSelected.price_label),1)):e.createCommentVNode("v-if",!0)])])):e.createCommentVNode("v-if",!0),e.createElementVNode("div",jt,[Jt,e.createElementVNode("div",Ut,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.total+t.fee+t.shippingPrice)},null,8,It)])])]),e.createElementVNode("div",At,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:"checkbox","onUpdate:modelValue":n[9]||(n[9]=function(e){return t.dontcall=e})},null,512),[[e.vModelCheckbox,t.dontcall]]),Gt])]),e.createElementVNode("button",{class:e.normalizeClass(["button submit",{red:!t.ifCheckoutReady,"is-loading":t.loading}]),onClick:n[10]||(n[10]=function(){return t.checkout&&t.checkout.apply(t,arguments)}),onMouseenter:n[11]||(n[11]=function(){return t.validate&&t.validate.apply(t,arguments)})},"Подтвердить заказ",34),e.createElementVNode("div",{class:e.normalizeClass(["comment-wrapper",{"is-open":t.isCommentToggled}])},[e.createElementVNode("div",{class:"toggler",onClick:n[12]||(n[12]=function(e){return t.isCommentToggled=!t.isCommentToggled})},Kt),e.createElementVNode("div",Qt,[e.withDirectives(e.createElementVNode("textarea",{class:"textarea","onUpdate:modelValue":n[13]||(n[13]=function(e){return t.comment=e})},null,512),[[e.vModelText,t.comment]]),t.comment.length?(e.openBlock(),e.createElementBlock("div",Wt,e.toDisplayString(t.commentMaxLength-t.comment.length),1)):e.createCommentVNode("v-if",!0)])],2)])])])])):t.thanks&&t.order?(e.openBlock(),e.createElementBlock("div",Xt,[e.createElementVNode("div",Yt,[Zt,e.createElementVNode("span",null,"№"+e.toDisplayString(t.order.id),1),en]),e.createElementVNode("div",tn,[t.redirect.url?(e.openBlock(),e.createElementBlock("div",nn,[on,e.createElementVNode("button",{class:"button is-payment",onClick:n[14]||(n[14]=function(e){return t.redirectForm.submit()})},"Перейти к оплате")])):(e.openBlock(),e.createElementBlock("div",ln,[e.createElementVNode("button",{class:"button is-orange",onClick:n[15]||(n[15]=function(){return t.home&&t.home.apply(t,arguments)})},"Продолжить покупки")])),e.createElementVNode("div",an,[t.order.shipping[0]?(e.openBlock(),e.createElementBlock("div",rn,[cn,e.createElementVNode("div",sn,[t.order.shipping[0]?(e.openBlock(),e.createElementBlock("div",{key:0,class:"column is-6",innerHTML:t.order.shipping[0]},null,8,un)):e.createCommentVNode("v-if",!0),t.order.shipping[1]?(e.openBlock(),e.createElementBlock("div",{key:1,class:"column is-6",innerHTML:t.order.shipping[1]},null,8,mn)):e.createCommentVNode("v-if",!0)])])):e.createCommentVNode("v-if",!0),t.order.payment[0]?(e.openBlock(),e.createElementBlock("div",dn,[pn,e.createElementVNode("div",vn,[t.order.payment[0]?(e.openBlock(),e.createElementBlock("div",{key:0,class:"column is-6",innerHTML:t.order.payment[0]},null,8,fn)):e.createCommentVNode("v-if",!0),t.order.payment[1]?(e.openBlock(),e.createElementBlock("div",{key:1,class:"column is-6",innerHTML:t.order.payment[1]},null,8,hn)):e.createCommentVNode("v-if",!0)])])):e.createCommentVNode("v-if",!0)])])])):(e.openBlock(),e.createElementBlock("div",kn,[gn,e.createElementVNode("div",En,[Vn,e.createElementVNode("a",{href:t.$env.locale.url?t.$env.locale.url:"/"},"главной странице",8,Nn),yn,bn,Bn]),e.createElementVNode("a",{class:"button continue",href:t.$env.locale.url?t.$env.locale.url:"/"},"Продолжить покупки",8,Cn)]))])},module.exports=ve;
1
+ "use strict";var e=require("vue"),t=require("@perevorot/shop/dist/helpers"),n=require("vuex"),o=require("formvuelate"),l=require("@formvuelate/plugin-vee-validate"),a=require("@perevorot/shop/dist/forms/FormText"),i=require("yup"),r=require("vue-toastification");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var m=c(l),u=c(a),d=s(i),p=e.defineComponent({name:"CheckoutItem",props:{item:Object},setup:function(t){var n=e.computed((function(){return t.item.attributes.options&&t.item.attributes.options.length?t.item.attributes.options:[]}));return{itemOptions:e.computed((function(){return t.item.options&&t.item.options.length?t.item.options.filter((function(e){return-1!==n.value.indexOf(e.id)})):[]}))}}}),v={key:0,class:"column is-12"},f=[e.createElementVNode("div",{class:"bundle-title"},"Вместе дешевле",-1)],h={class:"column name"},k={class:"column is-narrow"},g=["href"],E=["src"],V={key:1},N=[e.createElementVNode("use",{"xlink:href":"#logo"},null,-1)],y={class:"column"},b={class:"columns is-gapless mb-0"},B={class:"column"},C={key:0,class:"code"},w={class:"title"},T=["href"],x={class:"column is-2 has-text-centered is-relative"},_={class:"quantity"},S={key:0,class:"quantity-price"},M=["innerHTML"],L=e.createTextVNode(" / шт"),D={class:"column is-2 has-text-right"},H=["innerHTML"],q=["innerHTML"],O=["innerHTML"],$={key:0,class:"options is-toggled"},F={class:"toggler"},z={class:"wrapper"},R={class:"column"},P={class:"option-title"},j={class:"column is-2 has-text-right"},J=e.createTextVNode("+"),U=["innerHTML"],I={key:0,class:"bundle columns"},A={class:"column is-narrow"},G=e.createElementVNode("svg",{class:"bundle-icon"},[e.createElementVNode("use",{"xlink:href":"#bundle-plus"})],-1),K=["href"],Q=["src"],W={key:1},X=[e.createElementVNode("use",{"xlink:href":"#logo"},null,-1)],Y={class:"column"},Z={key:0,class:"code"},ee={class:"title"},te=["href"],ne={key:1,class:"bundle columns"},oe={class:"column is-narrow"},le=e.createElementVNode("svg",{class:"bundle-icon"},[e.createElementVNode("use",{"xlink:href":"#bundle-plus"})],-1),ae=["href"],ie=["src"],re={key:1},ce=[e.createElementVNode("use",{"xlink:href":"#logo"},null,-1)],se={class:"column"},me={key:0,class:"code"},ue={class:"title"},de=["href"];p.render=function(t,n,o,l,a,i){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["columns is-multiline shop-cart-item",{"is-bundle":t.item.attributes.bundle}])},[t.item.attributes.bundle?(e.openBlock(),e.createElementBlock("div",v,f)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",h,[e.createElementVNode("div",{class:e.normalizeClass(["columns",{"mb-0":t.item.attributes.bundle}])},[e.createElementVNode("div",k,[e.createElementVNode("a",{href:t.item.attributes.href},[e.createElementVNode("figure",{class:e.normalizeClass(["image is-square",{"no-thumb":!t.item.attributes.image}])},[t.item.attributes.image?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.item.attributes.image},null,8,E)):(e.openBlock(),e.createElementBlock("svg",V,N))],2)],8,g)]),e.createElementVNode("div",y,[e.createElementVNode("div",b,[e.createElementVNode("div",B,[t.item.attributes.code?(e.openBlock(),e.createElementBlock("div",C,"Код продукта: "+e.toDisplayString(t.item.attributes.code),1)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",w,[e.createElementVNode("a",{href:t.item.attributes.href},e.toDisplayString(t.item.name),9,T)])]),e.createElementVNode("div",x,[e.createElementVNode("div",_,"⨉ "+e.toDisplayString(t.item.quantity),1),parseInt(t.item.quantity)>1?(e.openBlock(),e.createElementBlock("div",S,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.item.attributes.price)},null,8,M),L])):e.createCommentVNode("v-if",!0)]),e.createElementVNode("div",D,[e.createElementVNode("div",{class:e.normalizeClass(["price",{"bundle-price":t.item.attributes.bundle}])},[t.item.attributes.priceOld?(e.openBlock(),e.createElementBlock("div",{key:0,class:"price-old",innerHTML:t.$filters.price(t.item.attributes.priceOld*t.item.quantity)},null,8,H)):e.createCommentVNode("v-if",!0),t.item.attributes.bundle&&t.item.attributes.amount?(e.openBlock(),e.createElementBlock("div",{key:1,class:"bundle-amount",innerHTML:"Выгода "+(t.item.attributes.amount.percent?t.item.attributes.amount.percent+"%":t.$filters.price(t.item.attributes.amount.sum*t.item.quantity))},null,8,q)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",{innerHTML:t.$filters.price(t.item.attributes.price*t.item.quantity)},null,8,O)],2)])]),t.itemOptions&&t.itemOptions.length?(e.openBlock(),e.createElementBlock("div",$,[e.createElementVNode("div",F,[e.createElementVNode("span",null,"Дополнительные услуги, "+e.toDisplayString(t.itemOptions.length),1)]),e.createElementVNode("div",z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.itemOptions,(function(n,o){return e.openBlock(),e.createElementBlock("div",{key:o,class:"columns is-checked"},[e.createElementVNode("div",R,[e.createElementVNode("div",P,e.toDisplayString(n.name),1)]),e.createElementVNode("div",j,[J,e.createElementVNode("span",{innerHTML:t.$filters.price(n.price)},null,8,U)])])})),128))])])):e.createCommentVNode("v-if",!0)])],2),t.item.attributes.bundle?(e.openBlock(),e.createElementBlock("div",I,[e.createElementVNode("div",A,[G,e.createElementVNode("a",{href:t.item.attributes.second.href},[e.createElementVNode("figure",{class:e.normalizeClass(["image is-square",{"no-thumb":!t.item.attributes.second.image}])},[t.item.attributes.second.image?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.item.attributes.second.image},null,8,Q)):(e.openBlock(),e.createElementBlock("svg",W,X))],2)],8,K)]),e.createElementVNode("div",Y,[t.item.attributes.second.code?(e.openBlock(),e.createElementBlock("div",Z,"Код продукта: "+e.toDisplayString(t.item.attributes.second.code),1)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",ee,[e.createElementVNode("a",{href:t.item.attributes.second.href},e.toDisplayString(t.item.attributes.second.name),9,te)])])])):e.createCommentVNode("v-if",!0),t.item.attributes.bundle&&t.item.attributes.third?(e.openBlock(),e.createElementBlock("div",ne,[e.createElementVNode("div",oe,[le,e.createElementVNode("a",{href:t.item.attributes.third.href},[e.createElementVNode("figure",{class:e.normalizeClass(["image is-square",{"no-thumb":!t.item.attributes.third.image}])},[t.item.attributes.third.image?(e.openBlock(),e.createElementBlock("img",{key:0,src:t.item.attributes.third.image},null,8,ie)):(e.openBlock(),e.createElementBlock("svg",re,ce))],2)],8,ae)]),e.createElementVNode("div",se,[t.item.attributes.third.code?(e.openBlock(),e.createElementBlock("div",me,"Код продукта: "+e.toDisplayString(t.item.attributes.third.code),1)):e.createCommentVNode("v-if",!0),e.createElementVNode("div",ue,[e.createElementVNode("a",{href:t.item.attributes.third.href},e.toDisplayString(t.item.attributes.third.name),9,de)])])])):e.createCommentVNode("v-if",!0)])],2)},e.markRaw(u.default);var pe=o.SchemaFormFactory([m.default({})]);window.viewedSwiperOptions={slidesPerView:"auto",freeMode:!0,slideClass:"product",mousewheel:{forceToAxis:!0},navigation:{nextEl:".next",prevEl:".prev"},observer:!0,observeParents:!0};var ve=e.defineComponent({components:{CheckoutItem:p,SchemaForm:pe},name:"order-checkout",setup:function(){var l=r.useToast(),a=n.useStore(),i=e.ref(!1),c=e.computed((function(){return a.getters["cart/quantity"]})),s=e.computed((function(){return a.getters["cart/items"]})),m=e.computed((function(){return a.getters["cart/total"]})),p=e.computed((function(){return a.getters["auth/is"]})),v=e.computed((function(){return a.getters["checkout/user"]})),f=e.ref(!0),h=e.ref(null),k=e.ref(!1),g=e.ref(null),E=e.ref({}),V=e.ref([]),N=e.ref([]),y=e.ref("new"),b=e.ref(null),B=e.computed((function(){return a.getters["checkout/shippingData"]})),C=e.ref(!1),w=e.computed({get:function(){return a.getters["checkout/dontcall"]},set:function(e){a.commit("checkout/dontcall",e)}}),T=e.computed({get:function(){var e=a.getters["checkout/comment"];return e&&(C.value=!0),e},set:function(e){a.commit("checkout/comment",e)}});e.watch(T,(function(e){e.length>1e3&&(T.value=T.value.substring(0,1e3))}));var x=function(t){return e.computed({get:function(){return v.value[t]},set:function(e){var n=JSON.parse(JSON.stringify(v.value));n[t]=e,a.commit("checkout/user",n)}})},_=e.ref({last_name:x("last_name"),name:x("name"),email:x("email"),phone:x("phone")});a.dispatch("auth/me",{finally:function(){}});var S=e.computed({get:function(){return a.getters["checkout/shipping"]},set:function(e){a.commit("checkout/shipping",e)}}),M=e.computed({get:function(){return a.getters["checkout/payment"]},set:function(e){a.commit("checkout/payment",e)}}),L=e.computed((function(){return S.value?V.value.find((function(e){return e.id==S.value})):{}})),D=e.computed((function(){return M.value?N.value.find((function(e){return e.id==M.value})):{}})),H=e.computed((function(){return z(V.value,S.value)})),q=e.computed((function(){return z(N.value,M.value)})),O=e.computed((function(){return R(V.value)})),$=e.computed((function(){return R(N.value)})),F=e.computed((function(){var e=[];return s.value.forEach((function(t){-1===e.indexOf(t.category_id)&&e.push(t.category_id)})),e})),z=function(e,t){var n=0;if(t){var o=e.find((function(e){return e.id==t}));o&&(n="sum"==o.type?o.amount:Math.round(m.value*o.amount/100))}return n},R=function(e){var t=[];return e.forEach((function(e){if(e.restrictions&&Object.keys(e.restrictions).length){var n=!0,o=e.restrictions;o.price_min&&o.price_max?(n=m.value>=o.price_min&&m.value<=o.price_max,e.restrictedForce=!n):o.price_min?(n=m.value>=o.price_min,e.restrictedForce=!n):o.price_max&&(n=m.value<=o.price_max,e.restrictedForce=!n),n&&S.value&&o.shipping_type&&o.shipping_type.length&&(n=-1!==o.shipping_type.indexOf(S.value)),n&&M.value&&o.payment_method&&o.payment_method.length&&(n=-1!==o.payment_method.indexOf(M.value)),n&&o.categories&&o.categories.length&&(n=!F.value.filter((function(e){return!o.categories.includes(e)})).length,e.restrictedForce=!n),e.restricted=!n}else e.restricted=!1;e.restrictedForce||t.push(e)})),t},P=e.computed((function(){var e=0;return s.value.forEach((function(t){var n=0;t.attributes.priceOld&&(n=t.attributes.priceOld-t.attributes.price),e+=n*t.quantity})),e}));$http.post(window.location.href).then((function(e){V.value=e.data.shipping,N.value=e.data.payment})),e.watch(y,(function(e){"login"==e&&a.commit("auth/modal","login")}));var j=e.ref({last_name:{component:u.default,label:__("auth.registration.form.last_name"),model:"last_name"},name:{component:u.default,label:__("auth.registration.form.name"),model:"first_name"},phone:{component:u.default,label:__("auth.registration.form.phone"),model:"phone",mask:"(###) ###-##-##",type:"phone"},email:{component:u.default,label:__("auth.login.form.email"),model:"email"}});o.useSchemaForm(_);var J=d.object().shape({last_name:d.string().trim().required(__("auth.validation.required")),name:d.string().trim().required(__("auth.validation.required")),phone:d.string().required(__("auth.validation.phone")).matches(/^\(\d{3}\) \d{3}\-\d{2}\-\d{2}$/,__("auth.validation.phone")),email:d.string().trim().email(__("auth.validation.email")).required(__("auth.validation.required"))});window.addEventListener("beforeunload",(function(){a.commit("auth/modal",null)}));var U=function(){a.commit("checkout/reset")};return{auth:p,userType:y,facebook:function(){window.location.href=$ziggy("auth.login.social",{provider:"facebook"})},google:function(){window.location.href=$ziggy("auth.login.social",{provider:"google"})},loginCallback:function(){y.value="new"},quantity:c,items:s,loading:i,pluralize:t.pluralize,discount:P,total:m,shipping:S,shippingPrice:H,payment:M,fee:q,userValidation:J,userSchema:j,userSubmitButton:b,checkout:function(){J.isValid(_.value).then((function(e){if(e)if(S.value)if(B.value[L.value.code]&&B.value[L.value.code].isValid)if(M.value){var t=JSON.parse(JSON.stringify(B.value[L.value.code]));delete t.isValid;var n={checkout:!0,user:{last_name:_.value.last_name,name:_.value.name,phone:_.value.phone,email:_.value.email},shipping:{id:S.value,data:t},payment:{id:M.value},comment:T.value,dontcall:w.value};i.value=!0,$http.post(window.location.href,n).then((function(e){if(e.data.redirect)E.value={url:e.data.redirect.url,data:e.data.redirect.data};else{var t=[];s.value.forEach((function(e){t.push({name:e.name,id:e.attributes.code,price:e.attributes.price,brand:e.attributes.brand,category:e.attributes.category,quantity:e.quantity})}));var n={ecommerce:{purchase:{actionField:{id:e.data.order.id,affiliation:"mrfix.ua",revenue:m.value+q.value+H.value,tax:"0",shipping:H.value},products:[t]}},event:"gtm-ee-event","gtm-ee-event-category":"Ecommerce","gtm-ee-event-action":"Checkout","gtm-ee-event-non-interaction":"False"};window.dataLayer&&(window.dataLayer.push({ecommerce:null}),window.dataLayer.push(n))}k.value=!0,g.value=e.data.order,U()})).catch((function(e){l("Ошибка сохранения заказа",{type:"error"}),console.error(e)})).finally((function(){i.value=!1}))}else l("Выберите вид оплаты",{type:"error"});else l("Заполните все поля для доставки: «"+L.value.name+"»",{type:"error"});else l("Выберите способ доставки",{type:"error"});else y.value="new",b.value.click(),l("Заполните данные получателя заказа",{type:"error"})}))},ifCheckoutReady:f,validate:function(){J.isValid(_.value).then((function(e){f.value=e&&M.value&&S.value&&(!L.value.component||L.value.component&&B.value[L.value.code]&&B.value[L.value.code].isValid)}))},shippingTypesRestricted:O,paymentMethodsRestricted:$,toggleShippingRadio:function(e){S.value===e&&(S.value=null)},togglePaymentRadio:function(e){M.value===e&&(M.value=null)},shippingSelected:L,paymentSelected:D,shippingComponentData:B,shippingStoreData:function(e,t,n){var o=JSON.parse(JSON.stringify(B.value));t.isValid=n,o[e]=t,a.commit("checkout/shippingData",o)},resertStore:U,user:_,dontcall:w,comment:T,isCommentToggled:C,commentMaxLength:1e3,userCheckout:v,thanks:k,order:g,redirect:E,redirectForm:h,home:function(){window.location.href=$env.locale.url?$env.locale.url:"/"}}}}),fe={class:"cart checkout"},he=["action"],ke=["name","value"],ge={key:1,class:"items-wrapper"},Ee=e.createElementVNode("div",{class:"checkout-title"},"Оформление заказа",-1),Ve={class:"columns"},Ne={class:"column"},ye={class:"checkout-block items"},be={class:"title-row"},Be={class:"items-title"},Ce=e.createTextVNode(" Ваш заказ "),we=["textContent"],Te=["innerHTML"],xe=["onClick"],_e=[e.createElementVNode("svg",null,[e.createElementVNode("use",{"xlink:href":"#cart-edit"})],-1),e.createElementVNode("span",null,"Редактировать заказ",-1)],Se={class:"checkout-block"},Me={class:"wrapper"},Le=e.createElementVNode("div",{class:"items-title"},"Контактные даные получателя заказа",-1),De={key:0,class:"user-tabs"},He=e.createTextVNode(" Я новый клиент "),qe=e.createTextVNode(" Я постоянный клиент "),Oe={class:"columns"},$e={class:"column user-form"},Fe={type:"submit",ref:"userSubmitButton",class:"is-hidden"},ze={class:"column user-login user-form"},Re={class:"column"},Pe={key:0,class:"social-auth"},je={class:"socials"},Je=e.createElementVNode("div",{class:"description"},"Или авторизируйтесь через социальные сети:",-1),Ue={class:"buttons"},Ie=[e.createElementVNode("svg",{class:"icon fb-btn"},[e.createElementVNode("use",{"xlink:href":"#logo-facebook-icon"})],-1),e.createElementVNode("span",null,"Facebook",-1)],Ae=[e.createElementVNode("svg",{class:"icon google-btn"},[e.createElementVNode("use",{"xlink:href":"#logo-google-icon"})],-1),e.createElementVNode("span",null,"Google",-1)],Ge={class:"wrapper"},Ke={class:"rows"},Qe={class:"item"},We={class:"row"},Xe=e.createElementVNode("div",{class:"info"},[e.createElementVNode("div",{class:"items-title mb-1"},"Доставка")],-1),Ye={class:"row"},Ze={class:"info"},et=["value","onClick"],tt=["src"],nt={key:1,class:"icon"},ot=[e.createElementVNode("use",{"xlink:href":"#shipping"},null,-1)],lt={key:0,class:"description"},at={class:"value"},it={key:0,class:"green"},rt=["innerHTML"],ct={class:"wrapper"},st={class:"rows"},mt={class:"item"},ut={class:"row"},dt=e.createElementVNode("div",{class:"info"},[e.createElementVNode("div",{class:"items-title mb-1"},"Оплата")],-1),pt={class:"row no-icon"},vt={class:"info"},ft=["value","onClick"],ht={key:0,class:"description"},kt={key:0,class:"value"},gt=["innerHTML"],Et={class:"column is-4"},Vt={class:"checkout-block summary"},Nt=e.createElementVNode("div",{class:"items-title"},"Итого",-1),yt={class:"rows"},bt={class:"row"},Bt={class:"info"},Ct=["textContent"],wt=e.createTextVNode(" на сумму"),Tt={class:"value"},xt=["innerHTML"],_t={key:0,class:"row"},St=e.createElementVNode("div",{class:"info"},"Скидка",-1),Mt={class:"value"},Lt=["innerHTML"],Dt={key:1,class:"row"},Ht=e.createElementVNode("div",{class:"info"},"Сервисный сбор",-1),qt={class:"value"},Ot=["innerHTML"],$t={key:2,class:"row"},Ft=e.createElementVNode("div",{class:"info"},"Стоимость доставки",-1),zt={class:"value"},Rt=["innerHTML"],Pt={key:1,class:"green"},jt={class:"row"},Jt=e.createElementVNode("div",{class:"info"},"К оплате",-1),Ut={class:"value orange"},It=["innerHTML"],At={class:"checkbox-wrapper"},Gt=e.createTextVNode(" Мне можно не перезванивать для оформления заказа "),Kt=[e.createElementVNode("span",null,"Добавить комментарий к заказу",-1),e.createElementVNode("svg",null,[e.createElementVNode("use",{"xlink:href":"#arrow-down"})],-1)],Qt={class:"user-form"},Wt={key:0,class:"chars-count"},Xt={key:2,class:"checkout-block thanks"},Yt={class:"title"},Zt=e.createTextVNode(" Заказ "),en=e.createTextVNode(" успешно создан! "),tn={class:"columns"},nn={key:0,class:"column is-6"},on=e.createElementVNode("div",{class:"subtitle"},"Перейдите к оплате для завершения покупки",-1),ln={key:1,class:"column is-6"},an={class:"column is-6"},rn={key:0,class:"info-wrapper"},cn=e.createElementVNode("div",{class:"title"},"Доставка",-1),sn={class:"columns"},mn=["innerHTML"],un=["innerHTML"],dn={key:1,class:"info-wrapper"},pn=e.createElementVNode("div",{class:"title"},"Оплата",-1),vn={class:"columns"},fn=["innerHTML"],hn=["innerHTML"],kn={key:3,class:"checkout-block empty"},gn=e.createElementVNode("div",{class:"title"},"В корзине пока что нет товаров",-1),En={class:"message"},Vn=e.createTextVNode(" Посмотрите предложения на "),Nn=["href"],yn=e.createTextVNode(", "),bn=e.createElementVNode("br",null,null,-1),Bn=e.createTextVNode("воспользуйтесь каталогом или поиском "),Cn=["href"];ve.render=function(t,n,o,l,a,i){var r=e.resolveComponent("checkout-item"),c=e.resolveComponent("cart-trigger"),s=e.resolveComponent("SchemaForm"),m=e.resolveComponent("login");return e.openBlock(),e.createElementBlock("div",fe,[t.redirect.url?(e.openBlock(),e.createElementBlock("form",{key:0,ref:"redirectForm",action:t.redirect.url,class:"is-hidden",method:"post"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.redirect.data,(function(t,n,o){return e.openBlock(),e.createElementBlock("input",{type:"hidden",name:n,value:t,key:o},null,8,ke)})),128))],8,he)):e.createCommentVNode("v-if",!0),t.items.length&&!t.thanks?(e.openBlock(),e.createElementBlock("div",ge,[Ee,e.createElementVNode("div",Ve,[e.createElementVNode("div",Ne,[e.createElementVNode("div",ye,[e.createElementVNode("div",be,[e.createElementVNode("div",Be,[Ce,e.createElementVNode("span",{class:"ml-3",textContent:e.toDisplayString(t.pluralize(t.quantity,t.__("shop.pluralize.products")))},null,8,we),e.createElementVNode("span",{innerHTML:"на сумму "+t.$filters.price(t.total)},null,8,Te)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(function(t){return e.openBlock(),e.createBlock(r,{key:t.id,item:t},null,8,["item"])})),128)),e.createVNode(c,{class:"trigger"},{default:e.withCtx((function(t){return[e.createElementVNode("button",{class:"button",onClick:t.open},_e,8,xe)]})),_:1})]),e.createElementVNode("button",{onClick:n[0]||(n[0]=function(){return t.resertStore&&t.resertStore.apply(t,arguments)}),style:{position:"fixed",bottom:"1px",right:"1px","z-index":"1000"}},"reset"),e.createElementVNode("div",Se,[e.createElementVNode("div",Me,[Le,t.auth?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("div",De,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"radio","onUpdate:modelValue":n[1]||(n[1]=function(e){return t.userType=e}),value:"new"},null,512),[[e.vModelRadio,t.userType]]),He]),e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"radio","onUpdate:modelValue":n[2]||(n[2]=function(e){return t.userType=e}),value:"login"},null,512),[[e.vModelRadio,t.userType]]),qe])])),e.createElementVNode("div",Oe,[e.withDirectives(e.createElementVNode("div",$e,[e.createVNode(s,{schemaRowClasses:"field",schema:t.userSchema,"validation-schema":t.userValidation},{afterForm:e.withCtx((function(){return[e.createElementVNode("button",Fe,null,512)]})),_:1},8,["schema","validation-schema"])],512),[[e.vShow,"new"==t.userType]]),e.withDirectives(e.createElementVNode("div",ze,[e.createVNode(m,{"login-callback":t.loginCallback},null,8,["login-callback"])],512),[[e.vShow,"login"==t.userType]]),e.createElementVNode("div",Re,[t.auth?e.createCommentVNode("v-if",!0):(e.openBlock(),e.createElementBlock("div",Pe,[e.createElementVNode("div",je,[Je,e.createElementVNode("div",Ue,[e.createElementVNode("a",{class:"button",onClick:n[3]||(n[3]=function(){return t.facebook&&t.facebook.apply(t,arguments)})},Ie),e.createElementVNode("a",{class:"button",onClick:n[4]||(n[4]=function(){return t.google&&t.google.apply(t,arguments)})},Ae)])])]))])])]),e.createElementVNode("div",Ge,[e.createElementVNode("div",Ke,[e.createElementVNode("div",Qe,[e.createElementVNode("div",We,[Xe,e.createCommentVNode("v-if",!0)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.shippingTypesRestricted,(function(o){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["item",{"is-disabled":o.restricted}]),key:o.id},[e.createElementVNode("div",Ye,[e.createElementVNode("div",Ze,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"radio","onUpdate:modelValue":n[6]||(n[6]=function(e){return t.shipping=e}),value:o.id,onClick:function(e){return t.toggleShippingRadio(o.id)}},null,8,et),[[e.vModelRadio,t.shipping]]),o.icon?(e.openBlock(),e.createElementBlock("img",{key:0,class:"icon",src:o.icon},null,8,tt)):(e.openBlock(),e.createElementBlock("svg",nt,ot)),e.createElementVNode("span",null,e.toDisplayString(o.name),1)]),o.description?(e.openBlock(),e.createElementBlock("div",lt,e.toDisplayString(o.description),1)):e.createCommentVNode("v-if",!0)]),e.createElementVNode("div",at,[!o.amount&&o.price_label?(e.openBlock(),e.createElementBlock("span",it,e.toDisplayString(o.price_label),1)):(e.openBlock(),e.createElementBlock("span",{key:1,innerHTML:"percent"==o.type?o.amount+"%":t.$filters.price(o.amount)},null,8,rt))])]),e.withDirectives((e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.component),{commit:t.shippingStoreData,data:t.shippingComponentData,item:o},null,8,["commit","data","item"])),[[e.vShow,o.component&&o.id==t.shipping]])],2)})),128))])]),e.createElementVNode("div",ct,[e.createElementVNode("div",st,[e.createElementVNode("div",mt,[e.createElementVNode("div",ut,[dt,e.createCommentVNode("v-if",!0)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.paymentMethodsRestricted,(function(o){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["item",{"is-disabled":o.restricted}]),key:o.id},[e.createElementVNode("div",pt,[e.createElementVNode("div",vt,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"radio","onUpdate:modelValue":n[8]||(n[8]=function(e){return t.payment=e}),value:o.id,onClick:function(e){return t.togglePaymentRadio(o.id)}},null,8,ft),[[e.vModelRadio,t.payment]]),e.createElementVNode("span",null,e.toDisplayString(o.name),1)]),o.description?(e.openBlock(),e.createElementBlock("div",ht,e.toDisplayString(o.description),1)):e.createCommentVNode("v-if",!0)]),o.amount?(e.openBlock(),e.createElementBlock("div",kt,[e.createElementVNode("span",{innerHTML:"percent"==o.type?o.amount+"%":t.$filters.price(o.amount)},null,8,gt)])):e.createCommentVNode("v-if",!0)])],2)})),128))])])])]),e.createElementVNode("div",Et,[e.createElementVNode("div",Vt,[Nt,e.createElementVNode("div",yt,[e.createElementVNode("div",bt,[e.createElementVNode("div",Bt,[e.createElementVNode("span",{textContent:e.toDisplayString(t.pluralize(t.quantity,t.__("shop.pluralize.products")))},null,8,Ct),wt]),e.createElementVNode("div",Tt,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.total)},null,8,xt)])]),t.discount?(e.openBlock(),e.createElementBlock("div",_t,[St,e.createElementVNode("div",Mt,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.discount)},null,8,Lt)])])):e.createCommentVNode("v-if",!0),t.fee>0?(e.openBlock(),e.createElementBlock("div",Dt,[Ht,e.createElementVNode("div",qt,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.fee)},null,8,Ot)])])):e.createCommentVNode("v-if",!0),t.shipping?(e.openBlock(),e.createElementBlock("div",$t,[Ft,e.createElementVNode("div",zt,[t.shippingPrice>0?(e.openBlock(),e.createElementBlock("span",{key:0,innerHTML:t.$filters.price(t.shippingPrice)},null,8,Rt)):t.shippingSelected&&t.shippingSelected.price_label?(e.openBlock(),e.createElementBlock("span",Pt,e.toDisplayString(t.shippingSelected.price_label),1)):e.createCommentVNode("v-if",!0)])])):e.createCommentVNode("v-if",!0),e.createElementVNode("div",jt,[Jt,e.createElementVNode("div",Ut,[e.createElementVNode("span",{innerHTML:t.$filters.price(t.total+t.fee+t.shippingPrice)},null,8,It)])])]),e.createElementVNode("div",At,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:"checkbox","onUpdate:modelValue":n[9]||(n[9]=function(e){return t.dontcall=e})},null,512),[[e.vModelCheckbox,t.dontcall]]),Gt])]),e.createElementVNode("button",{class:e.normalizeClass(["button submit",{red:!t.ifCheckoutReady,"is-loading":t.loading}]),onClick:n[10]||(n[10]=function(){return t.checkout&&t.checkout.apply(t,arguments)}),onMouseenter:n[11]||(n[11]=function(){return t.validate&&t.validate.apply(t,arguments)})},"Подтвердить заказ",34),e.createElementVNode("div",{class:e.normalizeClass(["comment-wrapper",{"is-open":t.isCommentToggled}])},[e.createElementVNode("div",{class:"toggler",onClick:n[12]||(n[12]=function(e){return t.isCommentToggled=!t.isCommentToggled})},Kt),e.createElementVNode("div",Qt,[e.withDirectives(e.createElementVNode("textarea",{class:"textarea","onUpdate:modelValue":n[13]||(n[13]=function(e){return t.comment=e})},null,512),[[e.vModelText,t.comment]]),t.comment.length?(e.openBlock(),e.createElementBlock("div",Wt,e.toDisplayString(t.commentMaxLength-t.comment.length),1)):e.createCommentVNode("v-if",!0)])],2)])])])])):t.thanks&&t.order?(e.openBlock(),e.createElementBlock("div",Xt,[e.createElementVNode("div",Yt,[Zt,e.createElementVNode("span",null,"№"+e.toDisplayString(t.order.id),1),en]),e.createElementVNode("div",tn,[t.redirect.url?(e.openBlock(),e.createElementBlock("div",nn,[on,e.createElementVNode("button",{class:"button is-payment",onClick:n[14]||(n[14]=function(e){return t.redirectForm.submit()})},"Перейти к оплате")])):(e.openBlock(),e.createElementBlock("div",ln,[e.createElementVNode("button",{class:"button is-orange",onClick:n[15]||(n[15]=function(){return t.home&&t.home.apply(t,arguments)})},"Продолжить покупки")])),e.createElementVNode("div",an,[t.order.shipping[0]?(e.openBlock(),e.createElementBlock("div",rn,[cn,e.createElementVNode("div",sn,[t.order.shipping[0]?(e.openBlock(),e.createElementBlock("div",{key:0,class:"column is-6",innerHTML:t.order.shipping[0]},null,8,mn)):e.createCommentVNode("v-if",!0),t.order.shipping[1]?(e.openBlock(),e.createElementBlock("div",{key:1,class:"column is-6",innerHTML:t.order.shipping[1]},null,8,un)):e.createCommentVNode("v-if",!0)])])):e.createCommentVNode("v-if",!0),t.order.payment[0]?(e.openBlock(),e.createElementBlock("div",dn,[pn,e.createElementVNode("div",vn,[t.order.payment[0]?(e.openBlock(),e.createElementBlock("div",{key:0,class:"column is-6",innerHTML:t.order.payment[0]},null,8,fn)):e.createCommentVNode("v-if",!0),t.order.payment[1]?(e.openBlock(),e.createElementBlock("div",{key:1,class:"column is-6",innerHTML:t.order.payment[1]},null,8,hn)):e.createCommentVNode("v-if",!0)])])):e.createCommentVNode("v-if",!0)])])])):(e.openBlock(),e.createElementBlock("div",kn,[gn,e.createElementVNode("div",En,[Vn,e.createElementVNode("a",{href:t.$env.locale.url?t.$env.locale.url:"/"},"главной странице",8,Nn),yn,bn,Bn]),e.createElementVNode("a",{class:"button continue",href:t.$env.locale.url?t.$env.locale.url:"/"},"Продолжить покупки",8,Cn)]))])},module.exports=ve;
2
2
  //# sourceMappingURL=Checkout.js.map
@@ -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=497060f6&lang.js","../../../../src/components/shop/order/Checkout.vue","../../../../src/components/shop/order/Checkout.vue?vue&type=template&id=c94c5a88&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\">Вместе дешевле</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\">Код продукта: {{ 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> / шт</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=\"'Выгода ' + (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>Дополнительные услуги, {{ 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\">Код продукта: {{ 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\">Код продукта: {{ 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\">Вместе дешевле</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\">Код продукта: {{ 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> / шт</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=\"'Выгода ' + (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>Дополнительные услуги, {{ 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\">Код продукта: {{ 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\">Код продукта: {{ 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\n ref=\"redirectForm\"\n v-if=\"redirect.url\"\n :action=\"redirect.url\"\n class=\"is-hidden\"\n method=\"post\"\n >\n <input\n type=\"hidden\"\n :name=\"name\"\n :value=\"value\"\n v-for=\"(value, name, index) in redirect.data\"\n v-bind:key=\"index\"\n />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">Оформление заказа</div>\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"checkout-block items\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n Ваш заказ\n <span\n class=\"ml-3\"\n v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"\n ></span>\n <span v-html=\"'на сумму ' + $filters.price(total)\"></span>\n </div>\n </div>\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>Редактировать заказ</span>\n </button>\n </template>\n </cart-trigger>\n </div>\n <button\n @click=\"resertStore\"\n style=\"position: fixed; bottom: 1px; right: 1px; z-index: 1000\"\n >reset</button>\n <div class=\"checkout-block\">\n <div class=\"wrapper\">\n <div class=\"items-title\">Контактные даные получателя заказа</div>\n <div class=\"user-tabs\" v-if=\"!auth\">\n <label>\n <input\n type=\"radio\"\n class=\"radio\"\n v-model=\"userType\"\n value=\"new\"\n /> Я новый клиент\n </label>\n <label>\n <input\n type=\"radio\"\n class=\"radio\"\n v-model=\"userType\"\n value=\"login\"\n /> Я постоянный клиент\n </label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm\n schemaRowClasses=\"field\"\n :schema=\"userSchema\"\n :validation-schema=\"userValidation\"\n >\n <template #afterForm>\n <button\n type=\"submit\"\n ref=\"userSubmitButton\"\n class=\"is-hidden\"\n ></button>\n </template>\n </SchemaForm>\n </div>\n <div\n class=\"column user-login user-form\"\n v-show=\"userType == 'login'\"\n >\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div\n class=\"description\"\n >Или авторизируйтесь через социальные сети:</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">Доставка</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a\n @click=\"shipping = null\"\n class=\"reset\"\n v-bind:class=\"{ 'is-active': shipping }\"\n >Очистить</a>\n </div>\n </div>\n </div>\n <div\n class=\"item\"\n v-for=\"item in shippingTypesRestricted\"\n v-bind:key=\"item.id\"\n v-bind:class=\"{ 'is-disabled': item.restricted }\"\n >\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input\n type=\"radio\"\n class=\"radio\"\n v-model=\"shipping\"\n :value=\"item.id\"\n @click=\"toggleShippingRadio(item.id)\"\n />\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\n class=\"description\"\n v-if=\"item.description\"\n >{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span\n class=\"green\"\n v-if=\"!item.amount && item.price_label\"\n >{{ item.price_label }}</span>\n <span\n v-else\n v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"\n ></span>\n </div>\n </div>\n <component\n :is=\"item.component\"\n v-show=\"item.component && item.id == shipping\"\n :commit=\"shippingStoreData\"\n :data=\"shippingComponentData\"\n :item=\"item\"\n ></component>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">Оплата</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a\n @click=\"payment = null\"\n class=\"reset\"\n v-bind:class=\"{ 'is-active': payment }\"\n >Очистить</a>\n </div>\n </div>\n </div>\n <div\n class=\"item\"\n v-for=\"item in paymentMethodsRestricted\"\n v-bind:key=\"item.id\"\n v-bind:class=\"{ 'is-disabled': item.restricted }\"\n >\n <div class=\"row no-icon\">\n <div class=\"info\">\n <label>\n <input\n type=\"radio\"\n class=\"radio\"\n v-model=\"payment\"\n :value=\"item.id\"\n @click=\"togglePaymentRadio(item.id)\"\n />\n <span>{{ item.name }}</span>\n </label>\n <div\n class=\"description\"\n v-if=\"item.description\"\n >{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span\n v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"\n ></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"items-title\">Итого</div>\n <div class=\"rows\">\n <div class=\"row\">\n <div class=\"info\">\n <span\n v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"\n ></span> на сумму\n </div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"discount\">\n <div class=\"info\">Скидка</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"fee > 0\">\n <div class=\"info\">Сервисный сбор</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"shipping\">\n <div class=\"info\">Стоимость доставки</div>\n <div class=\"value\">\n <span\n v-html=\"$filters.price(shippingPrice)\"\n v-if=\"shippingPrice > 0\"\n ></span>\n <span\n class=\"green\"\n v-else-if=\"shippingSelected && shippingSelected.price_label\"\n >{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"info\">К оплате</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(total + fee + shippingPrice)\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" /> Мне можно не перезванивать для оформления заказа\n </label>\n </div>\n <button\n class=\"button submit\"\n @click=\"checkout\"\n @mouseenter=\"validate\"\n v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\"\n >Подтвердить заказ</button>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>Добавить комментарий к заказу</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\n class=\"chars-count\"\n v-if=\"comment.length\"\n >{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <div class=\"title\">\n Заказ\n <span>№{{ order.id }}</span> успешно создан!\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">Перейдите к оплате для завершения покупки</div>\n <button\n class=\"button is-payment\"\n @click=\"redirectForm.submit()\"\n >Перейти к оплате</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">Продолжить покупки</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">Доставка</div>\n <div class=\"columns\">\n <div\n class=\"column is-6\"\n v-if=\"order.shipping[0]\"\n v-html=\"order.shipping[0]\"\n ></div>\n <div\n class=\"column is-6\"\n v-if=\"order.shipping[1]\"\n v-html=\"order.shipping[1]\"\n ></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">Оплата</div>\n <div class=\"columns\">\n <div\n class=\"column is-6\"\n v-if=\"order.payment[0]\"\n v-html=\"order.payment[0]\"\n ></div>\n <div\n class=\"column is-6\"\n v-if=\"order.payment[1]\"\n v-html=\"order.payment[1]\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"checkout-block empty\">\n <div class=\"title\">В корзине пока что нет товаров</div>\n <div class=\"message\">\n Посмотрите предложения на\n <a\n :href=\"$env.locale.url ? $env.locale.url : '/'\"\n >главной странице</a>,\n <br />воспользуйтесь каталогом или поиском\n </div>\n <a\n class=\"button continue\"\n :href=\"$env.locale.url ? $env.locale.url : '/'\"\n >Продолжить покупки</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport * as yup from 'yup';\nimport { useToast } from \"vue-toastification\";\n\nmarkRaw(FormText);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n name: 'order-checkout',\n setup() {\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name) => {\n return computed({\n get() {\n return userCheckout.value[name];\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone')\n });\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchema = ref({\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone',\n //placeholder: '(050) 123-45-67'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n }\n });\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n\n const userValidation = yup.object().shape({\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required'))\n });\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = () => {\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid));\n });\n };\n\n const checkout = () => {\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast('Заполните данные получателя заказа', {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast('Выберите способ доставки', {\n type: 'error'\n });\n } else if (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid) {\n toast('Заполните все поля для доставки: «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast('Выберите вид оплаты', {\n type: 'error'\n });\n } else {\n let data = JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code]));\n delete data.isValid;\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email\n },\n shipping: {\n id: shipping.value,\n data: data\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n } else {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n 'name': item.name,\n 'id': item.attributes.code,\n 'price': item.attributes.price,\n 'brand': item.attributes.brand,\n 'category': item.attributes.category,\n 'quantity': item.quantity\n });\n });\n\n const object = {\n 'ecommerce': {\n 'purchase': {\n 'actionField': {\n 'id': response.data.order.id,\n 'affiliation': 'mrfix.ua',\n 'revenue': total.value + fee.value + shippingPrice.value,\n 'tax': '0',\n 'shipping': shippingPrice.value,\n },\n 'products': [products]\n }\n }\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n resertStore();\n\n // nextTick(() => {\n // redirectForm.value.submit();\n // });\n })\n .catch((e) => {\n toast('Ошибка сохранения заказа', {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form\n ref=\"redirectForm\"\n v-if=\"redirect.url\"\n :action=\"redirect.url\"\n class=\"is-hidden\"\n method=\"post\"\n >\n <input\n type=\"hidden\"\n :name=\"name\"\n :value=\"value\"\n v-for=\"(value, name, index) in redirect.data\"\n v-bind:key=\"index\"\n />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">Оформление заказа</div>\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"checkout-block items\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n Ваш заказ\n <span\n class=\"ml-3\"\n v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"\n ></span>\n <span v-html=\"'на сумму ' + $filters.price(total)\"></span>\n </div>\n </div>\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>Редактировать заказ</span>\n </button>\n </template>\n </cart-trigger>\n </div>\n <button\n @click=\"resertStore\"\n style=\"position: fixed; bottom: 1px; right: 1px; z-index: 1000\"\n >reset</button>\n <div class=\"checkout-block\">\n <div class=\"wrapper\">\n <div class=\"items-title\">Контактные даные получателя заказа</div>\n <div class=\"user-tabs\" v-if=\"!auth\">\n <label>\n <input\n type=\"radio\"\n class=\"radio\"\n v-model=\"userType\"\n value=\"new\"\n /> Я новый клиент\n </label>\n <label>\n <input\n type=\"radio\"\n class=\"radio\"\n v-model=\"userType\"\n value=\"login\"\n /> Я постоянный клиент\n </label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm\n schemaRowClasses=\"field\"\n :schema=\"userSchema\"\n :validation-schema=\"userValidation\"\n >\n <template #afterForm>\n <button\n type=\"submit\"\n ref=\"userSubmitButton\"\n class=\"is-hidden\"\n ></button>\n </template>\n </SchemaForm>\n </div>\n <div\n class=\"column user-login user-form\"\n v-show=\"userType == 'login'\"\n >\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div\n class=\"description\"\n >Или авторизируйтесь через социальные сети:</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">Доставка</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a\n @click=\"shipping = null\"\n class=\"reset\"\n v-bind:class=\"{ 'is-active': shipping }\"\n >Очистить</a>\n </div>\n </div>\n </div>\n <div\n class=\"item\"\n v-for=\"item in shippingTypesRestricted\"\n v-bind:key=\"item.id\"\n v-bind:class=\"{ 'is-disabled': item.restricted }\"\n >\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input\n type=\"radio\"\n class=\"radio\"\n v-model=\"shipping\"\n :value=\"item.id\"\n @click=\"toggleShippingRadio(item.id)\"\n />\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\n class=\"description\"\n v-if=\"item.description\"\n >{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span\n class=\"green\"\n v-if=\"!item.amount && item.price_label\"\n >{{ item.price_label }}</span>\n <span\n v-else\n v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"\n ></span>\n </div>\n </div>\n <component\n :is=\"item.component\"\n v-show=\"item.component && item.id == shipping\"\n :commit=\"shippingStoreData\"\n :data=\"shippingComponentData\"\n :item=\"item\"\n ></component>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">Оплата</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a\n @click=\"payment = null\"\n class=\"reset\"\n v-bind:class=\"{ 'is-active': payment }\"\n >Очистить</a>\n </div>\n </div>\n </div>\n <div\n class=\"item\"\n v-for=\"item in paymentMethodsRestricted\"\n v-bind:key=\"item.id\"\n v-bind:class=\"{ 'is-disabled': item.restricted }\"\n >\n <div class=\"row no-icon\">\n <div class=\"info\">\n <label>\n <input\n type=\"radio\"\n class=\"radio\"\n v-model=\"payment\"\n :value=\"item.id\"\n @click=\"togglePaymentRadio(item.id)\"\n />\n <span>{{ item.name }}</span>\n </label>\n <div\n class=\"description\"\n v-if=\"item.description\"\n >{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span\n v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"\n ></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"items-title\">Итого</div>\n <div class=\"rows\">\n <div class=\"row\">\n <div class=\"info\">\n <span\n v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"\n ></span> на сумму\n </div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"discount\">\n <div class=\"info\">Скидка</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"fee > 0\">\n <div class=\"info\">Сервисный сбор</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"shipping\">\n <div class=\"info\">Стоимость доставки</div>\n <div class=\"value\">\n <span\n v-html=\"$filters.price(shippingPrice)\"\n v-if=\"shippingPrice > 0\"\n ></span>\n <span\n class=\"green\"\n v-else-if=\"shippingSelected && shippingSelected.price_label\"\n >{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"info\">К оплате</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(total + fee + shippingPrice)\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" /> Мне можно не перезванивать для оформления заказа\n </label>\n </div>\n <button\n class=\"button submit\"\n @click=\"checkout\"\n @mouseenter=\"validate\"\n v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\"\n >Подтвердить заказ</button>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>Добавить комментарий к заказу</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\n class=\"chars-count\"\n v-if=\"comment.length\"\n >{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <div class=\"title\">\n Заказ\n <span>№{{ order.id }}</span> успешно создан!\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">Перейдите к оплате для завершения покупки</div>\n <button\n class=\"button is-payment\"\n @click=\"redirectForm.submit()\"\n >Перейти к оплате</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">Продолжить покупки</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">Доставка</div>\n <div class=\"columns\">\n <div\n class=\"column is-6\"\n v-if=\"order.shipping[0]\"\n v-html=\"order.shipping[0]\"\n ></div>\n <div\n class=\"column is-6\"\n v-if=\"order.shipping[1]\"\n v-html=\"order.shipping[1]\"\n ></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">Оплата</div>\n <div class=\"columns\">\n <div\n class=\"column is-6\"\n v-if=\"order.payment[0]\"\n v-html=\"order.payment[0]\"\n ></div>\n <div\n class=\"column is-6\"\n v-if=\"order.payment[1]\"\n v-html=\"order.payment[1]\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"checkout-block empty\">\n <div class=\"title\">В корзине пока что нет товаров</div>\n <div class=\"message\">\n Посмотрите предложения на\n <a\n :href=\"$env.locale.url ? $env.locale.url : '/'\"\n >главной странице</a>,\n <br />воспользуйтесь каталогом или поиском\n </div>\n <a\n class=\"button continue\"\n :href=\"$env.locale.url ? $env.locale.url : '/'\"\n >Продолжить покупки</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport * as yup from 'yup';\nimport { useToast } from \"vue-toastification\";\n\nmarkRaw(FormText);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n name: 'order-checkout',\n setup() {\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name) => {\n return computed({\n get() {\n return userCheckout.value[name];\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone')\n });\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchema = ref({\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone',\n //placeholder: '(050) 123-45-67'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n }\n });\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n\n const userValidation = yup.object().shape({\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required'))\n });\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = () => {\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid));\n });\n };\n\n const checkout = () => {\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast('Заполните данные получателя заказа', {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast('Выберите способ доставки', {\n type: 'error'\n });\n } else if (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid) {\n toast('Заполните все поля для доставки: «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast('Выберите вид оплаты', {\n type: 'error'\n });\n } else {\n let data = JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code]));\n delete data.isValid;\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email\n },\n shipping: {\n id: shipping.value,\n data: data\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n } else {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n 'name': item.name,\n 'id': item.attributes.code,\n 'price': item.attributes.price,\n 'brand': item.attributes.brand,\n 'category': item.attributes.category,\n 'quantity': item.quantity\n });\n });\n\n const object = {\n 'ecommerce': {\n 'purchase': {\n 'actionField': {\n 'id': response.data.order.id,\n 'affiliation': 'mrfix.ua',\n 'revenue': total.value + fee.value + shippingPrice.value,\n 'tax': '0',\n 'shipping': shippingPrice.value,\n },\n 'products': [products]\n }\n }\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n resertStore();\n\n // nextTick(() => {\n // redirectForm.value.submit();\n // });\n })\n .catch((e) => {\n toast('Ошибка сохранения заказа', {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","item","Object","setup","options","computed","attributes","length","itemOptions","filter","option","value","indexOf","id","_createElementVNode","_createElementBlock","_ctx","bundle","_hoisted_1","_hoisted_4","_hoisted_5","href","image","src","_hoisted_11","_hoisted_12","_hoisted_13","code","_hoisted_14","_hoisted_15","_hoisted_17","_hoisted_18","quantity","parseInt","_hoisted_19","innerHTML","price","_hoisted_22","priceOld","amount","percent","sum","_hoisted_26","_hoisted_27","_hoisted_28","index","key","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_34","_hoisted_35","_hoisted_36","second","_hoisted_42","_hoisted_43","_hoisted_44","third","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_54","_hoisted_55","_hoisted_56","markRaw","FormText","SchemaForm","SchemaFormFactory","VeeValidatePlugin","window","viewedSwiperOptions","slidesPerView","freeMode","slideClass","mousewheel","forceToAxis","navigation","nextEl","prevEl","observer","observeParents","components","CheckoutItem","toast","useToast","store","useStore","loading","ref","getters","items","total","auth","userCheckout","ifCheckoutReady","redirectForm","thanks","order","redirect","shippingTypes","paymentMethods","userType","userSubmitButton","shippingComponentData","isCommentToggled","dontcall","get","set","commit","comment","watch","substring","field","data","JSON","parse","stringify","user","last_name","email","phone","dispatch","shipping","payment","shippingSelected","find","paymentSelected","shippingPrice","calculatePrice","fee","shippingTypesRestricted","restrictCheck","paymentMethodsRestricted","categoriesInCart","categories","forEach","category_id","push","type","Math","round","elements","restrictions","keys","ok","r","price_min","price_max","restrictedForce","shipping_type","payment_method","includes","restricted","discount","s","$http","post","location","then","response","userSchema","component","label","__","model","mask","useSchemaForm","userValidation","yup","object","shape","string","trim","required","matches","addEventListener","resertStore","facebook","$ziggy","provider","google","loginCallback","pluralize","checkout","isValid","valid","url","products","brand","category","dataLayer","ecommerce","e","console","error","click","validate","isUserValid","toggleShippingRadio","togglePaymentRadio","shippingStoreData","d","commentMaxLength","home","$env","locale","action","method","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_toDisplayString","_createBlock","_createVNode","onClick","open","style","_hoisted_20","_hoisted_21","_hoisted_24","_hoisted_25","schemaRowClasses","schema","afterForm","_hoisted_32","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_45","icon","_hoisted_49","description","_hoisted_52","_hoisted_53","price_label","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_62","_hoisted_63","_hoisted_65","_hoisted_66","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_76","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_95","onMouseenter","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_106","_hoisted_107","_hoisted_108","submit","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_112","_hoisted_113","_hoisted_116","_hoisted_117","_hoisted_118","_hoisted_121","_hoisted_122","_hoisted_123","_hoisted_127"],"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=497060f6&lang.js","../../../../src/components/shop/order/Checkout.vue","../../../../src/components/shop/order/Checkout.vue?vue&type=template&id=f8a79d38&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\">Вместе дешевле</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\">Код продукта: {{ 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> / шт</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=\"'Выгода ' + (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>Дополнительные услуги, {{ 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\">Код продукта: {{ 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\">Код продукта: {{ 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\">Вместе дешевле</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\">Код продукта: {{ 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> / шт</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=\"'Выгода ' + (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>Дополнительные услуги, {{ 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\">Код продукта: {{ 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\">Код продукта: {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []);\n const itemOptions = computed(() => props.item.options && props.item.options.length ? props.item.options.filter(option => options.value.indexOf(option.id) !==-1) : []);\n\n return {\n itemOptions,\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">Оформление заказа</div>\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"checkout-block items\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n Ваш заказ\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>\n <span v-html=\"'на сумму ' + $filters.price(total)\"></span>\n </div>\n </div>\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>Редактировать заказ</span>\n </button>\n </template>\n </cart-trigger>\n </div>\n <button @click=\"resertStore\" style=\"position: fixed; bottom: 1px; right: 1px; z-index: 1000\">reset</button>\n <div class=\"checkout-block\">\n <div class=\"wrapper\">\n <div class=\"items-title\">Контактные даные получателя заказа</div>\n <div class=\"user-tabs\" v-if=\"!auth\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" /> Я новый клиент </label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" /> Я постоянный клиент </label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">Или авторизируйтесь через социальные сети:</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">Доставка</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">Очистить</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <component :is=\"item.component\" v-show=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">Оплата</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">Очистить</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"items-title\">Итого</div>\n <div class=\"rows\">\n <div class=\"row\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> на сумму</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"discount\">\n <div class=\"info\">Скидка</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"fee > 0\">\n <div class=\"info\">Сервисный сбор</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"shipping\">\n <div class=\"info\">Стоимость доставки</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"info\">К оплате</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(total + fee + shippingPrice)\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" /> Мне можно не перезванивать для оформления заказа </label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">Подтвердить заказ</button>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>Добавить комментарий к заказу</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <div class=\"title\">\n Заказ\n <span>№{{ order.id }}</span> успешно создан!\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">Перейдите к оплате для завершения покупки</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">Перейти к оплате</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">Продолжить покупки</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">Доставка</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\">Оплата</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"checkout-block empty\">\n <div class=\"title\">В корзине пока что нет товаров</div>\n <div class=\"message\">\n Посмотрите предложения на\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">главной странице</a>, <br />воспользуйтесь каталогом или поиском\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">Продолжить покупки</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nmarkRaw(FormText);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n name: 'order-checkout',\n setup() {\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name) => {\n return computed({\n get() {\n return userCheckout.value[name];\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone')\n });\n\n store.dispatch('auth/me', {\n finally: () => {}\n });\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchema = ref({\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n }\n });\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n\n const userValidation = yup.object().shape({\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required'))\n });\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = () => {\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid));\n });\n };\n\n const checkout = () => {\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast('Заполните данные получателя заказа', {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast('Выберите способ доставки', {\n type: 'error'\n });\n } else if (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid) {\n toast('Заполните все поля для доставки: «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast('Выберите вид оплаты', {\n type: 'error'\n });\n } else {\n let data = JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code]));\n delete data.isValid;\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email\n },\n shipping: {\n id: shipping.value,\n data: data\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n } else {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n name: item.name,\n id: item.attributes.code,\n price: item.attributes.price,\n brand: item.attributes.brand,\n category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n purchase: {\n actionField: {\n id: response.data.order.id,\n affiliation: 'mrfix.ua',\n revenue: total.value + fee.value + shippingPrice.value,\n tax: '0',\n shipping: shippingPrice.value\n },\n products: [products]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Checkout',\n 'gtm-ee-event-non-interaction': 'False'\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n resertStore();\n\n // nextTick(() => {\n // redirectForm.value.submit();\n // });\n })\n .catch((e) => {\n toast('Ошибка сохранения заказа', {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">Оформление заказа</div>\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"checkout-block items\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n Ваш заказ\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>\n <span v-html=\"'на сумму ' + $filters.price(total)\"></span>\n </div>\n </div>\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>Редактировать заказ</span>\n </button>\n </template>\n </cart-trigger>\n </div>\n <button @click=\"resertStore\" style=\"position: fixed; bottom: 1px; right: 1px; z-index: 1000\">reset</button>\n <div class=\"checkout-block\">\n <div class=\"wrapper\">\n <div class=\"items-title\">Контактные даные получателя заказа</div>\n <div class=\"user-tabs\" v-if=\"!auth\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" /> Я новый клиент </label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" /> Я постоянный клиент </label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">Или авторизируйтесь через социальные сети:</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">Доставка</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">Очистить</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <component :is=\"item.component\" v-show=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <div class=\"wrapper\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">Оплата</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">Очистить</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"items-title\">Итого</div>\n <div class=\"rows\">\n <div class=\"row\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> на сумму</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"discount\">\n <div class=\"info\">Скидка</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"fee > 0\">\n <div class=\"info\">Сервисный сбор</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row\" v-if=\"shipping\">\n <div class=\"info\">Стоимость доставки</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"info\">К оплате</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(total + fee + shippingPrice)\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" /> Мне можно не перезванивать для оформления заказа </label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">Подтвердить заказ</button>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>Добавить комментарий к заказу</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <div class=\"title\">\n Заказ\n <span>№{{ order.id }}</span> успешно создан!\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">Перейдите к оплате для завершения покупки</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">Перейти к оплате</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">Продолжить покупки</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">Доставка</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\">Оплата</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"checkout-block empty\">\n <div class=\"title\">В корзине пока что нет товаров</div>\n <div class=\"message\">\n Посмотрите предложения на\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">главной странице</a>, <br />воспользуйтесь каталогом или поиском\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">Продолжить покупки</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nmarkRaw(FormText);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n name: 'order-checkout',\n setup() {\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name) => {\n return computed({\n get() {\n return userCheckout.value[name];\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone')\n });\n\n store.dispatch('auth/me', {\n finally: () => {}\n });\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchema = ref({\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n }\n });\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n\n const userValidation = yup.object().shape({\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required'))\n });\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = () => {\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid));\n });\n };\n\n const checkout = () => {\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast('Заполните данные получателя заказа', {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast('Выберите способ доставки', {\n type: 'error'\n });\n } else if (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid) {\n toast('Заполните все поля для доставки: «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast('Выберите вид оплаты', {\n type: 'error'\n });\n } else {\n let data = JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code]));\n delete data.isValid;\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email\n },\n shipping: {\n id: shipping.value,\n data: data\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n } else {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n name: item.name,\n id: item.attributes.code,\n price: item.attributes.price,\n brand: item.attributes.brand,\n category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n purchase: {\n actionField: {\n id: response.data.order.id,\n affiliation: 'mrfix.ua',\n revenue: total.value + fee.value + shippingPrice.value,\n tax: '0',\n shipping: shippingPrice.value\n },\n products: [products]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Checkout',\n 'gtm-ee-event-non-interaction': 'False'\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n resertStore();\n\n // nextTick(() => {\n // redirectForm.value.submit();\n // });\n })\n .catch((e) => {\n toast('Ошибка сохранения заказа', {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","item","Object","setup","options","computed","attributes","length","itemOptions","filter","option","value","indexOf","id","_createElementVNode","_createElementBlock","_ctx","bundle","_hoisted_1","_hoisted_4","_hoisted_5","href","image","src","_hoisted_11","_hoisted_12","_hoisted_13","code","_hoisted_14","_hoisted_15","_hoisted_17","_hoisted_18","quantity","parseInt","_hoisted_19","innerHTML","price","_hoisted_22","priceOld","amount","percent","sum","_hoisted_26","_hoisted_27","_hoisted_28","index","key","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_34","_hoisted_35","_hoisted_36","second","_hoisted_42","_hoisted_43","_hoisted_44","third","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_54","_hoisted_55","_hoisted_56","markRaw","FormText","SchemaForm","SchemaFormFactory","VeeValidatePlugin","window","viewedSwiperOptions","slidesPerView","freeMode","slideClass","mousewheel","forceToAxis","navigation","nextEl","prevEl","observer","observeParents","components","CheckoutItem","toast","useToast","store","useStore","loading","ref","getters","items","total","auth","userCheckout","ifCheckoutReady","redirectForm","thanks","order","redirect","shippingTypes","paymentMethods","userType","userSubmitButton","shippingComponentData","isCommentToggled","dontcall","get","set","commit","comment","watch","substring","field","data","JSON","parse","stringify","user","last_name","email","phone","dispatch","shipping","payment","shippingSelected","find","paymentSelected","shippingPrice","calculatePrice","fee","shippingTypesRestricted","restrictCheck","paymentMethodsRestricted","categoriesInCart","categories","forEach","category_id","push","type","Math","round","elements","restrictions","keys","ok","r","price_min","price_max","restrictedForce","shipping_type","payment_method","includes","restricted","discount","s","$http","post","location","then","response","userSchema","component","label","__","model","mask","useSchemaForm","userValidation","yup","object","shape","string","trim","required","matches","addEventListener","resertStore","facebook","$ziggy","provider","google","loginCallback","pluralize","checkout","isValid","valid","url","products","brand","category","ecommerce","purchase","actionField","affiliation","revenue","tax","event","dataLayer","e","console","error","click","validate","isUserValid","toggleShippingRadio","togglePaymentRadio","shippingStoreData","d","commentMaxLength","home","$env","locale","action","method","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_toDisplayString","_createBlock","_createVNode","onClick","open","style","_hoisted_20","_hoisted_21","_hoisted_24","_hoisted_25","schemaRowClasses","schema","afterForm","_hoisted_32","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_45","icon","_hoisted_49","description","_hoisted_52","_hoisted_53","price_label","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_62","_hoisted_63","_hoisted_65","_hoisted_66","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_76","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_95","onMouseenter","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_106","_hoisted_107","_hoisted_108","submit","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_112","_hoisted_113","_hoisted_116","_hoisted_117","_hoisted_118","_hoisted_121","_hoisted_122","_hoisted_123","_hoisted_127"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("vue"),r=e.defineComponent({name:"viewer",props:{slug:String,code:String,brand:String,category:String},setup:function(r){var o=e.ref(null);return $http.post($ziggy("api.viewed"),{action:"view",slug:r.slug}),e.onMounted((function(){var e=o.value.closest("[shop-product]"),t=e.querySelector("[shop-product-name]").textContent,c=e.querySelector("[shop-product-price]")?e.querySelector("[shop-product-price]").childNodes[0].nodeValue.replace(/ /g,""):null,n={ecommerce:{detail:{products:[{name:t,id:r.code}]}}};c&&(n.ecommerce.detail.products[0].price=c),r.brand&&(n.ecommerce.detail.products[0].brand=r.brand),r.category&&(n.ecommerce.detail.products[0].category=r.category),window.dataLayer&&(window.dataLayer.push({ecommerce:null}),window.dataLayer.push(n))})),{viewer:o}}}),o={class:"is-hidden",ref:"viewer"};r.render=function(r,t,c,n,a,d){return e.openBlock(),e.createElementBlock("span",o,null,512)},module.exports=r;
1
+ "use strict";var e=require("vue"),r=e.defineComponent({name:"viewer",props:{slug:String,code:String,brand:String,category:String},setup:function(r){var t=e.ref(null);return $http.post($ziggy("api.viewed"),{action:"view",slug:r.slug}),e.onMounted((function(){var e=t.value.closest("[shop-product]"),o=e.querySelector("[shop-product-name]").textContent,n=e.querySelector("[shop-product-price]")?e.querySelector("[shop-product-price]").childNodes[0].nodeValue.replace(/ /g,""):null,c={ecommerce:{detail:{products:[{name:o,id:r.code}]}},event:"gtm-ee-event","gtm-ee-event-category":"Ecommerce","gtm-ee-event-action":"Product Details","gtm-ee-event-non-interaction":"True"};n&&(c.ecommerce.detail.products[0].price=n),r.brand&&(c.ecommerce.detail.products[0].brand=r.brand),r.category&&(c.ecommerce.detail.products[0].category=r.category),window.dataLayer&&(window.dataLayer.push({ecommerce:null}),window.dataLayer.push(c))})),{viewer:t}}}),t={class:"is-hidden",ref:"viewer"};r.render=function(r,o,n,c,a,d){return e.openBlock(),e.createElementBlock("span",t,null,512)},module.exports=r;
2
2
  //# sourceMappingURL=Viewer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Viewer.js","sources":["../../../../src/components/shop/viewed/Viewer.vue","../../../../src/components/shop/viewed/Viewer.vue?vue&type=template&id=04148d0e&lang.js"],"sourcesContent":["<template>\n <span class=\"is-hidden\" ref=\"viewer\"></span>\n</template>\n<script>\nimport { ref, onMounted, defineComponent } from \"vue\";\n\nexport default /*#__PURE__*/ defineComponent({\n name: \"viewer\",\n props: {\n slug: String,\n code: String,\n brand: String,\n category: String,\n },\n setup(props) {\n const viewer = ref(null);\n\n $http.post($ziggy(\"api.viewed\"), {\n action: \"view\",\n slug: props.slug,\n });\n\n onMounted(() => {\n const product = viewer.value.closest(\"[shop-product]\");\n const name = product.querySelector(\"[shop-product-name]\").textContent;\n const price = product.querySelector(\"[shop-product-price]\") ? product.querySelector(\"[shop-product-price]\").childNodes[0].nodeValue.replace(/ /g, \"\") : null;\n const code = props.code;\n\n let object = {\n \"ecommerce\": {\n \"detail\": {\n \"products\": [{\n \"name\": name,\n \"id\": code,\n }]\n }\n }\n };\n\n if (price) {\n object.ecommerce.detail.products[0].price = price;\n }\n\n if (props.brand) {\n object.ecommerce.detail.products[0].brand = props.brand;\n }\n\n if (props.category) {\n object.ecommerce.detail.products[0].category = props.category;\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n });\n\n return {\n viewer\n }\n },\n});\n</script>","<template>\n <span class=\"is-hidden\" ref=\"viewer\"></span>\n</template>\n<script>\nimport { ref, onMounted, defineComponent } from \"vue\";\n\nexport default /*#__PURE__*/ defineComponent({\n name: \"viewer\",\n props: {\n slug: String,\n code: String,\n brand: String,\n category: String,\n },\n setup(props) {\n const viewer = ref(null);\n\n $http.post($ziggy(\"api.viewed\"), {\n action: \"view\",\n slug: props.slug,\n });\n\n onMounted(() => {\n const product = viewer.value.closest(\"[shop-product]\");\n const name = product.querySelector(\"[shop-product-name]\").textContent;\n const price = product.querySelector(\"[shop-product-price]\") ? product.querySelector(\"[shop-product-price]\").childNodes[0].nodeValue.replace(/ /g, \"\") : null;\n const code = props.code;\n\n let object = {\n \"ecommerce\": {\n \"detail\": {\n \"products\": [{\n \"name\": name,\n \"id\": code,\n }]\n }\n }\n };\n\n if (price) {\n object.ecommerce.detail.products[0].price = price;\n }\n\n if (props.brand) {\n object.ecommerce.detail.products[0].brand = props.brand;\n }\n\n if (props.category) {\n object.ecommerce.detail.products[0].category = props.category;\n };\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n });\n\n return {\n viewer\n }\n },\n});\n</script>"],"names":["defineComponent","name","props","slug","String","code","brand","category","setup","viewer","ref","$http","post","$ziggy","action","onMounted","product","value","closest","querySelector","textContent","price","childNodes","nodeValue","replace","object","ecommerce","detail","products","window","dataLayer","push","_createElementBlock","_hoisted_1"],"mappings":"oCAM6BA,kBAAgB,CACzCC,KAAM,SACNC,MAAO,CACHC,KAAMC,OACNC,KAAMD,OACNE,MAAOF,OACPG,SAAUH,QAEdI,eAAMN,OACIO,EAASC,MAAI,aAEnBC,MAAMC,KAAKC,OAAO,cAAe,CAC7BC,OAAQ,OACRX,KAAMD,EAAMC,OAGhBY,aAAU,eACAC,EAAUP,EAAOQ,MAAMC,QAAQ,kBAC/BjB,EAAOe,EAAQG,cAAc,uBAAuBC,YACpDC,EAAQL,EAAQG,cAAc,wBAA0BH,EAAQG,cAAc,wBAAwBG,WAAW,GAAGC,UAAUC,QAAQ,KAAM,IAAM,KAGpJC,EAAS,WACI,QACC,UACM,CAAC,MACDxB,KANXC,EAAMG,UAafgB,IACAI,EAAOC,UAAUC,OAAOC,SAAS,GAAGP,MAAQA,GAG5CnB,EAAMI,QACNmB,EAAOC,UAAUC,OAAOC,SAAS,GAAGtB,MAAQJ,EAAMI,OAGlDJ,EAAMK,WACNkB,EAAOC,UAAUC,OAAOC,SAAS,GAAGrB,SAAWL,EAAMK,UAGrDsB,OAAOC,YACPD,OAAOC,UAAUC,KAAK,CAClBL,UAAW,OAGfG,OAAOC,UAAUC,KAAKN,OAIvB,CACHhB,OAAAA,eC5DI,YAAYC,IAAI,8DAA5BsB,4BAAAC"}
1
+ {"version":3,"file":"Viewer.js","sources":["../../../../src/components/shop/viewed/Viewer.vue","../../../../src/components/shop/viewed/Viewer.vue?vue&type=template&id=6d236350&lang.js"],"sourcesContent":["<template>\n <span class=\"is-hidden\" ref=\"viewer\"></span>\n</template>\n<script>\nimport { ref, onMounted, defineComponent } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'viewer',\n props: {\n slug: String,\n code: String,\n brand: String,\n category: String\n },\n setup(props) {\n const viewer = ref(null);\n\n $http.post($ziggy('api.viewed'), {\n action: 'view',\n slug: props.slug\n });\n\n onMounted(() => {\n const product = viewer.value.closest('[shop-product]');\n const name = product.querySelector('[shop-product-name]').textContent;\n const price = product.querySelector('[shop-product-price]') ? product.querySelector('[shop-product-price]').childNodes[0].nodeValue.replace(/ /g, '') : null;\n const code = props.code;\n\n let object = {\n ecommerce: {\n detail: {\n products: [\n {\n name: name,\n id: code\n }\n ]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Product Details',\n 'gtm-ee-event-non-interaction': 'True'\n };\n\n if (price) {\n object.ecommerce.detail.products[0].price = price;\n }\n\n if (props.brand) {\n object.ecommerce.detail.products[0].brand = props.brand;\n }\n\n if (props.category) {\n object.ecommerce.detail.products[0].category = props.category;\n }\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n });\n\n return {\n viewer\n };\n }\n});\n</script>","<template>\n <span class=\"is-hidden\" ref=\"viewer\"></span>\n</template>\n<script>\nimport { ref, onMounted, defineComponent } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'viewer',\n props: {\n slug: String,\n code: String,\n brand: String,\n category: String\n },\n setup(props) {\n const viewer = ref(null);\n\n $http.post($ziggy('api.viewed'), {\n action: 'view',\n slug: props.slug\n });\n\n onMounted(() => {\n const product = viewer.value.closest('[shop-product]');\n const name = product.querySelector('[shop-product-name]').textContent;\n const price = product.querySelector('[shop-product-price]') ? product.querySelector('[shop-product-price]').childNodes[0].nodeValue.replace(/ /g, '') : null;\n const code = props.code;\n\n let object = {\n ecommerce: {\n detail: {\n products: [\n {\n name: name,\n id: code\n }\n ]\n }\n },\n event: 'gtm-ee-event',\n 'gtm-ee-event-category': 'Ecommerce',\n 'gtm-ee-event-action': 'Product Details',\n 'gtm-ee-event-non-interaction': 'True'\n };\n\n if (price) {\n object.ecommerce.detail.products[0].price = price;\n }\n\n if (props.brand) {\n object.ecommerce.detail.products[0].brand = props.brand;\n }\n\n if (props.category) {\n object.ecommerce.detail.products[0].category = props.category;\n }\n\n if (window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n });\n\n return {\n viewer\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","slug","String","code","brand","category","setup","viewer","ref","$http","post","$ziggy","action","onMounted","product","value","closest","querySelector","textContent","price","childNodes","nodeValue","replace","object","ecommerce","detail","products","id","event","window","dataLayer","push","_createElementBlock","_hoisted_1"],"mappings":"oCAM6BA,kBAAgB,CACzCC,KAAM,SACNC,MAAO,CACHC,KAAMC,OACNC,KAAMD,OACNE,MAAOF,OACPG,SAAUH,QAEdI,eAAMN,OACIO,EAASC,MAAI,aAEnBC,MAAMC,KAAKC,OAAO,cAAe,CAC7BC,OAAQ,OACRX,KAAMD,EAAMC,OAGhBY,aAAU,eACAC,EAAUP,EAAOQ,MAAMC,QAAQ,kBAC/BjB,EAAOe,EAAQG,cAAc,uBAAuBC,YACpDC,EAAQL,EAAQG,cAAc,wBAA0BH,EAAQG,cAAc,wBAAwBG,WAAW,GAAGC,UAAUC,QAAQ,KAAM,IAAM,KAGpJC,EAAS,CACTC,UAAW,CACPC,OAAQ,CACJC,SAAU,CACN,CACI3B,KAAMA,EACN4B,GARP3B,EAAMG,SAafyB,MAAO,uCACkB,kCACF,iDACS,QAGhCT,IACAI,EAAOC,UAAUC,OAAOC,SAAS,GAAGP,MAAQA,GAG5CnB,EAAMI,QACNmB,EAAOC,UAAUC,OAAOC,SAAS,GAAGtB,MAAQJ,EAAMI,OAGlDJ,EAAMK,WACNkB,EAAOC,UAAUC,OAAOC,SAAS,GAAGrB,SAAWL,EAAMK,UAGrDwB,OAAOC,YACPD,OAAOC,UAAUC,KAAK,CAClBP,UAAW,OAGfK,OAAOC,UAAUC,KAAKR,OAIvB,CACHhB,OAAAA,eClEI,YAAYC,IAAI,8DAA5BwB,4BAAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perevorot/shop",
3
- "version": "2.0.27",
3
+ "version": "2.0.28",
4
4
  "description": "",
5
5
  "files": [
6
6
  "dist/*"