\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EnquiryPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EnquiryPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnquiryPage.vue?vue&type=template&id=72958f4a&scoped=true&\"\nimport script from \"./EnquiryPage.vue?vue&type=script&lang=js&\"\nexport * from \"./EnquiryPage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EnquiryPage.vue?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"./EnquiryPage.vue?vue&type=style&index=1&id=72958f4a&lang=scss&scoped=true&\"\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 \"72958f4a\",\n null\n \n)\n\n/* custom blocks */\nimport block0 from \"./EnquiryPage.vue?vue&type=custom&index=0&blockType=i18n\"\nif (typeof block0 === 'function') block0(component)\n\nexport default component.exports","import axios from \"axios\";\r\nimport { sha256 } from \"js-sha256\";\r\nimport { api } from \"./api\";\r\n\r\nconst BLACKLIST_URL = \"https://tf-live-content.s3.eu-central-1.amazonaws.com/blacklists/customeremails.txt\";\r\nconst BLOCKED_BY_BLACKLIST_ERROR = \"Blocked by blacklist\";\r\n\r\nconst isBlockedByBlacklistError = function (error) {\r\n if (!error) return false;\r\n if (error.message === BLOCKED_BY_BLACKLIST_ERROR) return true;\r\n return false;\r\n};\r\n\r\n/**\r\n * checks the email against a blacklist of email-SHA256 hashes obtained from S3.\r\n * These can e.g. be calculated via https://coding.tools/sha256 \r\n */\r\nconst checkEmailBlacklist = function(email) {\r\n const hash = sha256(email).toLowerCase();\r\n return axios.get(BLACKLIST_URL)\r\n .catch(() => {\r\n return \"\";\r\n }).then(response => {\r\n const blacklist = (response && response.data || \"\").toLowerCase();\r\n if (blacklist.indexOf(hash) > -1) {\r\n throw new Error(BLOCKED_BY_BLACKLIST_ERROR);\r\n }\r\n return true;\r\n });\r\n};\r\n\r\nconst enquiry = {\r\n messageEnquiry: function(data) {\r\n return checkEmailBlacklist(data.customerInfo.customer.email)\r\n .then(() => api.open.post(\"/v1/enquiry/messageEnquiry\", data));\r\n },\r\n\r\n packageEnquiry: function(data) {\r\n return api.open.post(\"/v1/enquiry/packageEnquiry\", data);\r\n },\r\n\r\n customer: {\r\n get: function(enquiryId, chatToken) {\r\n return api.open.get(\r\n `/v1/enquiry/${enquiryId}/info/customer/${chatToken}`\r\n );\r\n },\r\n\r\n confirm: function(enquiryId, { chatToken, message }, customeremail) {\r\n return checkEmailBlacklist(customeremail)\r\n .then(() => api.open.post(`/v1/enquiry/${enquiryId}/confirm`, {\r\n chatToken,\r\n message\r\n }));\r\n },\r\n\r\n redeem: function(enquiryId, { chatToken, code }) {\r\n return api.open.post(`/v1/enquiry/${enquiryId}/redeem`, {\r\n chatToken,\r\n code\r\n });\r\n }\r\n },\r\n\r\n offerer: {\r\n get: function(enquiryId) {\r\n return api.withAuthToken.get(\r\n `/v1/enquiry/${enquiryId}/info/offerer`\r\n );\r\n },\r\n\r\n accept: function(enquiryId) {\r\n return api.withAuthToken.post(`/v1/enquiry/${enquiryId}/accept`);\r\n },\r\n\r\n decline: function(enquiryId) {\r\n return api.withAuthToken.post(`/v1/enquiry/${enquiryId}/decline`);\r\n }\r\n }\r\n};\r\n\r\nexport { enquiry, isBlockedByBlacklistError };\r\n","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 93);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 11:\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"element-ui/lib/mixins/migrating\");\n\n/***/ }),\n\n/***/ 93:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/steps.vue?vue&type=template&id=3c6b6dc0&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-steps\",\n class: [\n !_vm.simple && \"el-steps--\" + _vm.direction,\n _vm.simple && \"el-steps--simple\"\n ]\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue?vue&type=template&id=3c6b6dc0&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/migrating\"\nvar migrating_ = __webpack_require__(11);\nvar migrating_default = /*#__PURE__*/__webpack_require__.n(migrating_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/steps.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var stepsvue_type_script_lang_js_ = ({\n name: 'ElSteps',\n\n mixins: [migrating_default.a],\n\n props: {\n space: [Number, String],\n active: Number,\n direction: {\n type: String,\n default: 'horizontal'\n },\n alignCenter: Boolean,\n simple: Boolean,\n finishStatus: {\n type: String,\n default: 'finish'\n },\n processStatus: {\n type: String,\n default: 'process'\n }\n },\n\n data: function data() {\n return {\n steps: [],\n stepOffset: 0\n };\n },\n\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'center': 'center is removed.'\n }\n };\n }\n },\n\n watch: {\n active: function active(newVal, oldVal) {\n this.$emit('change', newVal, oldVal);\n },\n steps: function steps(_steps) {\n _steps.forEach(function (child, index) {\n child.index = index;\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_stepsvue_type_script_lang_js_ = (stepsvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_stepsvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/steps/src/steps.vue\"\n/* harmony default export */ var steps = (component.exports);\n// CONCATENATED MODULE: ./packages/steps/index.js\n\n\n/* istanbul ignore next */\nsteps.install = function (Vue) {\n Vue.component(steps.name, steps);\n};\n\n/* harmony default export */ var packages_steps = __webpack_exports__[\"default\"] = (steps);\n\n/***/ })\n\n/******/ });","module.exports = function (Component) {\n Component.options.__i18n = Component.options.__i18n || []\n Component.options.__i18n.push('{\"de\":{\"pageTitle\":\"Buchungsanfrage an {0} | Traumfotografen.de\",\"title\":\"Buchungsanfrage an {0}\",\"back\":\"Zurück\",\"continue\":\"Weiter zum letzten Schritt\",\"steps\":{\"1\":\"Paket & Extras\",\"2\":\"Details & Adresse\",\"3\":\"Prüfen & Bestätigen\"},\"nudge\":\"Gute Wahl! Nur noch ein paar Daten eingeben und schon ist deine Buchungsanfrage fertig.\",\"intro\":\"Wir benötigen von dir noch ein paar Daten, um die Buchung korrekt abwickeln zu können. Dies ist in unter einer Minute erledigt!\",\"shooting\":{\"date\":{\"label\":\"Wann soll das Fotoshooting stattfinden?\",\"name\":\"Datum\",\"placeholder\":\"Datum auswählen\",\"tooltip\":\"Bitte gib ein Datum an, an dem das Fotoshooting stattfinden soll. Falls dieses noch nicht bekannt ist, gib ein Wunschdatum ein. Du kannst dieses in Absprache mit dem Fotografen auch später noch festlegen oder ändern.\"},\"time\":{\"label\":\"Beginn des Fotoshootings (optional)\",\"placeholder\":\"Gewünschte Uhrzeit\",\"tooltip\":\"Um wie viel Uhr soll das Fotoshooting beginnen? Du kannst dies in Absprache mit dem Fotografen auch später noch festlegen oder ändern.\"},\"location\":{\"label\":\"Wo soll das Fotoshooting stattfinden? (optional)\",\"disclaimer\":\"Falls der Ort des Fotoshootings bereits feststeht, kannst du ihn hier angeben (z.B. Hotel, Büro, Veranstaltungshalle, etc.).\\\\nDu kannst dies aber auch später mit dem Fotografen abstimmen und das Feld einfach frei lassen.\",\"placeholder\":\"Tippen, um Adressvorschläge zu erhalten...\",\"studio\":\"Im Fotostudio\",\"tooltip\":\"Wohin soll der Fotograf kommen? Bitte gib eine vollständige Adresse oder Lokalität (z.B. Hotel, Veranstaltungshalle, Park, usw.) ein. Du kannst dies in Absprache mit dem Fotografen auch später noch festlegen oder ändern.\",\"tooltip_inStudio\":\"Wenn du nicht im Fotostudio fotografiert werden möchtest, kehre zu Schritt 1 zurück und wähle \\u0027on-location\\u0027 aus (falls verfügbar).\"}},\"highlights\":{\"safedata\":\"Sichere SSL Übertragung\",\"nopayment\":\"Keine unerwünschte Werbung\"},\"contact\":{\"label\":\"Persönlichen Daten\",\"disclaimer\":\"Deine persönliche Daten werden für die korrekte Abwicklung benötigt. Nur wenn deine Buchungsanfrage vom Fotografen angenommen wird, leiten wir die Daten an diesen weiter. Bis dahin sind deine Daten sicher bei uns gespeichert und werden auch nicht zu Werbezwecken verwendet.\",\"firstname\":\"Vorname\",\"lastname\":\"Nachname\",\"company\":\"Firma (optional)\",\"company-placeholder\":\"Firma\",\"street\":\"Straße\",\"housenumber\":\"Hausnummer\",\"zip\":\"Postleitzahl\",\"city\":\"Ort\",\"email\":\"E-Mail-Adresse\",\"confirmEmail\":\"E-Mail-Adresse erneut eingeben\",\"phone\":\"Telefon (optional)\"},\"travelcost\":{\"label\":\"Fahrtkosten:\",\"inclusive\":\"Fahrtkosten inklusive\",\"hiddenAddress\":{\"label\":\"Fahrtkosten nach {0}:\",\"inclusive\":\"Fahrtkosten nach {0} inklusive\"},\"errorTooFar\":\"Dieser Ort befindet sich außerhalb des Bereichs, in dem der Fotograf On-Location-Shootings durchführt.\"},\"errorMessage\":{\"NetworkError\":{\"title\":\"Du scheinst offline zu sein.\",\"message\":\"Bitte kontrolliere deine Internetverbindung und lade die Seite erneut, sobald du wieder online bist!\"},\"OffererNotFound\":{\"title\":\"Dieser Fotograf existiert leider nicht.\",\"message\":\"Wir können dir hier also nichts zeigen.\"},\"MaximumTravelDistanceExceeded\":{\"title\":\"Anfahrtsweg ist zu weit.\",\"message\":\"Dieser Ort befindet sich außerhalb des Bereichs, in dem der Fotograf On-Location-Shootings durchführt.\"},\"ValidationError\":{\"title\":\"Daten unvollständig.\",\"message\":\"Es fehlen noch ein paar Daten. Wir haben diese rot markiert. Bitte überprüfe deine Angaben noch einmal.\"},\"cart_deleted\":{\"title\":\"Hoppla, da ist wohl etwas schiefgelaufen!\",\"message\":\"Bitte stelle deine Buchungsanfrage erneut zusammen.\"},\"EnquiryPackageNotCreated\":{\"title\":\"Hoppla, da ist wohl etwas schiefgelaufen!\",\"message\":\"Bitte kontrolliere alle Felder! Falls du eine Buchungsanfrage zu einem schon bestehenden Chat machen wilst, musst du dieselbe E-Mail-Adresse angeben, mit der du auch Kontakt zum Fotografen aufgenommen hast.\"},\"default\":{\"title\":\"Hoppla, da ist wohl etwas schiefgelaufen!\",\"message\":\"Bitte versuche es später erneut!\"}}}}')\n delete Component.options._Ctor\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EnquiryPage.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EnquiryPage.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../../node_modules/@kazupon/vue-i18n-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AddressForm.vue?vue&type=custom&index=0&blockType=i18n\"; export default mod; export * from \"-!../../../node_modules/@kazupon/vue-i18n-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AddressForm.vue?vue&type=custom&index=0&blockType=i18n\"","module.exports = function (Component) {\n Component.options.__i18n = Component.options.__i18n || []\n Component.options.__i18n.push('{\"de\":{\"googleAutocompleteLabel\":\"Tippen, um nach Adressen zu suchen...\",\"autocompleteHint\":\"Bitte gib eine genaue Adresse - insbesondere mit einer Hausnummer - ein.\",\"googlePlacesCountry\":\"de\",\"form\":{\"street\":\"Straße\",\"houseNumber\":\"Nr.\",\"addition\":\"Adresszusatz\",\"zip\":\"PLZ\",\"city\":\"Stadt\"},\"houseNumberTooltip\":\"Bitte die Hausnummer im obigen Adressfeld ergänzen.\",\"errors\":{\"needHouseNumber\":\"Bitte gib eine genaue Adresse mit einer Hausnummer ein.\",\"required\":\"Bitte gib eine genaue Adresse ein.\"}}}')\n delete Component.options._Ctor\n}\n"],"sourceRoot":""}