{"version":3,"sources":["webpack:///resources/js/src/app/components/basket/Coupon.vue","webpack:///./resources/js/src/app/components/basket/Coupon.vue?36ed","webpack:///./resources/js/src/app/components/basket/Coupon.vue","webpack:///./resources/js/src/app/components/basket/Coupon.vue?523c","webpack:///./resources/js/src/app/components/basket/Coupon.vue?6b15"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;;AAEA;AACA;AACA;AAEA;AACA,gBADA;AAGA;AACA,cACA;AACA,kBADA;AAEA;AAFA;AAFA,GAHA;AAWA,MAXA,kBAYA;AACA;AACA,oBADA;AAEA;AAFA;AAIA,GAjBA;AAmBA,SACA;AACA,sBADA,8BACA,GADA,EAEA;AACA;AACA;AAJA,GApBA;AA2BA;AAEA,YAFA,sBAGA;AACA,mCACA;AACA;AACA;;AAEA;AACA;AAVA,KAYA;AACA;AAAA;AAAA,KADA;AAEA;AAAA;AAAA,KAFA;AAGA;AAAA;AAAA;AAHA,IAZA,CA3BA;AA8CA,SA9CA,qBA+CA;AAAA;;AACA,+BACA;AACA,oCACA;AACA;AACA;AACA,KANA;AAOA,GAvDA;AAyDA,WACA;AACA,cADA,wBAEA;AAAA;;AACA;AACA;;AAEA,sCACA;AACA;AAEA,uEACA,oBACA;AACA;AACA,sCACA,sHADA,EAEA,UAFA,CAEA,KAFA;AAGA,SAPA,EAQA,iBACA;AACA;AACA;AACA,SAZA;AAaA,OAjBA,MAmBA;AACA,kCACA,gHADA,EAEA,UAFA,CAEA,KAFA;AAGA;AACA,KA9BA;AAgCA,cAhCA,wBAiCA;AAAA;;AACA;AAEA,qEACA,oBACA;AACA;AACA,oCACA,sHADA,EAEA,UAFA,CAEA,KAFA;AAGA,OAPA,EAQA,iBACA;AACA;AACA,kCACA,sHADA,EAEA,UAFA,CAEA,KAFA;AAGA,OAdA;AAeA,KAnDA;AAqDA,mCArDA,2CAqDA,KArDA,EAsDA;AACA;;AACA,wHACA;AACA;AACA;;AAEA;AACA;AA9DA;AA1DA,G;;;;;;;;;;;;AClDA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,qBAAqB,wBAAwB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,iCAAiC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,8BAA8B,SAAS,qCAAqC,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,4BAA4B;AAC5B,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACtHA;AAAA;AAAA;AAAA;AAAqF;AAC3B;AACL;;;AAGrD;AACsG;AACtG,gBAAgB,2GAAU;AAC1B,EAAE,4EAAM;AACR,EAAE,iFAAM;AACR,EAAE,0FAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEA;AACA,IAAI,KAAU,EAAE,YAiBf;AACD;AACe,gF;;;;;;;;;;;;ACtCf;AAAA;AAAA,wCAA8L,CAAgB,0OAAG,EAAC,C;;;;;;;;;;;;ACAlN;AAAA;AAAA;AAAA;AAAA;AAAA","file":"chunks/ceres-23.js","sourcesContent":["<template>\n    <div class=\"cmp\">\n        <p v-if=\"isCheckoutReadonly && !!$translate('Ceres::Template.couponReadonlyInfoText')\">\n            {{ couponReadonlyInfoText }}\n        </p>\n        <div :class=\"{'input-group':true, 'component-loading':isCheckoutReadonly, 'is-loading':isCheckoutReadonly}\">\n            <input\n                type=\"text\"\n                class=\"form-control\"\n                v-model=\"couponCode\"\n                :placeholder=\"$translate('Ceres::Template.couponEnterCoupon')\"\n                @keyup.enter=\"redeemCode()\"\n                :disabled=\"disabled || isCheckoutReadonly\"\n                data-testing=\"coupon-input\"\n            >\n            <span class=\"input-group-btn\">\n                <button\n                    class=\"btn btn-medium btn-primary btn-appearance\"\n                    type=\"button\"\n                    @click=\"redeemCode()\"\n                    :disabled=\"waiting || isCheckoutReadonly\" v-if=\"!disabled\"\n                    data-testing=\"coupon-redeem\"\n                >\n                    <icon icon=\"gift\" :loading=\"waiting\"></icon>\n                    {{ $translate(\"Ceres::Template.couponRedeem\") }}\n                </button>\n                <button\n                    class=\"btn btn-medium btn-danger\"\n                    type=\"button\"\n                    @click=\"removeCode()\"\n                    :disabled=\"waiting || isCheckoutReadonly\"\n                    v-else\n                    data-testing=\"coupon-remove\"\n                >\n                    <icon icon=\"trash\" :loading=\"waiting\"></icon>\n                    {{ $translate(\"Ceres::Template.couponRemove\") }}\n                </button>\n            </span>\n        </div>\n    </div>\n</template>\n\n<script>\n\nconst NotificationService = require(\"../../services/NotificationService\");\n\nimport ExceptionMap from \"../../exceptions/ExceptionMap\";\nimport TranslationService from \"../../services/TranslationService\";\nimport { mapState } from \"vuex\";\n\nexport default {\n    name: \"coupon\",\n\n    props: {\n        template:\n        {\n            type: String,\n            default: \"#vue-coupon\"\n        }\n    },\n\n    data()\n    {\n        return {\n            waiting: false,\n            couponCode: \"\"\n        };\n    },\n\n    watch:\n    {\n        redeemedCouponCode(val)\n        {\n            this.couponCode = val;\n        }\n    },\n\n    computed:\n    {\n        disabled()\n        {\n            if (this.redeemedCouponCode)\n            {\n                return true;\n            }\n\n            return false;\n        },\n\n        ...mapState({\n            redeemedCouponCode: state => state.basket.data.couponCode,\n            isBasketLoading: state => state.basket.isBasketLoading,\n            isCheckoutReadonly: state => state.checkout.readOnly\n        })\n    },\n\n    mounted()\n    {\n        this.$nextTick(() =>\n        {\n            if (this.redeemedCouponCode)\n            {\n                this.couponCode = this.redeemedCouponCode;\n            }\n        });\n    },\n\n    methods:\n    {\n        redeemCode()\n        {\n            // remove whitespaces\n            this.couponCode = this.couponCode.replace(/\\s/g, \"\");\n\n            if (this.couponCode.length > 0)\n            {\n                this.waiting = true;\n\n                this.$store.dispatch(\"redeemCouponCode\", this.couponCode).then(\n                    response =>\n                    {\n                        this.waiting = false;\n                        NotificationService.success(\n                            TranslationService.translate(\"Ceres::Template.couponRedeemSuccess\")\n                        ).closeAfter(10000);\n                    },\n                    error =>\n                    {\n                        this.waiting = false;\n                        NotificationService.error(this.getCouponRedemptionErrorMessage(error)).closeAfter(10000);\n                    });\n            }\n            else\n            {\n                NotificationService.error(\n                    TranslationService.translate(\"Ceres::Template.couponIsEmpty\")\n                ).closeAfter(10000);\n            }\n        },\n\n        removeCode()\n        {\n            this.waiting = true;\n\n            this.$store.dispatch(\"removeCouponCode\", this.couponCode).then(\n                response =>\n                {\n                    this.waiting = false;\n                    NotificationService.success(\n                        TranslationService.translate(\"Ceres::Template.couponRemoveSuccess\")\n                    ).closeAfter(10000);\n                },\n                error =>\n                {\n                    this.waiting = false;\n                    NotificationService.error(\n                        TranslationService.translate(\"Ceres::Template.couponRemoveFailure\")\n                    ).closeAfter(10000);\n                });\n        },\n\n        getCouponRedemptionErrorMessage(error)\n        {\n            const errorCode = error && error.warn && error.warn.code || 0;\n            if (errorCode > 0 && ExceptionMap.has(errorCode.toString()))\n            {\n                return TranslationService.translate(\"Ceres::Template.\" + ExceptionMap.get(errorCode.toString()));\n            }\n\n            return TranslationService.translate(\"Ceres::Template.couponRedeemFailure\");\n        }\n    }\n}\n</script>\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: \"cmp\" }, [\n    _vm.isCheckoutReadonly &&\n    !!_vm.$translate(\"Ceres::Template.couponReadonlyInfoText\")\n      ? _c(\"p\", [\n          _vm._v(\"\\n        \" + _vm._s(_vm.couponReadonlyInfoText) + \"\\n    \")\n        ])\n      : _vm._e(),\n    _vm._v(\" \"),\n    _c(\n      \"div\",\n      {\n        class: {\n          \"input-group\": true,\n          \"component-loading\": _vm.isCheckoutReadonly,\n          \"is-loading\": _vm.isCheckoutReadonly\n        }\n      },\n      [\n        _c(\"input\", {\n          directives: [\n            {\n              name: \"model\",\n              rawName: \"v-model\",\n              value: _vm.couponCode,\n              expression: \"couponCode\"\n            }\n          ],\n          staticClass: \"form-control\",\n          attrs: {\n            type: \"text\",\n            placeholder: _vm.$translate(\"Ceres::Template.couponEnterCoupon\"),\n            disabled: _vm.disabled || _vm.isCheckoutReadonly,\n            \"data-testing\": \"coupon-input\"\n          },\n          domProps: { value: _vm.couponCode },\n          on: {\n            keyup: function($event) {\n              if (\n                !$event.type.indexOf(\"key\") &&\n                _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n              ) {\n                return null\n              }\n              return _vm.redeemCode()\n            },\n            input: function($event) {\n              if ($event.target.composing) {\n                return\n              }\n              _vm.couponCode = $event.target.value\n            }\n          }\n        }),\n        _vm._v(\" \"),\n        _c(\"span\", { staticClass: \"input-group-btn\" }, [\n          !_vm.disabled\n            ? _c(\n                \"button\",\n                {\n                  staticClass: \"btn btn-medium btn-primary btn-appearance\",\n                  attrs: {\n                    type: \"button\",\n                    disabled: _vm.waiting || _vm.isCheckoutReadonly,\n                    \"data-testing\": \"coupon-redeem\"\n                  },\n                  on: {\n                    click: function($event) {\n                      return _vm.redeemCode()\n                    }\n                  }\n                },\n                [\n                  _c(\"icon\", { attrs: { icon: \"gift\", loading: _vm.waiting } }),\n                  _vm._v(\n                    \"\\n                \" +\n                      _vm._s(_vm.$translate(\"Ceres::Template.couponRedeem\")) +\n                      \"\\n            \"\n                  )\n                ],\n                1\n              )\n            : _c(\n                \"button\",\n                {\n                  staticClass: \"btn btn-medium btn-danger\",\n                  attrs: {\n                    type: \"button\",\n                    disabled: _vm.waiting || _vm.isCheckoutReadonly,\n                    \"data-testing\": \"coupon-remove\"\n                  },\n                  on: {\n                    click: function($event) {\n                      return _vm.removeCode()\n                    }\n                  }\n                },\n                [\n                  _c(\"icon\", {\n                    attrs: { icon: \"trash\", loading: _vm.waiting }\n                  }),\n                  _vm._v(\n                    \"\\n                \" +\n                      _vm._s(_vm.$translate(\"Ceres::Template.couponRemove\")) +\n                      \"\\n            \"\n                  )\n                ],\n                1\n              )\n        ])\n      ]\n    )\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Coupon.vue?vue&type=template&id=127bda26&\"\nimport script from \"./Coupon.vue?vue&type=script&lang=js&\"\nexport * from \"./Coupon.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('127bda26')) {\n      api.createRecord('127bda26', component.options)\n    } else {\n      api.reload('127bda26', component.options)\n    }\n    module.hot.accept(\"./Coupon.vue?vue&type=template&id=127bda26&\", function () {\n      api.rerender('127bda26', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"resources/js/src/app/components/basket/Coupon.vue\"\nexport default component.exports","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Coupon.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!./Coupon.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Coupon.vue?vue&type=template&id=127bda26&\""],"sourceRoot":""}