{"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":""}