{"version":3,"sources":["webpack:///./resources/js/src/app/mixins/buttonSizeProperty.mixin.js","webpack:///./resources/js/src/app/components/item/QuantityInput.vue?b65e","webpack:///resources/js/src/app/components/item/QuantityInput.vue","webpack:///./resources/js/src/app/components/item/QuantityInput.vue?2b01","webpack:///./resources/js/src/app/components/item/QuantityInput.vue","webpack:///./resources/js/src/app/components/basket/AddToBasket.vue?4bec","webpack:///resources/js/src/app/components/basket/AddToBasket.vue","webpack:///./resources/js/src/app/components/basket/AddToBasket.vue?d882","webpack:///./resources/js/src/app/components/basket/AddToBasket.vue"],"names":["BUTTON_SIZES","LEGACY_CLASS_MAP","ButtonSizePropertyMixin","props","buttonSize","type","String","default","validator","value","Object","keys","indexOf","computed","buttonSizeClass","hasOwnProperty","this","render","_vm","_h","$createElement","_c","_self","staticClass","ref","attrs","disabled","waiting","$translate","domProps","displayValue","on","change","$event","setValue","target","_v","directives","name","rawName","isMaximum","compMax","expression","class","useAppearance","title","maximumHint","click","increaseValue","isMinimum","minimumHint","decreaseValue","_withStripped","component","options","__file","showQuantity","useLargeScale","canBeAddedToBasket","isLoading","addToBasket","icon","loading","_e","directToItem","$ceres","isItemView","quantity","timeout","min","minimumQuantity","max","maximumQuantity","interval","intervalQuantity","variationId","isSalable","allVariationsSelected","updateQuantity","handleButtonState","buttonLockState","buttonClasses","style","paddingInlineStyles","_f","_s","hasPrice","tooltipText","isWishList","role","extractPropertiesAndSurcharge","orderProperties"],"mappings":"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","file":"chunks/ceres-0.min.js","sourcesContent":["const BUTTON_SIZES = [\"btn-sm\", \"btn-lg\"];\n\nconst LEGACY_CLASS_MAP = {\n \"sm\": \"btn-sm\",\n \"md\": \"\",\n \"lg\": \"btn-lg\"\n};\n\nexport const ButtonSizePropertyMixin =\n{\n props: {\n buttonSize:\n {\n type: [String, null],\n default: null,\n validator: value =>\n {\n return [\n \"\",\n ...BUTTON_SIZES,\n ...Object.keys(LEGACY_CLASS_MAP)\n ].indexOf(value) !== -1;\n }\n }\n },\n\n computed: {\n buttonSizeClass()\n {\n if (LEGACY_CLASS_MAP.hasOwnProperty(this.buttonSize))\n {\n return LEGACY_CLASS_MAP[this.buttonSize];\n }\n\n return this.buttonSize;\n }\n }\n};\n","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"qty-box d-flex h-100\" }, [\n _c(\"input\", {\n ref: \"quantityInputField\",\n staticClass: \"qty-input text-center\",\n attrs: {\n type: \"text\",\n disabled: _vm.waiting,\n \"aria-label\": _vm.$translate(\"Ceres::Template.itemQuantityInput\")\n },\n domProps: { value: _vm.displayValue },\n on: {\n change: function($event) {\n return _vm.setValue($event.target.value)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"qty-btn-container d-flex flex-column\" }, [\n _c(\n \"button\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip\",\n value: _vm.isMaximum && _vm.compMax !== 0,\n expression: \"isMaximum && compMax !== 0\"\n }\n ],\n staticClass:\n \"btn qty-btn flex-fill d-flex justify-content-center p-0\",\n class: {\n disabled: _vm.isMaximum || _vm.waiting,\n \"btn-appearance\": _vm.useAppearance\n },\n attrs: {\n \"data-toggle\": \"tooltip\",\n \"data-placement\": \"top\",\n \"data-testing\": \"quantity-btn-increase\",\n title: _vm.maximumHint,\n \"aria-label\": _vm.$translate(\n \"Ceres::Template.itemQuantityInputIncrease\"\n )\n },\n on: {\n click: function($event) {\n return _vm.increaseValue()\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"fa fa-plus default-float\",\n attrs: { \"aria-hidden\": \"true\" }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip\",\n value: _vm.isMinimum && _vm.compMax !== 0,\n expression: \"isMinimum && compMax !== 0\"\n }\n ],\n staticClass:\n \"btn qty-btn flex-fill d-flex justify-content-center p-0\",\n class: {\n disabled: _vm.isMinimum || _vm.waiting,\n \"btn-appearance\": _vm.useAppearance\n },\n attrs: {\n \"data-toggle\": \"tooltip\",\n \"data-placement\": \"bottom\",\n \"data-testing\": \"quantity-btn-decrease\",\n title: _vm.minimumHint,\n \"aria-label\": _vm.$translate(\n \"Ceres::Template.itemQuantityInputDecrease\"\n )\n },\n on: {\n click: function($event) {\n return _vm.decreaseValue()\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"fa fa-minus default-float\",\n attrs: { \"aria-hidden\": \"true\" }\n })\n ]\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<template>\n <div class=\"qty-box d-flex h-100\">\n <input class=\"qty-input text-center\"\n type=\"text\"\n :value=\"displayValue\"\n @change=\"setValue($event.target.value)\"\n :disabled=\"waiting\"\n ref=\"quantityInputField\"\n :aria-label=\"$translate('Ceres::Template.itemQuantityInput')\">\n\n <div class=\"qty-btn-container d-flex flex-column\">\n <button class=\"btn qty-btn flex-fill d-flex justify-content-center p-0\"\n @click=\"increaseValue()\"\n :class=\"{ 'disabled': isMaximum || waiting, 'btn-appearance': useAppearance }\"\n v-tooltip=\"isMaximum && compMax !== 0\"\n data-toggle=\"tooltip\"\n data-placement=\"top\"\n data-testing=\"quantity-btn-increase\"\n :title=\"maximumHint\"\n :aria-label=\"$translate('Ceres::Template.itemQuantityInputIncrease')\">\n <i class=\"fa fa-plus default-float\" aria-hidden=\"true\"></i>\n </button>\n\n <button class=\"btn qty-btn flex-fill d-flex justify-content-center p-0\"\n @click=\"decreaseValue()\"\n :class=\"{ 'disabled': isMinimum || waiting, 'btn-appearance': useAppearance }\"\n v-tooltip=\"isMinimum && compMax !== 0\"\n data-toggle=\"tooltip\"\n data-placement=\"bottom\"\n data-testing=\"quantity-btn-decrease\"\n :title=\"minimumHint\"\n :aria-label=\"$translate('Ceres::Template.itemQuantityInputDecrease')\">\n <i class=\"fa fa-minus default-float\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n</template>\n\n<script>\nimport { floatLength, formatFloat, limit } from \"../../helper/number\";\nimport { defaultValue, isDefined, isNullOrUndefined } from \"../../helper/utils\";\nimport { debounce } from \"../../helper/debounce\";\nimport { mapState } from \"vuex\";\n\nexport default {\n name: \"quantity-input\",\n\n props: {\n value: {\n type: Number,\n required: true\n },\n timeout: {\n type: Number,\n required: false,\n default: 500\n },\n min: {\n type: Number,\n required: false,\n default: 0\n },\n max: {\n type: Number,\n required: false\n },\n interval: {\n type: Number,\n required: false,\n default: 1\n },\n waiting: {\n type: Boolean,\n required: false\n },\n variationId: {\n type: Number,\n required: false\n },\n useAppearance: Boolean\n },\n\n data()\n {\n return {\n compValue: this.value,\n compMin: this.min,\n compMax: this.max,\n compInterval: this.interval,\n compDecimals: 0,\n onValueChanged: null\n };\n },\n\n created()\n {\n this.compInterval = defaultValue(this.compInterval, 1);\n this.compInterval = this.compInterval === 0 ? 1 : this.compInterval;\n\n const minDecimals = floatLength(this.min);\n const intervalDecimals = floatLength(this.compInterval);\n\n this.compDecimals = Math.max(minDecimals, intervalDecimals);\n\n this.onValueChanged = debounce(() =>\n {\n this.$emit(\"quantity-change\", this.compValue);\n }, defaultValue(this.timeout, 500));\n\n if (!isNullOrUndefined(this.variationId))\n {\n this.fetchQuantityFromBasket();\n }\n },\n\n computed:\n {\n variationBasketQuantity()\n {\n if (isNullOrUndefined(this.variationId))\n {\n return 0;\n }\n\n if(this.itemSetVariationId <= 0 || this.variationId === this.itemSetVariationId)\n {\n const basketObject = this.$store.state.basket.items.find(variations => variations.variationId === this.variationId);\n\n return basketObject ? basketObject.quantity : 0;\n }\n\n return 0;\n },\n\n isMinimum()\n {\n return isDefined(this.compMin) && (this.compValue - this.compInterval) < this.compMin;\n },\n\n isMaximum()\n {\n return isDefined(this.compMax) && (this.compValue + this.compInterval) > this.compMax;\n },\n\n minimumHint()\n {\n return this.$translate(\n \"Ceres::Template.singleItemQuantityMin\",\n {\n min: this.$options.filters.numberFormat(this.compMin)\n }\n );\n },\n\n maximumHint()\n {\n return this.$translate(\n \"Ceres::Template.singleItemQuantityMax\",\n {\n max: this.$options.filters.numberFormat(this.max)\n }\n );\n },\n\n displayValue()\n {\n return this.$options.filters.numberFormat(this.compValue);\n },\n\n itemSetVariationId()\n {\n if (this.$store.state.items.itemSetId > 0)\n {\n return this.$store.getters[`${this.$store.state.items.itemSetId}/currentItemVariation`].variation.id;\n }\n\n return 0;\n },\n\n ...mapState({\n basketItems: state => state.basket.items\n })\n },\n\n watch:\n {\n variationId(newValue)\n {\n if (isDefined(newValue))\n {\n this.fetchQuantityFromBasket();\n }\n },\n\n basketItems:\n {\n handler(newValue, oldValue)\n {\n if (isDefined(this.variationId))\n {\n this.fetchQuantityFromBasket();\n }\n },\n deep: true\n },\n\n min(newValue)\n {\n this.compMin = newValue;\n this.fetchQuantityFromBasket();\n },\n\n max(newValue)\n {\n this.compMax = newValue;\n this.fetchQuantityFromBasket();\n },\n\n value(newValue, oldValue)\n {\n if (newValue !== oldValue)\n {\n this.setValue(newValue);\n }\n },\n\n interval(newInterval)\n {\n this.compInterval = defaultValue(newInterval, 1)\n }\n },\n\n methods:\n {\n increaseValue()\n {\n const newValue = formatFloat(this.compValue + this.compInterval, this.compDecimals);\n\n if ((isNullOrUndefined(this.compMax) || newValue <= this.compMax) && !this.waiting)\n {\n this.setValue(newValue);\n }\n },\n\n decreaseValue()\n {\n const newValue = formatFloat(this.compValue - this.compInterval, this.compDecimals);\n\n if ((isNullOrUndefined(this.compMin) || newValue >= this.compMin) && !this.waiting)\n {\n this.setValue(newValue);\n }\n },\n\n setValue(value)\n {\n // consider the configured decimal seperator (if the input is typed in the input field)\n if (typeof value === \"string\")\n {\n value = value.replace(App.decimalSeparator || \",\", \".\");\n }\n\n value = parseFloat(value);\n if (isNaN(value))\n {\n value = defaultValue(this.compMin, 1);\n }\n\n // limit new value to min/ max value\n value = limit(value, this.compMin, this.compMax);\n\n // make sure, new value is an even multiple of interval\n let diff;\n if (this.variationBasketQuantity === 0 && this.min !== 0)\n {\n diff = formatFloat((value - this.min) % this.compInterval, this.compDecimals, true);\n }\n else\n {\n diff = formatFloat(value % this.compInterval, this.compDecimals, true);\n }\n\n if (diff > 0 && diff !== this.compInterval)\n {\n if (diff < this.compInterval / 2)\n {\n value -= diff;\n }\n else\n {\n value += this.compInterval - diff;\n }\n value = limit(value, this.compMin, this.compMax);\n }\n\n // cut fraction\n value = formatFloat(value, this.compDecimals);\n\n if (value !== this.compValue)\n {\n this.compValue = value;\n this.onValueChanged();\n }\n else if (!isNullOrUndefined(this.$refs.quantityInputField))\n {\n this.$refs.quantityInputField.value = this.displayValue;\n }\n },\n\n fetchQuantityFromBasket()\n {\n if (!isNullOrUndefined(this.min) && this.variationBasketQuantity >= this.min && this.variationBasketQuantity !== 0)\n {\n // set the minimum value to the interval, if the item is already in the basket\n this.compMin = this.compInterval;\n }\n else if (this.variationBasketQuantity === 0)\n {\n // reset the minimum, when item is not in the basket\n this.compMin = this.min;\n }\n\n if (!isNullOrUndefined(this.max))\n {\n // decrease maximum quantity by quantity of variations already in basket\n this.compMax = this.max - this.variationBasketQuantity;\n\n if (this.variationBasketQuantity + this.compInterval > this.max)\n {\n this.compMin = 0;\n this.compMax = 0;\n this.$emit(\"out-of-stock\", true);\n }\n else\n {\n this.$emit(\"out-of-stock\", false);\n }\n }\n else\n {\n this.$emit(\"out-of-stock\", false);\n }\n\n this.setValue(this.compMin);\n }\n }\n}\n</script>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuantityInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuantityInput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./QuantityInput.vue?vue&type=template&id=62163595&\"\nimport script from \"./QuantityInput.vue?vue&type=script&lang=js&\"\nexport * from \"./QuantityInput.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/runner/work/plugin-ceres/plugin-ceres/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('62163595')) {\n api.createRecord('62163595', component.options)\n } else {\n api.reload('62163595', component.options)\n }\n module.hot.accept(\"./QuantityInput.vue?vue&type=template&id=62163595&\", function () {\n api.rerender('62163595', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/js/src/app/components/item/QuantityInput.vue\"\nexport default component.exports","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n !_vm.showQuantity && _vm.useLargeScale && _vm.canBeAddedToBasket\n ? _c(\n \"div\",\n {\n directives: [{ name: \"tooltip\", rawName: \"v-tooltip\" }],\n staticClass: \"add-to-basket-lg-container d-none d-lg-block\",\n class: { \"no-pointer-events\": _vm.isLoading },\n attrs: {\n \"data-toggle\": \"tooltip\",\n \"data-placement\": \"top\",\n title: _vm.$translate(\"Ceres::Template.singleItemAddToBasket\")\n },\n on: {\n click: function($event) {\n return _vm.addToBasket()\n }\n }\n },\n [\n _c(\"icon\", {\n staticClass: \"fa-lg mobile-icon-right\",\n attrs: { icon: \"cart-plus\", loading: _vm.isLoading }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.showQuantity && _vm.useLargeScale && !_vm.canBeAddedToBasket\n ? _c(\n \"div\",\n {\n directives: [{ name: \"tooltip\", rawName: \"v-tooltip\" }],\n staticClass: \"add-to-basket-lg-container d-none d-lg-block\",\n attrs: {\n \"data-toggle\": \"tooltip\",\n \"data-placement\": \"top\",\n title: _vm.$translate(\"Ceres::Template.itemShowItem\")\n },\n on: {\n click: function($event) {\n return _vm.directToItem()\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"fa fa-arrow-right fa-lg d-none d-sm-block\"\n })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showQuantity && !_vm.useLargeScale\n ? _c(\n \"div\",\n {\n staticClass: \"d-inline\",\n class: { \"d-lg-none\": !_vm.$ceres.isItemView }\n },\n [\n _c(\"div\", { staticClass: \"add-to-basket-container\" }, [\n _c(\n \"div\",\n { staticClass: \"quantity-input-container\" },\n [\n _c(\"quantity-input\", {\n attrs: {\n value: _vm.quantity,\n timeout: 0,\n min: _vm.minimumQuantity,\n max: _vm.maximumQuantity,\n interval: _vm.intervalQuantity,\n \"variation-id\": _vm.variationId,\n waiting:\n _vm.isLoading ||\n !_vm.isSalable ||\n !_vm.allVariationsSelected\n },\n on: {\n \"quantity-change\": _vm.updateQuantity,\n \"out-of-stock\": _vm.handleButtonState\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n !_vm.allVariationsSelected || !_vm.isSalable\n ? _c(\n \"button\",\n {\n directives: [{ name: \"tooltip\", rawName: \"v-tooltip\" }],\n staticClass:\n \"btn btn-block btn-primary btn-appearance disabled\",\n class: _vm.buttonClasses,\n style: _vm.paddingInlineStyles,\n attrs: {\n \"data-toggle\": \"tooltip\",\n \"data-placement\": \"top\",\n title: _vm.tooltipText\n }\n },\n [\n _c(\"i\", {\n staticClass: \"fa fa-shopping-cart\",\n attrs: { \"aria-hidden\": \"true\" }\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$translate(\n \"Ceres::Template.singleItemAddToBasket\"\n )\n ) +\n \"\\n \"\n )\n ]\n )\n : !_vm.buttonLockState\n ? _c(\n \"button\",\n {\n staticClass: \"btn btn-block btn-primary btn-appearance\",\n class: _vm.buttonClasses,\n style: _vm.paddingInlineStyles,\n attrs: { disabled: _vm.isLoading || !_vm.hasPrice },\n on: {\n click: function($event) {\n return _vm.addToBasket()\n }\n }\n },\n [\n _c(\"icon\", {\n attrs: { icon: \"shopping-cart\", loading: _vm.isLoading }\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$translate(\n \"Ceres::Template.singleItemAddToBasket\"\n )\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _c(\n \"button\",\n {\n directives: [{ name: \"tooltip\", rawName: \"v-tooltip\" }],\n staticClass:\n \"btn btn-block btn-primary btn-appearance disabled\",\n class: _vm.buttonClasses,\n style: _vm.paddingInlineStyles,\n attrs: {\n \"data-toggle\": \"tooltip\",\n \"data-placement\": \"top\",\n title: _vm._f(\n \"translate\"\n )(\"Ceres::Template.singleItemQuantityMax\", {\n max: _vm.maximumQuantity\n })\n }\n },\n [\n _c(\"icon\", {\n attrs: { icon: \"shopping-cart\", waiting: _vm.isLoading }\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$translate(\n \"Ceres::Template.singleItemAddToBasket\"\n )\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.showQuantity && !_vm.useLargeScale\n ? _c(\n \"div\",\n { staticClass: \"d-inline\", class: { \"d-lg-none\": !_vm.isWishList } },\n [\n _c(\n \"div\",\n {\n staticClass: \"btn-group\",\n attrs: { role: \"group\", \"aria-label\": \"Thumb Control\" }\n },\n [\n _vm.canBeAddedToBasket\n ? _c(\n \"button\",\n {\n staticClass:\n \"btn btn-primary btn-appearance mobile-width-button\",\n class: { \"no-pointer-events\": _vm.isLoading },\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n return _vm.addToBasket()\n }\n }\n },\n [\n _c(\"icon\", {\n staticClass: \"fa-lg mobile-icon-right\",\n attrs: {\n icon: \"shopping-cart\",\n loading: _vm.isLoading\n }\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$translate(\n \"Ceres::Template.singleItemAddToBasket\"\n )\n ) +\n \"\\n \"\n )\n ],\n 1\n )\n : _c(\n \"button\",\n {\n staticClass:\n \"btn btn-primary btn-appearance mobile-width-button\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n return _vm.directToItem()\n }\n }\n },\n [\n _c(\"i\", {\n staticClass:\n \"fa fa-arrow-right fa-lg d-none d-sm-block\",\n attrs: { \"aria-hidden\": \"true\" }\n }),\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.$translate(\"Ceres::Template.itemShowItem\")\n ) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n ]\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<template>\n <div>\n <div :class=\"{'no-pointer-events': isLoading}\" class=\"add-to-basket-lg-container d-none d-lg-block\" v-if=\"!showQuantity && useLargeScale && canBeAddedToBasket\"\n v-tooltip data-toggle=\"tooltip\" data-placement=\"top\" :title=\"$translate('Ceres::Template.singleItemAddToBasket')\" @click=\"addToBasket()\">\n <icon icon=\"cart-plus\" class=\"fa-lg mobile-icon-right\" :loading=\"isLoading\"></icon>\n </div>\n\n <div class=\"add-to-basket-lg-container d-none d-lg-block\" v-if=\"!showQuantity && useLargeScale && !canBeAddedToBasket\"\n v-tooltip data-toggle=\"tooltip\" data-placement=\"top\" :title=\"$translate('Ceres::Template.itemShowItem')\" @click=\"directToItem()\">\n <i class=\"fa fa-arrow-right fa-lg d-none d-sm-block\"></i>\n </div>\n\n <div class=\"d-inline\" v-if=\"showQuantity && !useLargeScale\" :class=\"{'d-lg-none': !$ceres.isItemView }\">\n <div class=\"add-to-basket-container\">\n <div class=\"quantity-input-container\">\n <quantity-input :value=\"quantity\"\n @quantity-change=\"updateQuantity\"\n @out-of-stock=\"handleButtonState\"\n :timeout=\"0\"\n :min=\"minimumQuantity\"\n :max=\"maximumQuantity\"\n :interval=\"intervalQuantity\"\n :variation-id=\"variationId\"\n :waiting=\"isLoading || !isSalable || !allVariationsSelected\">\n </quantity-input>\n </div>\n\n <button\n v-if=\"!allVariationsSelected || !isSalable\"\n class=\"btn btn-block btn-primary btn-appearance disabled\"\n v-tooltip\n data-toggle=\"tooltip\"\n data-placement=\"top\"\n :title=\"tooltipText\"\n :class=\"buttonClasses\"\n :style=\"paddingInlineStyles\">\n <i class=\"fa fa-shopping-cart\" aria-hidden=\"true\"></i>\n {{ $translate(\"Ceres::Template.singleItemAddToBasket\") }}\n </button>\n <button\n v-else-if=\"!buttonLockState\"\n :disabled=\"isLoading || !hasPrice\"\n class=\"btn btn-block btn-primary btn-appearance\"\n @click=\"addToBasket()\"\n :class=\"buttonClasses\"\n :style=\"paddingInlineStyles\">\n <icon icon=\"shopping-cart\" :loading=\"isLoading\"></icon>\n {{ $translate(\"Ceres::Template.singleItemAddToBasket\") }}\n </button>\n <button v-else\n class=\"btn btn-block btn-primary btn-appearance disabled\"\n v-tooltip\n data-toggle=\"tooltip\"\n data-placement=\"top\"\n :title=\"'Ceres::Template.singleItemQuantityMax' | translate({ max: maximumQuantity })\"\n :class=\"buttonClasses\"\n :style=\"paddingInlineStyles\">\n <icon icon=\"shopping-cart\" :waiting=\"isLoading\"></icon>\n {{ $translate(\"Ceres::Template.singleItemAddToBasket\") }}\n </button>\n </div>\n </div>\n\n <div class=\"d-inline\" v-if=\"!showQuantity && !useLargeScale\" :class=\"{'d-lg-none': !isWishList }\">\n <div class=\"btn-group\" role=\"group\" aria-label=\"Thumb Control\">\n <button type=\"button\" :class=\"{'no-pointer-events': isLoading}\" v-if=\"canBeAddedToBasket\" class=\"btn btn-primary btn-appearance mobile-width-button\" @click=\"addToBasket()\">\n <icon icon=\"shopping-cart\" class=\"fa-lg mobile-icon-right\" :loading=\"isLoading\"></icon>\n {{ $translate(\"Ceres::Template.singleItemAddToBasket\") }}\n </button>\n <button type=\"button\" v-else class=\"btn btn-primary btn-appearance mobile-width-button\" @click=\"directToItem()\">\n <i class=\"fa fa-arrow-right fa-lg d-none d-sm-block\" aria-hidden=\"true\"></i>\n {{ $translate(\"Ceres::Template.itemShowItem\") }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport ExceptionMap from \"../../exceptions/ExceptionMap\";\nimport { navigateTo } from \"../../services/UrlService\";\nimport { isNullOrUndefined, isDefined } from \"../../helper/utils\";\nimport { mapState } from \"vuex\";\nimport { ButtonSizePropertyMixin } from \"../../mixins/buttonSizeProperty.mixin\";\nimport QuantityInput from \"../item/QuantityInput.vue\";\n\nconst NotificationService = require(\"../../services/NotificationService\");\n\nexport default {\n name: \"add-to-basket\",\n\n mixins: [ButtonSizePropertyMixin],\n \n components:\n {\n QuantityInput\n },\n\n props:\n {\n itemUrl: String,\n showQuantity:\n {\n type: Boolean,\n default: false\n },\n useLargeScale:\n {\n type: Boolean,\n default: false\n },\n variationId:\n {\n type: Number\n },\n isSalable:\n {\n type: Boolean,\n default: false\n },\n hasChildren:\n {\n type: Boolean,\n default: false\n },\n intervalQuantity:\n {\n type: Number,\n default: 1\n },\n minimumQuantity:\n {\n type: Number,\n default: 0\n },\n maximumQuantity:\n {\n type: Number,\n default: null\n },\n orderProperties:\n {\n type: Array,\n default: () => []\n },\n hasOrderProperties:\n {\n type: Boolean,\n default: false\n },\n hasRequiredOrderProperty:\n {\n type: Boolean,\n default: false\n },\n hasPrice:\n {\n type: Boolean,\n default: true\n },\n hasGraduatedPrice:\n {\n type: Boolean,\n default: false\n },\n paddingClasses:\n {\n type: String,\n default: null\n },\n paddingInlineStyles:\n {\n type: String,\n default: null\n },\n isWishList:\n {\n type: Boolean,\n default: false\n },\n propQuantity:\n {\n type: Number,\n default: null\n },\n itemType:\n {\n type: String,\n default: null\n }\n },\n\n inject: {\n itemId: {\n default: null\n }\n },\n\n computed:\n {\n isSet()\n {\n return (\n this.$store.state.items[this.itemId]\n && this.$store.state.items[this.itemId].variation\n && this.$store.state.items[this.itemId].variation.documents[0].data.item.itemType === \"set\"\n ) || this.itemType === \"set\";\n },\n\n canBeAddedToBasket()\n {\n return this.isSalable &&\n !this.hasChildren &&\n !(this.minimumQuantity != 1 || this.intervalQuantity != 1) &&\n !this.requiresProperties &&\n this.hasPrice &&\n !this.hasGraduatedPrice &&\n !this.isSet;\n },\n\n requiresProperties()\n {\n return (App.config.item.requireOrderProperties && \n (this.hasOrderProperties || this.orderProperties.filter(property => property.property.isShownOnItemPage).length > 0)) ||\n this.hasRequiredOrderProperty;\n },\n\n buttonClasses()\n {\n const classes = [];\n\n if (isDefined(this.buttonSizeClass))\n {\n classes.push(this.buttonSizeClass);\n }\n\n if (isDefined(this.paddingClasses))\n {\n classes.push(this.paddingClasses.split(\" \"));\n }\n\n return classes;\n },\n\n tooltipText()\n {\n if (this.hasAvailableVariations)\n {\n return this.$translate(\"Ceres::Template.singleItemPleaseSelectValidVariation\");\n }\n else\n {\n return this.$translate(\"Ceres::Template.singleItemPleaseSelectNotAvailable\");\n }\n },\n\n variationOrderQuantity()\n {\n return this.$store.state.items[this.itemId] && this.$store.state.items[this.itemId].variationOrderQuantity;\n },\n\n variationMissingProperties()\n {\n return this.$store.getters[`${this.itemId}/variationMissingProperties`];\n },\n\n hasAvailableVariations()\n {\n return this.$store.state.items[this.itemId]\n && this.$store.state.items[this.itemId].variationSelect\n && this.$store.state.items[this.itemId].variationSelect.variations.some(variation => variation.isSalable);\n },\n\n allVariationsSelected()\n {\n if (this.isSet)\n {\n return this.$store.getters[\"itemSetAllVariationSelected\"];\n }\n else\n {\n // FIX return true if module is not registered. This equals the default value from the module\n // and is required to use this component in other contexts, e.g. the category view\n return !this.$store.state.items[this.itemId]\n || (this.$store.state.items[this.itemId].variationSelect\n && this.$store.state.items[this.itemId].variationSelect.isVariationSelected);\n }\n },\n\n isLoading()\n {\n return this.$store.state.items.isAddToBasketLoading === this.variationId || this.$store.state.items.isSetLoading;\n },\n\n ...mapState({\n basketItems: state => state.basket.items,\n isBasketLoading: state => state.basket.isBasketLoading\n })\n },\n\n data()\n {\n return {\n quantity: 1,\n buttonLockState: false\n };\n },\n\n methods:\n {\n /**\n * add an item to basket-resource\n */\n addToBasket()\n {\n this.$store.dispatch(\"loadComponent\", \"add-item-to-basket-overlay\");\n this.$store.dispatch(\"loadComponent\", \"basket-preview\");\n\n if (this.variationMissingProperties !== undefined && this.variationMissingProperties.length)\n {\n this.showMissingPropertiesError();\n }\n else if (this.isSalable || this.isSet)\n {\n this.$store.commit(\"setIsAddToBasketLoading\", this.variationId);\n\n const orderParamsAndSurcharge = extractPropertiesAndSurcharge(this.orderProperties);\n\n const basketObject =\n {\n variationId : this.variationId,\n quantity : this.quantity,\n basketItemOrderParams : orderParamsAndSurcharge.orderParams,\n totalOrderParamsMarkup : orderParamsAndSurcharge.totalSurcharge\n };\n\n if(this.isSet)\n {\n const setComponents = [];\n this.$store.state.items.setComponentIds.forEach(itemId =>\n {\n const setComponent = this.$store.getters[`${itemId}/currentItemVariation`];\n\n const variationId = setComponent && setComponent.variation.id;\n\n // Extract order properties and total surcharge for set components\n const setComponentOrderParamsAndSurcharge = extractPropertiesAndSurcharge(\n setComponent.properties.filter(prop => prop.property.isOderProperty)\n );\n\n setComponents.push({\n variationId: variationId,\n quantity: this.$store.state.items[itemId].variationOrderQuantity,\n basketItemOrderParams: setComponentOrderParamsAndSurcharge.orderParams,\n totalOrderParamsMarkup: setComponentOrderParamsAndSurcharge.totalSurcharge\n });\n });\n basketObject.setComponents = setComponents;\n }\n\n this.$store.dispatch(\"addBasketItem\", basketObject).then(\n response =>\n {\n document.dispatchEvent(new CustomEvent(\"afterBasketItemAdded\", { detail: basketObject }));\n this.$store.commit(\"setIsAddToBasketLoading\", 0);\n },\n error =>\n {\n this.$store.commit(\"setIsAddToBasketLoading\", 0);\n\n if (error.data)\n {\n NotificationService.error(\n this.$translate(\n \"Ceres::Template.\" + ExceptionMap.get(error.data.exceptionCode.toString()),\n error.data.placeholder\n )\n ).closeAfter(5000);\n }\n });\n }\n },\n showMissingPropertiesError()\n {\n this.$store.commit(`${this.itemId}/setVariationMarkInvalidProps`, true);\n\n const propertyNames = this.variationMissingProperties.map(property => property.property.names.name);\n let errorMsgContent = \"\";\n\n for (const name of propertyNames)\n {\n errorMsgContent += name + \"<br>\";\n }\n\n NotificationService.error(this.$translate(\"Ceres::Template.singleItemMissingOrderPropertiesError\").replace(\"<properties>\", errorMsgContent));\n },\n\n directToItem()\n {\n navigateTo(this.itemUrl);\n },\n\n handleButtonState(value)\n {\n this.buttonLockState = value;\n },\n\n /**\n * update the property quantity of the current instance\n * @param value\n */\n updateQuantity(value)\n {\n this.quantity = value;\n }\n },\n\n watch:\n {\n quantity(value)\n {\n if(!isNullOrUndefined(this.itemId))\n {\n this.$store.commit(`${this.itemId}/setVariationOrderQuantity`, value);\n this.$store.commit(`${this.itemId}/setVariationPropertySurcharges`, this.$store.getters[`${this.itemId}/variationBasePrice`]);\n }\n },\n\n variationOrderQuantity(value)\n {\n if (this.quantity !== value)\n {\n this.quantity = value;\n }\n },\n\n propQuantity(value)\n {\n if (!isNaN(value))\n {\n this.quantity = value;\n }\n }\n }\n}\n\nfunction extractPropertiesAndSurcharge(orderProperties)\n{\n let totalSurcharge = 0;\n const orderParams = [];\n\n orderProperties.forEach((orderProperty) =>\n {\n if(!isNullOrUndefined(orderProperty.property.value))\n {\n const property = orderProperty.property;\n\n if (property.valueType === \"float\" &&\n !isNullOrUndefined(property.value) &&\n property.value.slice(-1) === App.decimalSeparator)\n {\n property.value = property.value.substr(0, property.value.length - 1);\n }\n\n totalSurcharge += (orderProperty.surcharge || 0) + (property.surcharge || 0);\n\n orderParams.push({\n propertyId: property.id,\n type: property.valueType,\n name: property.names.name,\n value: property.value\n });\n }\n });\n\n return {\n orderParams: orderParams,\n totalSurcharge: totalSurcharge\n };\n}\n</script>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AddToBasket.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AddToBasket.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AddToBasket.vue?vue&type=template&id=729fe3ab&\"\nimport script from \"./AddToBasket.vue?vue&type=script&lang=js&\"\nexport * from \"./AddToBasket.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/runner/work/plugin-ceres/plugin-ceres/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('729fe3ab')) {\n api.createRecord('729fe3ab', component.options)\n } else {\n api.reload('729fe3ab', component.options)\n }\n module.hot.accept(\"./AddToBasket.vue?vue&type=template&id=729fe3ab&\", function () {\n api.rerender('729fe3ab', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"resources/js/src/app/components/basket/AddToBasket.vue\"\nexport default component.exports"],"sourceRoot":""}