{"version":3,"sources":["webpack:///./resources/js/src/app/woerner/QuantityInputWoerner.vue?9188","webpack:///resources/js/src/app/woerner/QuantityInputWoerner.vue","webpack:///./resources/js/src/app/woerner/QuantityInputWoerner.vue?95fe","webpack:///./resources/js/src/app/woerner/QuantityInputWoerner.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","ref","attrs","type","disabled","waiting","$translate","domProps","value","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"],"mappings":"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","file":"chunks/ceres-46.min.js","sourcesContent":["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            \"aria-label\": _vm.$translate(\n              \"Ceres::Template.itemQuantityInputDecrease\"\n            ),\n            title: _vm.maximumHint\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            \"aria-label\": _vm.$translate(\n              \"Ceres::Template.itemQuantityInputDecrease\"\n            ),\n            title: _vm.minimumHint\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               :aria-label=\"$translate('Ceres::Template.itemQuantityInput')\"\n               ref=\"quantityInputField\">\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                :aria-label=\"$translate('Ceres::Template.itemQuantityInputDecrease')\"\n                 :title=\"maximumHint\">\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                 :aria-label=\"$translate('Ceres::Template.itemQuantityInputDecrease')\"\n                 :title=\"minimumHint\">\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        itemId:0\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        this.compDecimals = floatLength(this.compInterval);\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.min\n                }\n            );\n        },\n\n        maximumHint()\n        {\n            return this.$translate(\n                \"Ceres::Template.singleItemQuantityMax\",\n                {\n                    max: 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        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\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            const diff = formatFloat(value % this.compInterval, this.compDecimals, true);\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 = value;\n            }\n        },\n\n        fetchQuantityFromBasket()\n        {\n            if (!isNullOrUndefined(this.min) && this.variationBasketQuantity >= this.min && this.variationBasketQuantity !== 0)\n            {\n                // minimum quantity already in basket\n                this.compMin = this.compInterval;\n            }\n            else if (this.variationBasketQuantity === 0)\n            {\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!./QuantityInputWoerner.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!./QuantityInputWoerner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./QuantityInputWoerner.vue?vue&type=template&id=4b64ca87&\"\nimport script from \"./QuantityInputWoerner.vue?vue&type=script&lang=js&\"\nexport * from \"./QuantityInputWoerner.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(\"C:\\\\Users\\\\lenna\\\\Arbeit\\\\Plenty\\\\Plenty1\\\\51881\\\\189\\\\Woerner\\\\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('4b64ca87')) {\n      api.createRecord('4b64ca87', component.options)\n    } else {\n      api.reload('4b64ca87', component.options)\n    }\n    module.hot.accept(\"./QuantityInputWoerner.vue?vue&type=template&id=4b64ca87&\", function () {\n      api.rerender('4b64ca87', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"resources/js/src/app/woerner/QuantityInputWoerner.vue\"\nexport default component.exports"],"sourceRoot":""}