{"version":3,"file":"index-legacy.3d89a264.js","sources":["../../../frontend/js/donation/validators.js","../../../frontend/js/http.js","../../../frontend/js/utils.js","../../../frontend/js/billecta.js","../../../frontend/js/donation/constants.js","../../../frontend/js/tracking.js","../../../frontend/js/error-handler.js","../../../frontend/js/donation/donation.js","../../../frontend/js/share.js","../../../frontend/js/copy.js","../../../frontend/js/checkout.js","../../../frontend/js/certificate.js","../../../frontend/js/gallery.js","../../../frontend/js/slider.js","../../../frontend/js/wc-validation.js","../../../frontend/js/video-player.js","../../../frontend/js/fade-image.js","../../../frontend/js/tm-register-lead.js","../../../frontend/js/index.js","../../../frontend/js/agroforestry.js","../../../frontend/js/cookie.js","../../../frontend/js/video.js","../../../frontend/js/menu.js","../../../frontend/js/site-list-toggle.js","../../../frontend/js/scroll-lock.js","../../../frontend/js/submenu.js","../../../frontend/js/minicart.js","../../../frontend/js/embed-message.js","../../../frontend/js/spar.js"],"sourcesContent":["import { helpers } from 'vuelidate/lib/validators';\nimport luhn from 'luhn';\n\n// Same validation is used in backend, src/validators.php\nexport const isValidSSN = value => {\n if (!value) return true;\n\n // Remove all non-digits characters\n value = value.replace(/\\D/g, '');\n if (value.length !== 12) {\n return false;\n }\n if (value.length === 12) {\n value = value.slice(2);\n }\n\n const month = value.substring(2, 4);\n const day = value.substring(4, 6);\n if (month > 12 || day > 31) {\n return false;\n }\n\n return luhn.validate(value);\n};\n\n// Same validation is used in backend, src/validators.php\nexport const isValidSwedishOrganizationNumber = value => {\n if (!value) {\n return false;\n }\n\n if (!value.match(/^\\d{6}-?\\d{4}$/)) {\n return false;\n }\n\n value = value.replace(/\\D/, '').slice(-10);\n return luhn.validate(value);\n};\n\nexport const optional = () => {\n return true;\n};\n\nexport const manualAddress = (value, fields) => {\n if (fields.obfuscatedAddress || value) {\n return true;\n }\n\n return false;\n};\n\nexport const isClearingNo = value => {\n // Remove all dashes and check if it is a number\n value = value.replace(/\\-/g, '');\n if(isNaN(value)) {\n return false;\n }\n\n const minLength = 4;\n let maxLength = 4;\n // Banks where clearing no starting with 8 have an extra digit\n if(value.substring(0, 1) === '8') {\n maxLength = 5;\n }\n return value.length >= minLength && value.length <= maxLength;\n};\n\nexport const isAccountNo = value => {\n // Remove all dashes and spaces and check if it is a number\n value = value.replace(/\\s|\\-/g, '');\n if(isNaN(value)) {\n return false;\n }\n\n // Different lengths depending on bank\n const minLength = 7;\n const maxLength = 10;\n return value.length >= minLength && value.length <= maxLength;\n};\n\nexport const isDate = value => {\n return /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(value);\n};\n\nexport const isMinToday = value => {\n const today = new Date();\n const date = new Date(value);\n if (today.getFullYear() !== date.getFullYear()) {\n return today.getFullYear() < date.getFullYear();\n }\n if (today.getMonth() !== date.getMonth()) {\n return today.getMonth() < date.getMonth();\n }\n return today.getDate() <= date.getDate();\n};\n\nexport const validateIf = (validation, condition) => {\n if (!condition) return true;\n\n return value => validation(value);\n};\n\nexport const maxRows = rows => value => {\n return value.split('\\n').length <= rows;\n};\n","const status = response => {\n if (response.status >= 200 && response.status < 300) {\n return Promise.resolve(response)\n } else {\n return Promise.reject(response)\n }\n}\n\nconst json = response => {\n return response.json()\n}\n\nexport default {\n post: (url, data = {}, options = {}) => {\n const defaultArgs = {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n };\n\n if (typeof JSSettings !== \"undefined\") {\n defaultArgs.headers[\"X-WP-Nonce\"] = JSSettings.nonce\n }\n\n return fetch(url, {...defaultArgs, ...options})\n .then(status)\n .then(json)\n },\n\n get: (url, data = null, options = {}) => {\n const defaultArgs = {};\n\n if (data) {\n const query = Object.keys(data)\n .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(data[k]))\n .join('&');\n\n url = url + (url.match(/\\?/) ? '&' : '?') + query\n }\n\n return fetch(url, {...defaultArgs, ...options})\n .then(status)\n .then(json)\n }\n}","/**\n * Repeats a function that return a promise until it\n * resolve something else than \"repeat\" or is\n * rejected with reject(\"reject\")\n *\n * @param func - a function that resolve a promise\n * @param param - param to pass to the passed func\n * @param timeout - Timeout in microseconds (when to stop polling)\n * @param interval - How often the poll should run, in microseconds\n *\n * @returns {Promise}\n */\nexport function awaitPollStatus(func, param, timeout = null, interval = null) {\n let endTime = Number(new Date()) + (timeout || 2 * 60 * 1000);\n interval = interval || 3000;\n\n function _poll(resolve, reject) {\n if (Number(new Date()) > endTime) {\n reject('Timeout');\n return;\n }\n\n func(param).then(x => {\n if (x === 'repeat') {\n setTimeout(_poll, interval, resolve, reject)\n } else {\n resolve(x);\n }\n }).catch((e) => {\n if (e === 'reject') {\n reject()\n } else {\n setTimeout(_poll, interval, resolve, reject)\n }\n })\n }\n\n return new Promise(_poll);\n}\n","import http from './http'\nimport {awaitPollStatus} from \"./utils\";\n\nclass EventListener{\n onReceivedQR = (qr) => {console.log(\"Received unhandeled event `onReceivedQR` with data: \" + qr)}\n onReceivedBankIdAutoStartToken = (token) => {console.log(\"Received unhandeled event `onReceivedBankIdAutoStartToken` with data: \" + token)}\n onReceivedBankAccountStatus = () => {console.log(\"Received bank account status\")}\n onReceivedSigningFingerprintStatus = () => {console.log(\"Received signing fingerprint status\")}\n onReceivedCurrentDevice = (currentDevice) => {console.log(\"Received if BankId is on current device\")}\n}\n\nexport const eventListener = new EventListener()\n\nfunction getBankAccounts(bank, ssn, otherDevice) {\n const url = \"/wp-json/billecta/v1/bank/accounts/initiate/\" + bank + '/' + ssn + '?otherDevice=' + otherDevice\n\n const currentDevice = otherDevice === true ? false : true;\n eventListener.onReceivedCurrentDevice(currentDevice);\n\n return new Promise((resolve, reject) => {\n http.post(url).then(x => {\n const publicId = x['PublicId'];\n\n eventListener.onReceivedBankAccountInititate(publicId);\n\n awaitPollStatus(getBankAccountStatus, publicId).then(response => {\n resolve(parseBankAccountStatusResponse(response))\n }).catch(x => reject(x))\n\n }).catch(x => reject(x))\n })\n}\n\nfunction parseBankAccountStatusResponse(response) {\n return response['AccountNumbers'].filter(x => (\n x['AutogiroCompatible'] === 'Approved'\n )).map(x => ({\n clearingNo: x['ClearingNo'],\n accountNo: x['AccountNo'],\n name: x['Name'],\n }))\n}\n\nfunction resumeBankAccount(publicId) {\n return new Promise((resolve, reject) => {\n awaitPollStatus(getBankAccountStatus, publicId).then(response => {\n resolve(parseBankAccountStatusResponse(response))\n }).catch(x => reject(x))\n });\n}\n\nconst getAccountStatusUrl = (publicId) =>\n \"/wp-json/billecta/v1/bank/accounts/\" + publicId\n\nfunction getBankAccountStatus(publicId) {\n const url = getAccountStatusUrl(publicId)\n\n return new Promise((resolve, reject) => {\n http.get(url).then(x => {\n eventListener.onReceivedBankAccountStatus();\n\n if (x['QR']) {\n eventListener.onReceivedQR(x['QR'])\n }\n\n if (x['BankIdAutostartToken']) {\n eventListener.onReceivedBankIdAutoStartToken(x['BankIdAutostartToken'])\n }\n\n if (x && x['Status'] === 'Waiting') {\n resolve('repeat')\n } else if (x && x['Status'] === 'Success') {\n resolve(x)\n } else {\n reject(x)\n }\n }).catch(x => reject(x))\n })\n}\n\nfunction getSigningFingerprint(ssn, currentDevice) {\n const url = \"/wp-json/billecta/v1/bankid/sign/initiate/\" + ssn + '?currentDevice=' + currentDevice\n\n eventListener.onReceivedCurrentDevice(currentDevice);\n\n return new Promise((resolve, reject) => {\n http.post(url).then(x => {\n awaitPollStatus(getSigningFingerprintStatus, x['ReferenceToken']).then(response => {\n resolve(response)\n }).catch(x => reject(x))\n }).catch(x => reject(x))\n })\n}\n\nfunction getSigningFingerprintStatus(publicId) {\n const url = \"/wp-json/billecta/v1/bankid/sign/\" + publicId\n\n return new Promise((resolve, reject) => {\n http.get(url).then(x => {\n eventListener.onReceivedSigningFingerprintStatus();\n\n if (x['QR']) {\n eventListener.onReceivedQR(x['QR'])\n }\n\n if (x['AutoStartToken']) {\n eventListener.onReceivedBankIdAutoStartToken(x['AutoStartToken'])\n }\n\n if (x && ['Started', 'Waiting', 'UserSign', 'OutstandingTransaction'].indexOf(x['Status']) !== -1) {\n resolve('repeat')\n } else if (x && x['Status'] === 'Complete') {\n resolve(x)\n } else {\n reject(x)\n }\n }).catch(x => reject(x))\n })\n}\n\nexport default {\n getBankAccounts,\n resumeBankAccount,\n getSigningFingerprint\n}\n","export const GIFT_TYPE_STANDARD = 'standard';\nexport const GIFT_TYPE_MONTHLY = 'monthly';\nexport const GIFT_TYPE_MEMORIAL = 'memorial';\nexport const GIFT_TYPE_SHOP = 'checkout';\nexport const GIFT_TYPE_MEMORIAL_BUSINESS = 'memorial_company';\nexport const GIFT_TYPE_TREE = 'tree';\nexport const GIFT_TYPE_TREE_BUSINESS = 'tree_company';\nexport const GIFT_TYPE_BUSINESS = 'business';\nexport const GIFT_TYPE_CLIMATE_COMPENSATION = 'climate_compensation';\nexport const GIFT_TYPE_CLIMATE_COMPENSATION_PERSONAL =\n 'climate_compensation_personal';\n\nlet _GIFT_TYPE_TRACKING_NAMES = {};\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_STANDARD] = 'engangsgava';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_MONTHLY] = 'manadsgivare';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_BUSINESS] = 'foretagsgava';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_MEMORIAL] = 'minnesgava';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_SHOP] = 'checkout';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_MEMORIAL_BUSINESS] = 'minnesgava foretag';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_TREE] = 'gebortettträd';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_TREE_BUSINESS] = 'gebortettträd foretag';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_CLIMATE_COMPENSATION] =\n 'klimatkompensation foretag';\n_GIFT_TYPE_TRACKING_NAMES[GIFT_TYPE_CLIMATE_COMPENSATION_PERSONAL] =\n 'klimatkompensation privat';\n\nexport const GIFT_TYPE_TRACKING_NAMES = _GIFT_TYPE_TRACKING_NAMES;\n\nexport const SECTION_TRACKING_NAMES = {\n amount: 'belopp',\n treeCount: 'belopp',\n cart: 'varukorg',\n payment: 'betalsatt',\n certificate: 'gavobevis',\n personal: 'personuppgifter',\n company: 'foretagsuppgifter',\n automaticPayment: 'autogiroregistrering'\n};\n\nexport const XHR_STATUS_IDLE = 'idle';\nexport const XHR_STATUS_LOADING = 'loading';\nexport const XHR_STATUS_SUCCESS = 'success';\nexport const XHR_STATUS_ERROR = 'error';\nexport const XHR_STATUS_EMPTY = 'empty';\n","import {GIFT_TYPE_TRACKING_NAMES} from './donation/constants'\n\nexport function trackEvent(event, category = null, action = null, label = null, extra = {}) {\n let data = {event, ...extra};\n\n if (category) {\n data['eventCategory'] = category;\n }\n if (action) {\n data['eventAction'] = action;\n }\n if (label !== null) { // Allow empty strings since it might be on purpose\n data['eventLabel'] = label;\n }\n data = {...data, ...extra}\n\n if (window.dataLayer) {\n window.dataLayer.push(data);\n }\n}\n\nexport function trackCart(event, actionField = null, products = null, extra = {}) {\n let data = {event, ...extra};\n let ecommerce = {\n [event]: {}\n }\n\n if (actionField) {\n ecommerce[event]['actionField'] = actionField;\n }\n if (products) {\n ecommerce[event]['products'] = products;\n }\n data = {...data, ecommerce}\n\n if (window.dataLayer) {\n window.dataLayer.push(data);\n }\n}\n\nexport default {\n trackEvent,\n trackCart,\n GIFT_TYPE_TRACKING_NAMES,\n}","import * as Sentry from '@sentry/browser';\nimport { Integrations } from \"@sentry/tracing\";\n\nexport function init() {\n Sentry.init({\n ...window.SENTRY_SDK_CONFIG,\n\n integrations: [new Integrations.BrowserTracing()],\n });\n}\nexport default class Logger {\n error(message, extra = null) {\n if (extra) {\n Sentry.setContext('error context', {extra})\n }\n Sentry.captureMessage(message, Sentry.Severity.Error);\n }\n}\n\n","import Vue from 'vue';\nimport Vuelidate from 'vuelidate';\nimport VueLocalStorage from 'vue-localstorage';\nimport {\n email,\n numeric,\n decimal,\n required,\n requiredIf,\n maxLength\n} from 'vuelidate/lib/validators';\nimport Iti from 'intl-tel-input';\nimport Velocity from 'velocity-animate';\nimport {\n optional,\n isValidSSN,\n isValidSwedishOrganizationNumber,\n isClearingNo,\n isAccountNo,\n isDate,\n isMinToday,\n validateIf,\n maxRows\n} from './validators';\nimport * as Sentry from '@sentry/browser';\n\nimport billecta, {eventListener as billectaEventListener} from '../billecta';\nimport http from '../http';\nimport getSparPerson from '../spar';\nimport { trackEvent, trackCart } from '../tracking';\nimport Logger from '../error-handler';\n\nimport {\n GIFT_TYPE_TRACKING_NAMES,\n SECTION_TRACKING_NAMES,\n XHR_STATUS_IDLE,\n XHR_STATUS_LOADING,\n XHR_STATUS_SUCCESS,\n XHR_STATUS_ERROR,\n XHR_STATUS_EMPTY,\n} from './constants';\n\nconst logger = new Logger();\n\nlet V = Velocity;\n\nVue.use(Vuelidate);\nVue.use(VueLocalStorage, { name: 'store' });\n\nconst Donation = el => {\n // Settings from wp\n const {\n type,\n postId,\n orderId,\n customerId,\n campaignCode,\n legalAgreement,\n sectionsData,\n currency,\n locale,\n certificatePrintCost,\n certificateTextMaxLength,\n certificateTextMaxRows,\n certificateFromMaxLength,\n certificateShowFromName,\n amount,\n amounts,\n minAmount,\n allowDecimalAmounts,\n externalAmount,\n defaultPayment,\n quantity,\n minQuantity,\n certificateImages,\n isClimateCompensation,\n trackingName,\n cartInfo,\n isLoggedIn,\n leadGuid,\n } = settings;\n const sections = Object.keys(sectionsData);\n\n const sectionValidate = sections\n .map(s => `groups.${s}`);\n\n const forms = {\n section: sectionValidate\n };\n\n const defaultGroups = Object.assign(\n {},\n ...sections.map(i => ({ [i]: false }))\n );\n\n let defaultAmounts = amounts.map(a => parseFloat(a));\n\n let useCustomAmount = false;\n let customAmount = '';\n\n const defaultAmountIndex = Math.floor(amounts.length / 2);\n let defaultAmount = defaultAmounts[defaultAmountIndex]\n ? defaultAmounts[defaultAmountIndex]\n : amount;\n\n if (externalAmount) {\n defaultAmount = externalAmount;\n useCustomAmount = !defaultAmounts.includes(externalAmount);\n customAmount = useCustomAmount ? defaultAmount : '';\n }\n\n const defaultQuantity = parseInt(quantity || 1);\n const defaultTotalCost = defaultAmount * defaultQuantity;\n\n const certificateImagesAreSelectable =\n certificateImages && certificateImages.length > 0;\n const defaultCertificateImage = certificateImagesAreSelectable\n ? certificateImages[0]\n : {};\n\n // Set order states depending on if they include the specific section\n const isCompanyOrder = sections.includes('company');\n const isCertificateOrder = sections.includes('certificate');\n const isTreeOrder = sections.includes('treeCount');\n const isMonthlyOrder = sections.includes('automaticPayment');\n\n const intlTelUtils =\n 'https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.15/js/utils.js';\n const intlTelLoaded = window.intlTelInputGlobals.loadUtils(intlTelUtils);\n\n var app = new Vue({\n el: '#vue',\n directives: {\n intltelinput: {\n inserted: (el, _binding, vnode) => {\n const vueApp = vnode.context;\n const input = el.querySelector('input[type=\"tel\"]');\n const countryKey = `${input.name}Country`;\n const sanitizedKey = `${input.name}Sanitized`;\n\n let defaultCountry = 'SE';\n if (\n vueApp.fields &&\n vueApp.fields[countryKey] &&\n vueApp.fields[countryKey].iso2\n ) {\n defaultCountry = vueApp.fields[countryKey].iso2;\n }\n\n const options = {\n separateDialCode: true,\n initialCountry: defaultCountry\n };\n if (input.name === 'swishPhone') {\n options.onlyCountries = ['SE'];\n options.allowDropdown = false;\n } else {\n options.preferredCountries = ['SE'];\n }\n\n const iti = new Iti(input, options);\n\n intlTelLoaded.then(() => {\n vueApp.fields[sanitizedKey] = iti.getNumber();\n vueApp.fields[\n countryKey\n ] = iti.getSelectedCountryData();\n\n input.addEventListener('countrychange', () => {\n vueApp.fields[\n countryKey\n ] = iti.getSelectedCountryData();\n });\n });\n },\n update: (el, _binding, vnode) => {\n const input = el.querySelector('input[type=\"tel\"]');\n\n const countryKey = `${input.name}Country`;\n const sanitizedKey = `${input.name}Sanitized`;\n const isValidKey = `${input.name}IsValid`;\n\n const iti = window.intlTelInputGlobals.getInstance(input);\n\n const number = iti.getNumber()\n vnode.context.fields[isValidKey] = !number || window.intlTelInputUtils.isValidNumber(number);\n vnode.context.fields[sanitizedKey] = number;\n vnode.context.fields[countryKey] = iti.getSelectedCountryData();\n }\n }\n },\n data: {\n type: type,\n postId: postId,\n orderId: orderId,\n campaignCode: campaignCode,\n currency: currency,\n locale: locale,\n activeSection: sections[0],\n sections: sections,\n amounts: defaultAmounts,\n minAmount: parseInt(minAmount),\n certificatePrintCost: parseInt(certificatePrintCost),\n certificateTextMaxLength: parseInt(certificateTextMaxLength),\n certificateTextMaxRows: parseInt(certificateTextMaxRows),\n quantity: quantity || 0,\n currentSubmit: '',\n trackingName: trackingName,\n\n certificateImages: certificateImages,\n certificateImagesAreSelectable: certificateImagesAreSelectable,\n selectedCertificateImage: defaultCertificateImage,\n selectedCertificateImageStyle: {backgroundImage: `url('${defaultCertificateImage.src}')` },\n\n obfuscatedAddress: {\n firstName: '',\n lastName: '',\n address: '',\n postalCode: '',\n city: ''\n },\n\n fields: {\n amount: defaultAmount,\n customAmount,\n\n quantity: defaultQuantity,\n treeCount: defaultQuantity,\n\n ssn: '',\n sparId: '',\n\n firstName: '',\n lastName: '',\n address: '',\n address2: '',\n postalCode: '',\n city: '',\n companyName: '',\n companyRegistrationNumber: '',\n email: '',\n phone: '',\n phoneSanitized: '',\n phoneIsValid: false,\n phoneCountry: {},\n\n showShippingFields: false,\n shippingFirstName: '',\n shippingLastName: '',\n shippingAddress: '',\n shippingAddress2: '',\n shippingPostalCode: '',\n shippingCity: '',\n\n payment: defaultPayment,\n\n swishPhone: '',\n swishPhoneSanitized: '',\n swishPhoneIsValid: '',\n swishPhoneCountry: {},\n\n certificate: false,\n certificateOther: false,\n certificateName: '',\n certificateFromName: '',\n certificateMessage: '',\n certificateImageId: defaultCertificateImage.ID,\n\n recipientEmail: '',\n recipientSelect: '',\n recipientDate: '',\n recipientSelectedDate: 'memorial',\n memorialOrderData: [],\n recipientName: '',\n recipientAddress: '',\n recipientAddress2: '',\n recipientPostalCode: '',\n recipientCity: '',\n\n // For automatic payments\n bank: '',\n bankAccountNumberSelected: '',\n clearingNo: '',\n accountNo: ''\n },\n billectaIsPolling: false,\n billectaBankAccountPublicId: null,\n billectaQRCode: null,\n billectaBankIdAutoStartToken: null,\n billectaCurrentDevice: false,\n bankIdUrl: 'bankid://',\n\n digitalSignature: null,\n\n showPreviewModal: false,\n previewType: 'digital',\n\n useCustomAmount,\n\n showAddressFields: (isLoggedIn !== true) ? false : true,\n showAccountFields: false,\n showObfuscatedAddress: false,\n showSparLoader: false,\n showSparError: false,\n showMissingAddressError: false,\n\n showCertificateName: !isTreeOrder,\n\n isSwishPhone: false,\n isOtherCertificate: false,\n isPrintCertificate: false,\n\n allowSwishPhoneOverride: true,\n\n xhrStatusOrderStatus: XHR_STATUS_IDLE,\n xhrStatusBankAccount: XHR_STATUS_IDLE,\n xhrStatusSubmit: XHR_STATUS_IDLE,\n xhrStatusSubmitDonorToBe: XHR_STATUS_IDLE,\n xhrStatusMessageType: type,\n\n submitErrorMessage: '',\n bankAccountNumbers: [],\n\n showBankIDLoadingSpinner: false,\n openBankIDOnCurrentDevice: false,\n\n totalCost: defaultTotalCost,\n\n error: false,\n touchedGroups: Object.assign({}, defaultGroups),\n groupError: Object.assign({}, defaultGroups),\n hideFieldError: '',\n\n groups: {\n amount: ['fields.amount'],\n cart: ['fields.amount'],\n personal: [\n 'fields.ssn',\n 'fields.sparId',\n 'fields.email',\n 'fields.phone',\n 'fields.firstName',\n 'fields.lastName',\n 'fields.address',\n 'fields.postalCode',\n 'fields.city',\n 'fields.shippingFirstName',\n 'fields.shippingLastName',\n 'fields.shippingAddress',\n 'fields.shippingAddress2',\n 'fields.shippingPostalCode',\n 'fields.shippingCity'\n ],\n company: [\n 'fields.email',\n 'fields.phone',\n 'fields.companyName',\n 'fields.companyRegistrationNumber',\n 'fields.firstName',\n 'fields.lastName',\n 'fields.address',\n 'fields.postalCode',\n 'fields.city',\n 'fields.shippingFirstName',\n 'fields.shippingLastName',\n 'fields.shippingAddress',\n 'fields.shippingAddress2',\n 'fields.shippingPostalCode',\n 'fields.shippingCity'\n ],\n payment: ['fields.payment', 'fields.swishPhone'],\n automaticPayment: [\n 'fields.bankAccountNumberSelected',\n 'fields.bank',\n 'fields.clearingNo',\n 'fields.accountNo'\n ],\n certificate: [\n 'fields.certificate',\n 'fields.certificateOther',\n 'fields.certificateName',\n 'fields.certificateMessage',\n 'fields.certificateFromName',\n 'fields.recipientEmail',\n 'fields.recipientSelect',\n 'fields.recipientDate',\n 'fields.recipientSelectedDate',\n 'fields.memorialOrderData',\n 'fields.recipientName',\n 'fields.recipientAddress',\n 'fields.recipientAddress2',\n 'fields.recipientPostalCode',\n 'fields.recipientCity',\n 'fields.certificateImageId'\n ],\n treeCount: ['fields.treeCount']\n }\n },\n\n validations() {\n // Multiple validations with requiredIf doesn't work, custom validateIf used instead\n\n const reqAddress = requiredIf(\n () => this.showAddressFields || this.activeSection === 'company'\n );\n const reqShippingAddress = requiredIf(\n () => this.fields.showShippingFields\n )\n return {\n fields: {\n amount: {\n decimal,\n minValue: v => v >= this.minAmount,\n required\n },\n customAmount: {\n requiredIf: requiredIf(() => this.useCustomAmount),\n validateCustomAmount: validateIf(\n numeric,\n this.useCustomAmount\n )\n },\n\n quantity: {\n numeric,\n minValue: v => v >= minQuantity,\n required\n },\n treeCount: {\n numeric,\n minValue: v => v >= minQuantity,\n required\n },\n\n ssn: {\n requiredIf: requiredIf(() => !isLoggedIn),\n validateSSN: validateIf(isValidSSN, isLoggedIn || !isLoggedIn)\n },\n sparId: {\n requiredIf: requiredIf(() => !this.showAddressFields),\n },\n\n firstName: {\n requiredIf: reqAddress\n },\n lastName: {\n requiredIf: reqAddress\n },\n\n companyName: { required },\n companyRegistrationNumber: {\n requiredIf: requiredIf(() => !isLoggedIn),\n validateCompanyRegistrationNumber: validateIf(\n isValidSwedishOrganizationNumber,\n !isLoggedIn\n ),\n },\n\n address: { requiredIf: reqAddress },\n address2: { optional },\n postalCode: { requiredIf: reqAddress },\n city: { requiredIf: reqAddress },\n email: {\n email,\n required,\n },\n phone: {\n phone: () => this.fields.phoneIsValid,\n requiredIf: requiredIf(() => isLoggedIn !== true),\n },\n\n showShippingFields: { optional },\n shippingFirstName: { requiredIf: reqShippingAddress },\n shippingLastName: { requiredIf: reqShippingAddress },\n shippingAddress: { requiredIf: reqShippingAddress },\n shippingAddress2: { optional },\n shippingPostalCode: { requiredIf: reqShippingAddress },\n shippingCity: { requiredIf: reqShippingAddress },\n\n payment: { required },\n swishPhone: {\n requiredIf: requiredIf(() => this.isSwishPhone),\n validateSwishPhone: () => this.fields.swishPhoneIsValid || !this.isSwishPhone\n },\n\n bank: {\n requiredIf: requiredIf(() => !this.showAccountFields)\n },\n bankAccountNumberSelected: {\n requiredIf: requiredIf(() => !this.showAccountFields)\n },\n clearingNo: {\n requiredIf: requiredIf(() => this.showAccountFields),\n validateClearingNo: validateIf(\n isClearingNo,\n this.showAccountFields,\n )\n },\n accountNo: {\n requiredIf: requiredIf(() => this.showAccountFields),\n validateClearingNo: validateIf(\n isAccountNo,\n this.showAccountFields,\n )\n },\n\n certificate: { optional },\n certificateOther: { optional },\n certificateName: {\n requiredIf: requiredIf(() => this.showCertificateName)\n },\n certificateImageId: {\n requiredIf: requiredIf(\n () => this.certificateImagesAreSelectable\n )\n },\n certificateFromName: {\n requiredIf: requiredIf(() => certificateShowFromName),\n validateRequiredFromName: validateIf(\n maxLength(certificateFromMaxLength),\n certificateShowFromName,\n )\n },\n certificateMessage: {\n requiredIf: requiredIf(() => this.showCertificateName),\n maxLength: maxLength(this.certificateTextMaxLength),\n maxRows: maxRows(this.certificateTextMaxRows)\n },\n\n recipientEmail: {\n requiredIf: requiredIf(() => this.isOtherCertificate),\n validateRequiredEmail: validateIf(\n email,\n this.isOtherCertificate\n )\n },\n recipientSelect: { optional },\n recipientDate: {\n requiredIf: requiredIf(() => this.isPrintCertificate),\n validateRequiredDate: validateIf(\n isDate,\n this.isPrintCertificate\n ),\n validateRequiredMinToday: validateIf(\n isMinToday,\n this.isPrintCertificate\n )\n },\n recipientSelectedDate: { optional },\n recipientName: {\n requiredIf: requiredIf(() => this.isPrintCertificate)\n },\n recipientAddress: {\n requiredIf: requiredIf(() => this.isPrintCertificate)\n },\n recipientAddress2: { optional },\n recipientPostalCode: {\n requiredIf: requiredIf(() => this.isPrintCertificate)\n },\n recipientCity: {\n requiredIf: requiredIf(() => this.isPrintCertificate)\n },\n memorialOrderData: { optional },\n\n },\n groups: this.groups,\n forms: forms\n };\n },\n\n watch: {\n fields: {\n handler() {\n this.setStore();\n this.groupError = Object.assign({}, defaultGroups);\n },\n deep: true\n },\n 'fields.payment'(val) {\n this.isSwishPhone = val === 'swish';\n },\n 'fields.amount'() {\n this.updateTotalCost();\n },\n 'fields.customAmount'() {\n this.updateTotalCost();\n },\n 'fields.certificateOther'(val) {\n this.isOtherCertificate = val;\n },\n 'fields.certificate'(val) {\n this.isPrintCertificate = val;\n\n this.updateTotalCost();\n },\n 'billectaBankIdAutoStartToken'(val) {\n this.bankIdUrl = val\n ? 'bankid:///?autostarttoken=' + val + '&redirect=null'\n : '';\n\n if (this.bankIdUrl && app.billectaCurrentDevice) {\n if (!this.openBankIDOnCurrentDevice) {\n this.openBankIDOnCurrentDevice = true;\n window.location.href = this.bankIdUrl;\n }\n }\n },\n 'fields.quantity'() {\n this.updateTotalCost();\n },\n 'fields.certificateImageId'() {\n const image = this.findCertificateImage(\n this.fields.certificateImageId\n );\n if (image) {\n this.selectedCertificateImage = image;\n this.selectedCertificateImageStyle = {\n backgroundImage: `url('${image.src}')`\n };\n }\n },\n 'fields.recipientSelectedDate'() {\n this.memorialOrderDateSelected(this.fields);\n },\n },\n\n filters: {\n convertLineBreaks: val => {\n const str = $('
')\n .html(val)\n .text();\n return str.replace(new RegExp('\\r?\\n', 'g'), '
');\n },\n formatAmount: val => {\n let amount = parseFloat(val);\n if (isNaN(amount)) {\n amount = 0;\n }\n\n const options = {\n currency: currency,\n style: 'currency'\n };\n\n if (!allowDecimalAmounts) {\n options.minimumFractionDigits = 0;\n options.maximumFractionDigits = 0;\n }\n return amount.toLocaleString(locale, options);\n }\n },\n\n created: function() {\n const store = JSON.parse(this.$store.get(this.type));\n if (isClimateCompensation) {\n store.fields.amount = this.amounts[0];\n }\n\n // If store exists and not expired, remove and reset order data to storage\n if (store && store.expire > Date.now()) {\n if (type === 'checkout') {\n // Since we read amount from sessions the local storage value may not be\n // correct on pageload for cart checkouts\n store.fields.amount = this.fields.amount;\n }\n\n this.xhrStatusOrderStatus = XHR_STATUS_LOADING;\n\n if (store.validateOnCreate) {\n this.$v.fields.$touch();\n }\n\n this.$store.remove(this.type);\n\n // Set order id if received from backend\n if (this.orderId !== '') {\n store.orderId = this.orderId;\n }\n\n // If user goes back from payment the same order should be updated\n // But only if order hasn't a successful payment\n if (store.orderId !== '') {\n this.getOrderStatus(store.orderId)\n .then(status => {\n this.xhrStatusOrderStatus = XHR_STATUS_IDLE;\n if (status === 'pending') {\n this.setData(store);\n } else if(status === 'cancelled') {\n // Remove order id, but keep order info\n store.orderId = '';\n this.setData(store);\n }\n })\n .catch(e => {\n this.xhrStatusOrderStatus = XHR_STATUS_ERROR;\n logger.error('Donation.getOrderStatus failed', e);\n });\n } else {\n this.xhrStatusOrderStatus = XHR_STATUS_IDLE;\n this.setData(store);\n }\n } else { // Store doesn't exist or is expired\n this.xhrStatusOrderStatus = XHR_STATUS_IDLE;\n }\n\n if (isTreeOrder) {\n this.onTreeCountUpdate();\n }\n\n if (this.$store.get('billectaBankAccountPublicId')) {\n this.getBankAccounts();\n }\n },\n\n methods: {\n onChangeFocusOut (e) {\n if(e.target.name === 'certificateName'){\n this.getMemorialOrderData(this.fields.certificateName, this.fields);\n }\n },\n onChangeAmount: function(_e) {\n this.useCustomAmount = false;\n this.hideFieldError = '';\n },\n onClickCustomAmount: function() {\n if (!this.useCustomAmount) {\n this.$refs.inputCustomAmount.focus();\n this.fields.amount = this.fields.customAmount;\n this.useCustomAmount = true;\n this.hideFieldError = '';\n }\n },\n onInputCustomAmount: function() {\n this.fields.amount = this.fields.customAmount;\n this.hideFieldError = 'customAmount';\n },\n onChangeCustomAmount: function() {\n this.fields.amount = this.fields.customAmount;\n this.hideFieldError = '';\n },\n onInputField: function(e) {\n if (this.$v.fields[e.target.name].$error) {\n this.hideFieldError = e.target.name;\n }\n if (e.target.name === 'treeCount') {\n this.onTreeCountUpdate();\n }\n },\n onChangeField: function(e) {\n this.hideFieldError = '';\n this.$v.fields[e.target.name].$touch();\n if (e.target.name === 'swishPhone') {\n this.onSwishPhoneChange();\n }\n if (e.target.name === 'phone') {\n this.copyPhoneToSwish();\n }\n },\n formatSSN: function() {\n let value = this.fields.ssn.replace(/\\D/g, '');\n if (value.length === 10) {\n let prefix = '19';\n const date = new Date();\n const currentYear = date\n .getFullYear()\n .toString()\n .substring(2);\n const ssnYear = this.fields.ssn.substring(0, 2);\n if (parseInt(ssnYear) <= parseInt(currentYear)) {\n prefix = '20';\n }\n return `${prefix}${value}`;\n }\n\n return value;\n },\n\n toggleAddress: function() {\n this.showAddressFields = !this.showAddressFields;\n if (this.showAddressFields && this.$v.fields.ssn.$invalid) {\n this.fields.ssn = '';\n }\n if (this.showAddressFields) {\n this.showObfuscatedAddress = false;\n this.showMissingAddressError = false;\n }\n this.showSparError = false;\n this.setStore();\n },\n toggleAccount: function() {\n this.showAccountFields = !this.showAccountFields;\n this.setStore();\n },\n togglePreviewModal: function() {\n this.showPreviewModal = !this.showPreviewModal;\n $('body,html').toggleClass(\n 'js-state-no-scroll',\n this.showPreviewModal\n );\n },\n togglePreviewType: function(type) {\n this.previewType = type;\n },\n onEnterSection: function(el, done) {\n V(el.parentElement, 'scroll', {\n duration: 500,\n offset: -100,\n delay: 200\n });\n V(el, 'slideDown', { duration: 500, complete: done });\n },\n onAfterEnterSection: function(el) {\n V(el.parentElement, 'scroll', { duration: 500, offset: -100 });\n },\n onLeaveSection: function(el, done) {\n V(el, 'slideUp', { duration: 200, complete: done });\n },\n onEnterExpandable: function(el, done) {\n V(el, 'slideDown', {\n duration: 300,\n easing: 'easeOutQuart',\n complete: done\n });\n },\n onLeaveExpandable: function(el, done) {\n V(el, 'slideUp', {\n duration: 200,\n easing: 'easeOutQuart',\n complete: done\n });\n },\n onClickChangeSection: function(section) {\n this.activeSection = section;\n this.setStore();\n },\n onClickNextSection: function(section = false) {\n this.$v.groups[section].$touch();\n\n if (!section) {\n this.activeSection = '';\n return;\n }\n\n this.touchedGroups[section] = true;\n\n if (this.$v.groups[section].$invalid) {\n this.groupError[section] = true;\n\n if (\n section === 'personal' &&\n !this.showAddressFields &&\n this.$v.fields.sparId.$invalid\n ) {\n this.showMissingAddressError = true;\n }\n return;\n }\n\n this.groupError[section] = false;\n\n this.trackOnClickNextSection(section);\n\n const currentIndex = this.sections.indexOf(this.activeSection);\n const nextItems = this.sections.slice(currentIndex + 1);\n const nextUntouchedItem = nextItems.find(x => {\n return !this.touchedGroups[x] || this.$v.groups[x].$invalid;\n });\n this.activeSection = nextUntouchedItem;\n this.setStore();\n },\n\n onClickAddress() {\n if (!this.fields.ssn.length || this.$v.fields.ssn.$invalid) {\n logger.error(\n 'User tried to get address without a SSN, should not be possible'\n );\n return;\n }\n\n this.showAddressFields = false;\n this.showObfuscatedAddress = false;\n this.showSparLoader = true;\n this.showSparError = false;\n this.showMissingAddressError = false;\n\n getSparPerson(this.formatSSN())\n .then(response => {\n this.showObfuscatedAddress = true;\n this.showSparLoader = false;\n this.showSparError = false;\n this.fields.sparId = response.sparId;\n this.obfuscatedAddress = response.obfuscate;\n })\n .catch(e => {\n logger.error('getSparPerson failed', e);\n this.showObfuscatedAddress = false;\n this.showSparLoader = false;\n this.showSparError = true;\n this.fields.sparId = '';\n });\n },\n onSwishPhoneChange() {\n if (this.allowSwishPhoneOverride) {\n this.allowSwishPhoneOverride = false;\n }\n },\n copyPhoneToSwish() {\n // Only copy regular phone number if country code also is swedish\n const allowCopy =\n this.fields.swishPhone === '' &&\n this.allowSwishPhoneOverride;\n if (\n allowCopy &&\n this.fields.phoneCountry &&\n this.fields.phoneCountry.iso2 === 'se'\n ) {\n this.fields.swishPhone = this.fields.phone;\n }\n },\n onTreeCountUpdate(diff = 0) {\n const count = parseInt(this.fields.treeCount) + diff;\n if (count > 0) {\n this.fields.treeCount =\n parseInt(this.fields.treeCount) + diff;\n }\n this.fields.quantity = parseInt(this.fields.treeCount);\n },\n onClickChangeDonation(type, url) {\n // Set store for the type to navigate to\n this.setStore(type, true);\n window.location.href = url;\n },\n parseParamsToQuery(params) {\n const arr = Object.keys(params)\n .filter(p => params[p] !== '')\n .map(p => `${p}=${params[p]}`);\n\n if (arr.length <= 0) {\n return '';\n }\n return '?' + arr.join('&');\n },\n parseQueryToParams(query) {\n let params = {};\n query\n .replace('?', '')\n .split('&')\n .map(q => {\n const p = q.split('=');\n params[p[0]] = p[1] || '';\n });\n return params;\n },\n findCertificateImage(imageId) {\n if (imageId === null || this.certificateImages === undefined) {\n return {};\n }\n\n const id = parseInt(imageId);\n const image = this.certificateImages.find(x => {\n return x.ID === id;\n });\n return image || {};\n },\n getCertificateImageUrl(imageId) {\n if (!certificateImagesAreSelectable) return {};\n\n const image = this.findCertificateImage(imageId);\n return image.src || {};\n },\n clickSubmit(val, currentDevice = false) {\n this.currentSubmit = val;\n this.currentDevice = currentDevice;\n this.showBankIDLoadingSpinner = true;\n\n if (this.type === 'checkout') {\n trackCart('checkout', {step: 4}, cartInfo)\n }\n },\n onSubmit(e) {\n // Follow formactions on certain actions\n if(['certificate-pdf', 'update-cart'].indexOf(this.currentSubmit) !== -1) {\n return;\n }\n\n e.preventDefault();\n\n if (this.$v.forms.section.$invalid) {\n this.error = true;\n return;\n }\n this.error = false;\n\n const data = this.prepareData();\n\n this.xhrStatusSubmit = XHR_STATUS_LOADING;\n\n V(this.$refs.loaderScrollTo, 'scroll', {\n duration: 500,\n offset: 0,\n delay: 200\n });\n this.$refs.submitButton.blur();\n\n if (this.currentDevice){\n this.openBankIDOnCurrentDevice = false;\n this.billectaBankIdAutoStartToken = null;\n }\n\n this.maybeGetFingerprint(this.type, data, this.currentDevice)\n .then(_response => this.submitDonation(data))\n .then(response => {\n window.location = response.redirect;\n this.showBankIDLoadingSpinner = false;\n })\n .catch(e => {\n logger.error('Donation.maybeGetFingerprint failed', e);\n this.xhrStatusSubmit = XHR_STATUS_ERROR;\n this.submitErrorMessage = e.message;\n this.showBankIDLoadingSpinner = false;\n });\n },\n submitDonation(data) {\n this.xhrStatusSubmit = XHR_STATUS_LOADING;\n\n if (this.digitalSignature) {\n data.digitalSignature = this.digitalSignature;\n }\n\n return new Promise((resolve, reject) => {\n const url = '/wp-json/donation/v1/donation/';\n http.post(url, data)\n .then(response => {\n if(response.orderId) {\n this.orderId = response.orderId;\n }\n this.setStore();\n\n if(response.error || !response.redirect) {\n reject(response);\n this.xhrStatusSubmit = XHR_STATUS_ERROR;\n } else {\n resolve(response);\n }\n })\n .catch(e => {\n logger.error('Donation.submitDonation failed', e);\n this.xhrStatusSubmit = XHR_STATUS_ERROR;\n reject(e);\n });\n });\n },\n\n maybeGetFingerprint(_data, data, currentDevice) {\n this.xhrStatusMessageType = this.type;\n\n return new Promise((resolve, reject) => {\n if (isMonthlyOrder) {\n billecta\n .getSigningFingerprint(this.formatSSN(), currentDevice)\n .then(response => {\n this.billectaQRCode = null;\n this.billectaIsPolling = false;\n this.billectaBankIdAutoStartToken = null;\n this.digitalSignature = JSON.stringify(\n response\n );\n })\n .then(_response => {\n resolve();\n })\n .catch(e => {\n this.billectaQRCode = null;\n this.billectaIsPolling = false;\n this.billectaBankIdAutoStartToken = null;\n reject(e);\n });\n } else {\n resolve();\n }\n });\n },\n updateTotalCost() {\n let total = this.fields.amount * this.fields.quantity;\n if (isCertificateOrder && this.isPrintCertificate) {\n total += this.certificatePrintCost;\n }\n this.totalCost = total;\n },\n\n setStore(type = this.type, validateOnCreate = false) {\n const store = {\n fields: Object.assign({}, this.fields),\n\n useCustomAmount: this.useCustomAmount,\n showAddressFields: this.showAddressFields,\n showAccountFields: this.showAccountFields,\n showObfuscatedAddress: this.showObfuscatedAddress,\n obfuscatedAddress: this.obfuscatedAddress,\n allowSwishPhoneOverride: this.allowSwishPhoneOverride,\n\n billectaBankAccountPublicId: this.billectaBankAccountPublicId,\n\n touchedGroups: this.touchedGroups,\n activeSection: this.activeSection,\n\n orderId: this.orderId,\n\n expire: Date.now() + 3600000\n };\n\n // Reset some fields that should not be stored\n store.fields.bankAccountNumberSelected = '';\n store.fields.clearingNo = '';\n store.fields.accountNo = '';\n\n if (validateOnCreate) {\n store.validateOnCreate = true;\n }\n\n // Save to local storage\n this.$store.set(type, JSON.stringify(store));\n },\n\n getBankAccountsThisDevice() {\n this.showBankIDLoadingSpinner = true;\n this.getBankAccounts(false)\n },\n getBankAccountsOtherDevice() {\n this.showBankIDLoadingSpinner = true;\n this.getBankAccounts(true)\n },\n getBankAccounts(otherDevice = false) {\n\n if (!this.fields.bank) {\n logger.error('Bank is not selected');\n return;\n }\n\n if (!this.fields.ssn.length || this.$v.fields.ssn.$invalid) {\n logger.error(\n 'User tried to get their bank accounts without a SSN, should not be possible'\n );\n return;\n }\n\n this.showAccountFields = false;\n this.xhrStatusBankAccount = XHR_STATUS_LOADING;\n\n const ongoingRequestPublicId = this.$store.get('billectaBankAccountPublicId');\n\n const promise = ongoingRequestPublicId\n ? billecta.resumeBankAccount(ongoingRequestPublicId)\n : billecta.getBankAccounts(this.fields.bank, this.formatSSN(), otherDevice);\n\n promise.then(response => {\n this.billectaQRCode = null;\n this.billectaIsPolling = false;\n this.billectaBankIdAutoStartToken = null;\n this.$store.remove('billectaBankAccountPublicId');\n if (response.length) {\n this.xhrStatusBankAccount = XHR_STATUS_SUCCESS;\n this.bankAccountNumbers = response;\n } else {\n this.xhrStatusBankAccount = XHR_STATUS_EMPTY;\n }\n this.showBankIDLoadingSpinner = false;\n })\n .catch(e => {\n this.xhrStatusBankAccount = XHR_STATUS_ERROR;\n this.billectaQRCode = null;\n this.billectaIsPolling = null;\n this.billectaBankIdAutoStartToken = null;\n this.$store.remove('billectaBankAccountPublicId');\n logger.error('billecta.getBankAccounts failed', e);\n this.showBankIDLoadingSpinner = false;\n logger.error('Donation.getOrderStatus failed', e);\n });\n },\n\n getOrderStatus(orderId) {\n return new Promise((resolve, reject) => {\n http.get('/wp-json/transaction/v1/status/' + orderId)\n .then(x => {\n if (!x.success) {\n reject(x);\n } else if (x.status) {\n resolve(x.status);\n } else {\n reject(x);\n }\n })\n .catch(x => {\n reject(x);\n });\n });\n },\n\n updateFields: function(data) {\n Object.keys(data).map(key => {\n let value = data[key];\n if (value === 'false') {\n value = false;\n } else if (value === 'true') {\n value = true;\n }\n this.fields[key] = value;\n });\n },\n\n setData: function(data) {\n this.orderId = data.orderId;\n // this.isLoggedIn = data.isLoggedIn;\n\n this.fields = data.fields;\n this.useCustomAmount = data.useCustomAmount;\n\n this.isOtherCertificate = data.isOtherCertificate;\n this.isPrintCertificate = data.isPrintCertificate;\n\n this.showAddressFields = data.showAddressFields;\n this.showAccountFields = data.showAccountFields;\n this.showObfuscatedAddress = data.showObfuscatedAddress;\n this.obfuscatedAddress = data.obfuscatedAddress;\n this.allowSwishPhoneOverride = data.allowSwishPhoneOverride;\n\n this.touchedGroups = data.touchedGroups;\n\n if (!this.showAddressFields && !this.$v.fields.ssn.$invalid && !this.obfuscatedAddress) {\n this.showMissingAddressError = true;\n }\n\n // Open the first section which is either active or invalid\n const group = sections.find(s => {\n return (\n this.$v.groups[s].$invalid || data.activeSection === s\n );\n });\n if (group !== undefined) {\n this.activeSection = group;\n }\n },\n\n\n prepareData() {\n const fields = this.fields;\n\n const data = {\n orderId: this.orderId,\n postId: this.postId,\n customerId: customerId,\n type: this.type,\n campaignCode: this.campaignCode,\n amount: this.useCustomAmount\n ? parseInt(fields.customAmount)\n : fields.amount,\n email: fields.email,\n phone: fields.phone,\n phoneCountry: fields.phoneCountry,\n phoneSanitized: fields.phoneSanitized,\n quantity: fields.quantity,\n leadGuid,\n };\n\n // Force total cost to make sure it is same as displayed on frontend\n if (isClimateCompensation) {\n data.totalCost = Math.round(this.totalCost);\n }\n\n if (this.showAddressFields || isCompanyOrder) {\n data.firstName = fields.firstName;\n data.lastName = fields.lastName;\n data.address = fields.address;\n data.address2 = fields.address2;\n data.postalCode = fields.postalCode;\n data.city = fields.city;\n } else if (!this.showAddressFields && !isCompanyOrder) {\n data.sparId = fields.sparId;\n }\n\n if (this.fields.showShippingFields) {\n data.shippingFirstName = fields.shippingFirstName;\n data.shippingLastName = fields.shippingLastName;\n data.shippingAddress = fields.shippingAddress;\n data.shippingAddress2 = fields.shippingAddress2;\n data.shippingPostalCode = fields.shippingPostalCode;\n data.shippingCity = fields.shippingCity;\n }\n\n if (isMonthlyOrder) {\n data.payment = 'automatic_payment_gateway';\n data.bank = fields.bank;\n data.legalAgreement = legalAgreement;\n\n if (this.showAccountFields) {\n data.clearingNo = fields.clearingNo;\n data.accountNo = fields.accountNo;\n } else {\n const account = this.bankAccountNumbers[\n fields.bankAccountNumberSelected\n ];\n data.clearingNo = account.clearingNo;\n data.accountNo = account.accountNo;\n }\n } else {\n data.payment = fields.payment;\n }\n\n if (isCompanyOrder) {\n data.companyName = fields.companyName;\n data.companyRegistrationNumber =\n fields.companyRegistrationNumber;\n } else {\n data.ssn = fields.ssn;\n }\n\n if (isCertificateOrder) {\n if (this.isPrintCertificate) {\n data.certificate = 'print';\n } else {\n data.certificate = 'digital';\n }\n\n data.certificateMessage = fields.certificateMessage;\n data.certificateName = fields.certificateName;\n data.certificateFromName = fields.certificateFromName;\n data.certificateImageId = fields.certificateImageId;\n\n if (this.isOtherCertificate) {\n data.certificateOther = 'digital';\n data.recipientEmail = fields.recipientEmail;\n }\n if (this.isPrintCertificate) {\n data.recipientSelect = fields.recipientSelect;\n data.recipientDate = fields.recipientDate;\n data.recipientSelectedDate = fields.recipientSelectedDate;\n data.recipientName = fields.recipientName;\n data.recipientAddress = fields.recipientAddress;\n data.recipientAddress2 = fields.recipientAddress2;\n data.recipientPostalCode = fields.recipientPostalCode;\n data.recipientCity = fields.recipientCity;\n }\n }\n\n if (isTreeOrder) {\n data.treeCount = fields.treeCount;\n }\n\n if (fields.payment === 'swish') {\n data.swishPhone = fields.swishPhone;\n data.swishPhoneCountry = fields.swishPhoneCountry;\n data.swishPhoneSanitized = fields.swishPhoneSanitized;\n }\n\n return data;\n },\n\n trackOnClickNextSection(group) {\n let category = GIFT_TYPE_TRACKING_NAMES[this.type];\n if(this.trackingName !== '' && this.trackingName !== null) {\n category = trackingName;\n }\n const action = SECTION_TRACKING_NAMES[group];\n\n let label = null;\n if (action === 'belopp') {\n label = this.fields.amount * this.fields.quantity;\n } else if (action === 'betalsatt') {\n label = this.fields.payment;\n } else if (action === 'gavobevis') {\n // Change\n if (this.isPrintCertificate) {\n label = 'tryckt';\n } else {\n label = 'digitalt';\n }\n } else if (\n action === 'personuppgifter' ||\n action === 'foretagsuppgifter' ||\n action === 'autogiroregistrering'\n ) {\n label = '';\n }\n\n if (category !== 'checkout') {\n trackEvent('checkoutSteps', category, action, label);\n } else {\n let step = 0;\n switch (action) {\n case 'varukorg':\n step = 1;\n break;\n case 'personuppgifter':\n case 'foretagsuppgifter':\n step = 2;\n break;\n case 'betalsatt':\n step = 3;\n break;\n }\n\n trackCart('checkout', {step: step}, cartInfo)\n }\n },\n\n getMemorialOrderData: function(name, fields) {\n fetch('/wp-json/memorial/v1/name/'+name)\n .then(response => response.json())\n .then(data => {\n fields.memorialOrderData = data;\n });\n },\n\n memorialOrderDateSelected: function(fields) {\n $.each(fields.memorialOrderData, function(_key, value) {\n if(fields.recipientSelectedDate === value.orderId) {\n fields.recipientDate = value.recipientDate;\n fields.recipientName = value.recipientName;\n fields.recipientAddress = value.recipientAddress1;\n fields.recipientAddress2 = value.recipientAddress2;\n fields.recipientPostalCode = value.recipientPostalCode;\n fields.recipientCity = value.recipientCity;\n }\n })\n\n },\n }\n });\n\n // This will enable the button in the UI when AutoStartToken is received OR after few seconds.\n // it is implemented like this because we do not know if the bank supports AutoStartToken or not\n let _pollingTimeout = null;\n billectaEventListener.onReceivedSigningFingerprintStatus = () => {\n if (!app.billectaIsPolling && _pollingTimeout === null) {\n setTimeout(() => {\n app.billectaIsPolling = true;\n _pollingTimeout = null;\n }, 9500)\n }\n }\n\n billectaEventListener.onReceivedBankAccountStatus = () => {\n if (!app.billectaIsPolling && _pollingTimeout === null) {\n // Some banks are rather slow with generating the autostarttoken, 9500 should give the app\n // 3 polls to before lighting the button. Hopefully we have the token by then.\n setTimeout(() => {\n app.billectaIsPolling = true;\n _pollingTimeout = null;\n }, 9500);\n }\n }\n\n billectaEventListener.onReceivedBankAccountInititate = (publicId) => {\n app.$store.set('billectaBankAccountPublicId', publicId);\n }\n\n billectaEventListener.onReceivedCurrentDevice = (currentDevice) => {\n app.billectaCurrentDevice = currentDevice;\n }\n\n billectaEventListener.onReceivedQR = (qr) => {\n app.billectaQRCode = qr\n app.billectaIsPolling = true\n }\n\n billectaEventListener.onReceivedBankIdAutoStartToken = (token) => {\n app.billectaBankIdAutoStartToken = token\n app.billectaIsPolling = true\n }\n};\n\nexport default Donation;\n","/* global $ */\n\nconst toggleShare = function($el) {\n const url = $el.data('url');\n\n let style = 'toolbar,scrollbars,resizable,top=100,left=100,width=800';\n style += ',height=500';\n\n window.open(url, '_blank', style);\n}\n\nexport default {\n toggleShare\n}\n","import copy from 'clipboard-copy';\n\nconst copyData = ($el) => {\n const text = $el.data('copy');\n\n $el.addClass('js-state-copied');\n copy(text);\n\n setTimeout(() => {\n $el.removeClass('js-state-copied');\n }, 10000);\n\n}\n\nexport default {\n copyData\n}","/* global $, server_resp */\n\nimport http from './http'\nimport { awaitPollStatus } from \"./utils\";\n\nconst Checkout = () => {\n const {\n type,\n paymentMethod,\n orderId,\n completedUrl,\n paymentUrl,\n } = checkoutLoader;\n if(type !== 'swish' && type !== 'payex') {\n return;\n }\n\n const func = type === 'swish' ? pollSwish : pollPayex;\n\n awaitPollStatus(func, orderId, 3 * 60 * 1000, 3000).then(x => {\n window.location = completedUrl;\n }).catch(x => {\n window.location = paymentUrl;\n });\n};\n\nconst pollPayex = (orderId) => {\n return new Promise((resolve, reject) => {\n http.get('/wp-json/transaction/v1/status/' + orderId).then(x => {\n if(!x.success) {\n reject('reject');\n } else if(x.status === 'completed') {\n resolve(x);\n } else if(x.status === 'pending') {\n resolve('repeat');\n } else {\n reject('reject');\n }\n }).catch(x => {\n reject(x);\n });\n });\n};\n\nconst pollSwish = (orderId) => {\n\treturn new Promise((resolve, reject) => {\n\t\thttp.get('/wp-json/transaction/v1/status/' + orderId).then(x => {\n\t\t\tif(!x.success) {\n\t\t\t\treject('reject');\n\t\t\t} else if(x.status === 'completed') {\n\t\t\t\tresolve(x);\n\t\t\t} else if(x.status === 'pending') {\n\t\t\t\tresolve('repeat');\n\t\t\t} else {\n\t\t\t\treject('reject');\n\t\t\t}\n\t\t}).catch(x => {\n\t\t\treject(x);\n\t\t});\n\t});\n};\n\nexport default Checkout;\n","/* global $ */\n\nconst CertificateForm = (el) => {\n const self = this;\n\n const $el = $(el);\n const $form = $el.closest('form');\n $el.find('#certificateOther').change(function(e) {\n const show = $(this).is(':checked');\n $el.find($(this).data('toggle')).slideToggle(show);\n });\n\n const $msgField = $el.find('[name=certificateMessage]');\n const $fromField = $el.find('[name=certificateFromName]');\n const $quantityField = $form.find('[name=quantity]');\n\n const $modal = $el.find('.js-modal');\n $el.find('.js-modal-open').click((e) => {\n e.preventDefault();\n $modal.fadeIn(() => {\n $modal.addClass('js-state-open');\n const message = $msgField.val().replace(/[\\r\\n]/g, '
');\n $el.find('.js-modal-message').html(message);\n\n const quantity = $quantityField.val();\n if(quantity > 1) {\n $el.find('.js-modal-quantity').show().find('span').text(quantity);\n } else {\n $el.find('.js-modal-quantity').hide().find('span').text('');\n }\n\n if($fromField.length) {\n const fromName = $fromField.val();\n const fromText = $fromField.data('text').replace('%s', fromName);\n $el.find('.js-modal-from-name').text(fromText);\n }\n });\n });\n\n $el.find('.js-modal-close').click(() => {\n $modal.removeClass('js-state-open');\n $modal.fadeOut('slow');\n });\n\n const $previewToggle = $el.find('.js-preview');\n $previewToggle.find('button').click(function(e) {\n e.preventDefault();\n const $btn = $(this);\n if($btn.hasClass('js-state-active')) {\n return;\n }\n\n const val = $btn.data('type');\n $previewToggle.find('button').removeClass('js-state-active');\n $btn.addClass('js-state-active');\n $previewToggle.find('[data-preview]').hide();\n $previewToggle.find(`[data-preview=\"${val}\"]`).show();\n });\n\n $msgField.change(() => {\n const value = $msgField.val();\n const maxRows = $msgField.data('maxrows') || 7;\n let error = false;\n if(value.split('\\n').length > maxRows) {\n error = true;\n }\n if(value === '' || value.length > $msgField.attr('maxlength')) {\n error = true;\n }\n\n showFieldError($msgField, error);\n });\n\n $fromField.change(() => {\n const value = $fromField.val();\n let error = false;\n if(value === '' || value.length > $fromField.attr('maxlength')) {\n error = true;\n }\n\n showFieldError($fromField, error);\n });\n};\n\nconst showFieldError = ($el, error) => {\n const $errorMsg = $el.next('.js-error-msg');\n if(error) {\n $errorMsg.slideDown();\n $el.addClass('js-state-error');\n } else {\n $el.removeClass('js-state-error');\n if($errorMsg.is(':visible')) {\n $errorMsg.slideUp();\n }\n }\n};\n\nconst DigitalCertificate = (el) => {\n const $el = $(el);\n const $more = $el.find('.js-certificate-more');\n $more.click(() => {\n $('html, body').animate({\n scrollTop: 80\n });\n });\n\n $(window).scroll(() => {\n const top = $(document).scrollTop();\n if(top >= 50) {\n $el.addClass('js-state-more-active');\n } else {\n $el.removeClass('js-state-more-active');\n }\n });\n};\n\nconst UnloadDigitalCertificate = (el) => {\n const $el = $(el);\n const $more = $el.find('.js-certificate-more');\n if($more.length) {\n $(window).scrollTop(0);\n }\n};\n\nexport { CertificateForm, DigitalCertificate, UnloadDigitalCertificate };\n","import { reloadSlider, goToSlide } from './slider';\n\nconst Gallery = (el) => {\n const $el = $(el);\n const $modal = $el.find('.js-modal');\n $el.find('.js-modal-open').click((e) => {\n e.preventDefault();\n\n const i = $(e.currentTarget).data('index');\n const $slider = $modal.find('.js-slider-list');\n\n $modal.fadeIn(() => {\n $modal.addClass('js-state-open');\n\n reloadSlider($slider);\n goToSlide($slider, i);\n });\n });\n\n $modal.find('.js-modal-close').click(() => {\n $modal.removeClass('js-state-open');\n $modal.fadeOut('slow');\n });\n}\n\nexport default Gallery;\n","// Import jquery like this for slick-carousel to work\nimport $ from 'jquery';\nimport 'slick-carousel';\n\nconst Slider = (el) => {\n var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\n if (isIE11) $('body').addClass('browser-IE');\n\n const $el = $(el);\n const $slider = $el.find('.js-slider-list');\n const $prev = $el.find('.js-slider-prev');\n const $next = $el.find('.js-slider-next');\n $slider.slick({\n centerMode: true,\n centerPadding: 0,\n nextArrow: $next,\n prevArrow: $prev,\n });\n}\n\nconst reloadSlider = (el) => {\n const $el = $(el);\n $el.slick('setPosition');\n}\n\nconst goToSlide = (el, i) => {\n const $el = $(el);\n $el.slick('slickGoTo', i);\n}\n\nexport { Slider, reloadSlider, goToSlide };\n","import {isValidSwedishOrganizationNumber, isValidSSN} from \"./donation/validators\";\n\nexport function wcValidationSwedishSSN() {\n const wrapper = $(this).closest('.form-row');\n if (isValidSSN($(this).val())) {\n wrapper.addClass('woocommerce-validated');\n } else {\n wrapper.addClass('woocommerce-invalid');\n }\n}\n\nexport function wcValidationSwedishOrganizationNumber() {\n const wrapper = $(this).closest('.form-row');\n if (isValidSwedishOrganizationNumber($(this).val())) {\n wrapper.addClass('woocommerce-validated');\n } else {\n wrapper.addClass('woocommerce-invalid');\n }\n}\n","/* global $ */\n\nlet videoBgPlayer = null;\nlet playerBgType = null;\nlet videoModalPlayer = null;\nlet playerModalType = null;\n\nlet youtubeApiPromise = null;\nlet vimeoApiPromise = null;\n\nconst parseUrl = url => {\n let a = document.createElement('a');\n a.href = url;\n return a;\n};\n\nconst injectJsApi = scriptUrl => {\n let tag = document.createElement('script');\n tag.src = scriptUrl;\n\n let firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n\n return new Promise(resolve => {\n tag.addEventListener('load', () => {\n resolve();\n });\n });\n};\n\nconst getDomElements = $el => {\n const $player = $('.js-video-player');\n const $modal = $('.js-video-modal');\n const $wrapper = $el.parent();\n const $controlButton = $('.js-video-control');\n const $modalButtonOpen = $('.js-video-modal-open');\n const $modalButtonClose = $modal.find('.js-video-modal-close');\n\n return {\n player: $player,\n modal: $modal,\n wrapper: $wrapper,\n controlButton: $controlButton,\n modalButtonOpen: $modalButtonOpen,\n modalButtonClose: $modalButtonClose,\n playText: $controlButton.data('play'),\n pauseText: $controlButton.data('pause'),\n };\n};\n\nwindow.youtubeReadyFunction = [];\n\nwindow.onYouTubeIframeAPIReady = function() {\n window.youtubeReadyFunction.map(x => x());\n}\n\nconst YouTubePlayer = async ($el, url, id, asBg = true) => {\n const urlParts = url.match(\n /(youtu\\.be\\/|youtube\\.com\\/(watch\\?(.*&)?v=|(embed|v)\\/))([^\\?&\"'>]+)/\n );\n const videoId = urlParts[5];\n await youtubeApiPromise;\n\n let $videoContainer = $(`#${id}`);\n $videoContainer.empty();\n\n let innerContainer = document.createElement('div');\n const videoContainerInnerId = (innerContainer.id = `${id}-inner`);\n const elements = getDomElements($el);\n\n $videoContainer.append(innerContainer);\n\n if(asBg) {\n window.youtubeReadyFunction.push(function() {\n playerBgType = 'youtube';\n window.player = videoBgPlayer = new window.YT.Player(videoContainerInnerId, {\n videoId: videoId,\n playerVars: {\n controls: 0,\n loop: 1,\n playlist: videoId,\n modestbranding: 1,\n showInfo: 0,\n mute: 1,\n rel: 0\n },\n events: {\n onReady: () => {\n videoBgPlayer.playVideo();\n setTimeout(() => {\n elements.wrapper.removeClass('paused');\n }, 800);\n },\n onStateChange: (state) => {\n if(state === 'playing') {\n showPauseButton(elements);\n elements.wrapper.removeClass('paused');\n } else if(state === 'paused') {\n showPlayButton(elements);\n }\n },\n }\n });\n });\n\n elements.controlButton.click(() => {\n if (videoBgPlayer.getPlayerState() === 1) {\n videoBgPlayer.pauseVideo();\n } else {\n videoBgPlayer.playVideo();\n }\n });\n\n if ($(window).width() < 768){\n videoBgPlayer.pauseVideo();\n showPlayButton(elements);\n }\n\n } else {\n window.youtubeReadyFunction.push(function() {\n playerModalType = 'youtube';\n window.modalPlayer = videoModalPlayer = new window.YT.Player(videoContainerInnerId, {\n videoId: videoId,\n playerVars: {},\n });\n });\n }\n};\n\nconst VimeoPlayer = async ($el, url, id, asBg = true) => {\n await vimeoApiPromise;\n\n let $videoContainer = $(`#${id}`);\n $videoContainer.empty();\n $videoContainer.addClass('FeaturedContent__VimeoVideoContainer');\n\n const elements = getDomElements($el);\n\n if(asBg) {\n let options = {\n url: url,\n loop: 1,\n autoplay: 1,\n background: 1,\n title: 0,\n byline: 0,\n controls: 0,\n muted: 1,\n quality: '4K',\n };\n\n playerBgType = 'vimeo';\n videoBgPlayer = new Vimeo.Player(id, options);\n\n videoBgPlayer.on('play', function() {\n elements.wrapper.removeClass('paused');\n showPauseButton(elements);\n });\n\n videoBgPlayer.on('pause', function() {\n showPlayButton(elements);\n });\n\n elements.controlButton.click(() => {\n videoBgPlayer.getPaused().then((paused) => {\n if(paused) {\n videoBgPlayer.play();\n } else {\n videoBgPlayer.pause();\n }\n });\n });\n\n if ($(window).width() < 768){\n videoBgPlayer.pause();\n showPlayButton(elements);\n }\n\n } else {\n let options = {\n url: url\n };\n\n playerModalType = 'vimeo';\n videoModalPlayer = new Vimeo.Player(id, options);\n }\n};\n\nconst showPauseButton = (elements) => {\n elements.controlButton.find('span').text(elements.pauseText)\n elements.controlButton.addClass('js-state-pause').removeClass('js-state-play');\n};\n\nconst showPlayButton = (elements) => {\n elements.controlButton.find('span').text(elements.playText)\n elements.controlButton.addClass('js-state-play').removeClass('js-state-pause');\n};\n\nconst initVideo = ($el, url, id, asBg = true) => {\n let player;\n if (url.indexOf('youtube.com') > -1) {\n player = YouTubePlayer;\n if (!youtubeApiPromise) {\n youtubeApiPromise = injectJsApi('//www.youtube.com/player_api');\n }\n } else if (url.indexOf('vimeo.com') > -1) {\n player = VimeoPlayer;\n if (!vimeoApiPromise) {\n vimeoApiPromise = injectJsApi('//player.vimeo.com/api/player.js');\n }\n } else {\n console.warn(\n `Error: video player functionality not implemented for provider: ${\n parseUrl(url).host\n }`\n );\n return;\n }\n\n player($el, url, id, asBg);\n};\n\nconst resizeVideo = () => {\n var iframeImage = $('.video-bg__player');\n\n $(window).on('load resize', function(){\n var w = $(window).width(),\n h = $(window).height();\n\n const isPortrait = w/h < 16/9;\n iframeImage.toggleClass('js-state-portrait', isPortrait);\n iframeImage.toggleClass('js-state-landscape', !isPortrait);\n\n });\n}\n\nconst VideoPlayer = el => {\n const $el = $(el);\n const url = $el.data('video-url');\n initVideo($el, url, 'video-bg');\n resizeVideo();\n};\n\nconst VideoModal = el => {\n const $el = $(el);\n const elements = getDomElements($el);\n\n const url = $el.find('iframe').attr('src');\n initVideo($el, url, 'video-modal', false);\n\n elements.modalButtonOpen.click(() => {\n elements.modal.addClass('js-state-open');\n $('body,html').addClass('js-state-no-scroll');\n if(videoBgPlayer) {\n if(playerBgType === 'vimeo') {\n videoBgPlayer.pause();\n } else if(playerBgType === 'youtube') {\n videoBgPlayer.pauseVideo();\n }\n }\n });\n\n elements.modalButtonClose.click(() => {\n elements.modal.removeClass('js-state-open');\n $('body,html').removeClass('js-state-no-scroll');\n if(videoBgPlayer) {\n if(playerBgType === 'vimeo') {\n videoBgPlayer.pause();\n } else if(playerBgType === 'youtube') {\n videoBgPlayer.pauseVideo();\n }\n }\n if(videoModalPlayer) {\n if(playerModalType === 'vimeo') {\n videoModalPlayer.pause();\n } else if(playerModalType === 'youtube') {\n videoModalPlayer.pauseVideo();\n }\n }\n });\n};\n\nexport { VideoPlayer, VideoModal };\n","\nconst showImage = (el) => {\n var windowHeight = $(window).height();\n $(el).each(function(){\n var thisPos = $(this).offset().top;\n var topOfWindow = $(window).scrollTop();\n if (topOfWindow + windowHeight - 200 > thisPos ) {\n $(this).addClass(\"fadeInImage\");\n }\n });\n}\n\nconst fadeImage = () => {\n $(document).ready(function(){\n showImage('img');\n });\n $(window).scroll(function() {\n showImage('img');\n });\n};\n\nexport default fadeImage;\n","import Vue from 'vue';\nimport Vuelidate from 'vuelidate';\nimport {\n decimal,\n numeric,\n required,\n requiredIf,\n} from 'vuelidate/lib/validators';\nimport Iti from 'intl-tel-input';\nimport Velocity from 'velocity-animate';\nimport http from './http';\nimport {\n validateIf,\n} from './donation/validators';\nimport {\n XHR_STATUS_IDLE,\n XHR_STATUS_LOADING,\n XHR_STATUS_ERROR,\n} from './donation/constants';\nimport Logger from './error-handler';\n\nlet V = Velocity;\n\nVue.use(Vuelidate);\n\nconst TMRegisterLead = _el => {\n // Settings from wp\n const {\n amounts,\n sectionsData,\n currency,\n locale,\n allowDecimalAmounts,\n pageUrl,\n pageId,\n minAmount,\n } = settings;\n\n const type = \"\";\n\n const defaultAmounts = [...amounts];\n const defaultAmount = defaultAmounts[1];\n\n const sections = Object.keys(sectionsData);\n const sectionValidate = sections\n .map(s => `groups.${s}`)\n //.concat('groups.gdpr');\n\n const forms = {\n section: sectionValidate\n };\n\n const defaultGroups = Object.assign(\n {},\n ...sections.map(i => ({ [i]: false }))\n );\n\n const intlTelUtils =\n 'https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.15/js/utils.js';\n const intlTelLoaded = window.intlTelInputGlobals.loadUtils(intlTelUtils);\n\n var _app = new Vue({\n el: '#tm-register-lead',\n directives: {\n intltelinput: {\n inserted: (el, _binding, vnode) => {\n const vueApp = vnode.context;\n const input = el.querySelector('input[type=\"tel\"]');\n const countryKey = `${input.name}Country`;\n const sanitizedKey = `${input.name}Sanitized`;\n\n let defaultCountry = 'SE';\n if (\n vueApp.fields &&\n vueApp.fields[countryKey] &&\n vueApp.fields[countryKey].iso2\n ) {\n defaultCountry = vueApp.fields[countryKey].iso2;\n }\n\n const options = {\n separateDialCode: true,\n initialCountry: defaultCountry\n };\n if (input.name === 'swishPhone') {\n options.onlyCountries = ['SE'];\n options.allowDropdown = false;\n } else {\n options.preferredCountries = ['SE'];\n }\n\n const iti = new Iti(input, options);\n\n intlTelLoaded.then(() => {\n vueApp.fields[sanitizedKey] = iti.getNumber();\n vueApp.fields[\n countryKey\n ] = iti.getSelectedCountryData();\n\n input.addEventListener('countrychange', () => {\n vueApp.fields[\n countryKey\n ] = iti.getSelectedCountryData();\n });\n });\n },\n update: (el, _binding, vnode) => {\n const input = el.querySelector('input[type=\"tel\"]');\n const countryKey = `${input.name}Country`;\n const sanitizedKey = `${input.name}Sanitized`;\n const isValidKey = `${input.name}IsValid`;\n\n const iti = window.intlTelInputGlobals.getInstance(input);\n\n vnode.context.fields[sanitizedKey] = iti.getNumber();\n vnode.context.fields[isValidKey] = window.intlTelInputUtils.isValidNumber(iti.getNumber());\n vnode.context.fields[\n countryKey\n ] = iti.getSelectedCountryData();\n }\n }\n },\n data: {\n type,\n amounts: defaultAmounts,\n minAmount,\n useCustomAmount: false,\n hideFieldError: '',\n activeSection: sections[0],\n sections: sections,\n fields: {\n amount: defaultAmount,\n phone: '',\n phoneSanitized: false,\n phoneIsValid: false,\n customAmount: '',\n },\n groups: {\n amount: ['fields.amount'],\n phone: ['fields.phone'],\n },\n touchedGroups: {...defaultGroups},\n groupError: {...defaultGroups},\n error: false,\n\n // XHR\n xhrStatusOrderStatus: XHR_STATUS_IDLE,\n xhrStatusBankAccount: XHR_STATUS_IDLE,\n xhrStatusSubmit: XHR_STATUS_IDLE,\n xhrStatusMessageType: type,\n submitErrorMessage: '',\n },\n validations() {\n return {\n fields: {\n amount: {\n decimal,\n minValue: v => v >= this.minAmount,\n required,\n },\n customAmount: {\n requiredIf: requiredIf(() => this.useCustomAmount),\n validateCustomAmount: validateIf(\n numeric,\n this.useCustomAmount\n )\n },\n phone: {\n validatePhone: () =>this.fields.phoneIsValid,\n required,\n }\n },\n groups: this.groups,\n forms: forms,\n }\n },\n watch: {\n },\n filters: {\n formatAmount: val => {\n let amount = parseFloat(val);\n if (isNaN(amount)) {\n amount = 0;\n }\n\n const options = {\n currency: currency,\n style: 'currency'\n };\n\n if (!allowDecimalAmounts) {\n options.minimumFractionDigits = 0;\n options.maximumFractionDigits = 0;\n }\n return amount.toLocaleString(locale, options);\n }\n },\n methods: {\n setData: function(data) {\n this.fields = data.fields;\n },\n onClickCustomAmount: function() {\n if (!this.useCustomAmount) {\n this.$refs.inputCustomAmount.focus();\n this.fields.amount = this.fields.customAmount;\n this.useCustomAmount = true;\n this.hideFieldError = '';\n }\n },\n onChangeAmount: function(_e) {\n this.useCustomAmount = false;\n this.hideFieldError = '';\n },\n onInputCustomAmount: function() {\n this.fields.amount = this.fields.customAmount;\n this.hideFieldError = 'customAmount';\n },\n onChangeCustomAmount: function() {\n this.fields.amount = this.fields.customAmount;\n this.hideFieldError = '';\n },\n onEnterSection: function(el, done) {\n V(el.parentElement, 'scroll', {\n duration: 500,\n offset: -100,\n delay: 200\n });\n V(el, 'slideDown', { duration: 500, complete: done });\n },\n onInputField: function(e) {\n if (this.$v.fields[e.target.name].$error) {\n this.hideFieldError = e.target.name;\n }\n },\n onChangeField: function(e) {\n this.hideFieldError = '';\n this.$v.fields[e.target.name].$touch();\n },\n onClickChangeSection: function(section) {\n this.activeSection = section;\n },\n onClickNextSection: function(section = false) {\n this.$v.groups[section].$touch();\n\n if (!section) {\n this.activeSection = '';\n return;\n }\n\n this.touchedGroups[section] = true;\n\n if (this.$v.groups[section].$invalid) {\n this.groupError[section] = true;\n\n if (\n section === 'personal' &&\n !this.showAddressFields &&\n this.$v.fields.sparId.$invalid\n ) {\n this.showMissingAddressError = true;\n }\n return;\n }\n\n this.groupError[section] = false;\n\n // this.trackOnClickNextSection(section);\n\n const currentIndex = this.sections.indexOf(this.activeSection);\n const nextItems = this.sections.slice(currentIndex + 1);\n const nextUntouchedItem = nextItems.find(x => {\n return !this.touchedGroups[x] || this.$v.groups[x].$invalid;\n });\n this.activeSection = nextUntouchedItem || 'gdpr';\n // this.setStore();\n },\n onAfterEnterSection: function(el) {\n V(el.parentElement, 'scroll', { duration: 500, offset: -100 });\n },\n onLeaveSection: function(el, done) {\n V(el, 'slideUp', { duration: 200, complete: done });\n },\n onEnterExpandable: function(el, done) {\n V(el, 'slideDown', {\n duration: 300,\n easing: 'easeOutQuart',\n complete: done\n });\n },\n onLeaveExpandable: function(el, done) {\n V(el, 'slideUp', {\n duration: 200,\n easing: 'easeOutQuart',\n complete: done\n });\n },\n onSubmit(e) {\n e.preventDefault();\n\n const fields = this.fields;\n const data = {\n amount: (\n this.useCustomAmount\n ? parseInt(fields.customAmount)\n : fields.amount\n ),\n phone: fields.phoneSanitized,\n submittedFrom: pageId,\n }\n\n this.xhrStatusSubmit = XHR_STATUS_LOADING;\n\n this.$refs.submitButton.blur();\n\n const url = '/wp-json/tm-lead/v1/lead/';\n http.post(url, data)\n .then(response => {\n if (response.error) {\n this.submitErrorMessage = response.message;\n this.xhrStatusSubmit = XHR_STATUS_ERROR;\n console.log('exti');\n return;\n }\n\n window.location = pageUrl+\"?success=1#tm-register-lead\";\n return response;\n })\n .catch(e => {\n this.submitErrorMessage = e.message;\n this.xhrStatusSubmit = XHR_STATUS_ERROR;\n });\n }\n }\n });\n}\n\nexport default TMRegisterLead;\n","/* global $ */\n/* eslint no-unused-vars: 0 */\nimport 'whatwg-fetch';\n\nimport Donation from './donation/donation';\nimport Agroforestry from './agroforestry';\nimport Cookie from './cookie';\nimport Share from './share';\nimport Copy from './copy';\nimport Video from './video';\nimport Checkout from './checkout';\nimport {\n CertificateForm,\n DigitalCertificate,\n UnloadDigitalCertificate\n} from './certificate';\nimport { MenuToggle } from './menu';\nimport { SiteListToggle } from './site-list-toggle';\nimport {ScrollLock} from './scroll-lock';\nimport tracking from './tracking';\nimport { Slider } from './slider';\nimport Gallery from './gallery';\nimport Submenu from './submenu';\nimport Minicart from './minicart';\nimport { init as initErrorHandler } from './error-handler';\nimport {\n wcValidationSwedishOrganizationNumber,\n wcValidationSwedishSSN\n} from './wc-validation';\nimport { VideoPlayer, VideoModal } from './video-player';\nimport FadeImage from './fade-image';\nimport TMRegisterLead from './tm-register-lead';\nimport EmbedMessage from './embed-message';\n\ninitErrorHandler();\n\nwindow.tracking = tracking;\n$(document).ready(() => {\n\n const $agroforestry = $('.js-agroforestry');\n if ($agroforestry.length) {\n $agroforestry.map((i, v) => Agroforestry(v));\n }\n\n const $cookie = $('.js-cookie');\n if ($cookie.length) {\n $cookie.map((i, v) => Cookie(v));\n }\n\n const $video = $('.js-video');\n if ($video.length) {\n $video.map((i, v) => Video(v));\n }\n\n const $checkout = $('.js-checkout-loader');\n if ($checkout.length) {\n Checkout();\n }\n\n const $certificateForm = $('.js-certificate-form');\n if ($certificateForm.length) {\n $certificateForm.map((i, v) => CertificateForm(v));\n }\n\n const $digitialCertificate = $('.js-digital-certificate');\n if ($digitialCertificate.length) {\n $digitialCertificate.map((i, v) => DigitalCertificate(v));\n }\n\n const $menuToggle = $('.js-menu-toggle, .js-menu-cover');\n if ($menuToggle.length) {\n $menuToggle.map((i, v) => MenuToggle(v));\n }\n\n const $siteListToggle = $('.js-site-toggle');\n if ($siteListToggle.length) {\n $siteListToggle.map((i, v) => SiteListToggle(v));\n }\n\n const $scrollLock = $('.js-menu-toggle, .js-menu-cover');\n if ($scrollLock.length) {\n $scrollLock.map((i, v) => ScrollLock(v));\n }\n\n const $slider = $('.js-slider');\n if ($slider.length) {\n $slider.map((i, v) => Slider(v));\n }\n\n const $gallery = $('.js-gallery');\n if ($gallery.length) {\n $gallery.map((i, v) => Gallery(v));\n }\n\n const $submenu = $('.js-submenu');\n if ($submenu.length) {\n $submenu.map((i, v) => Submenu(v));\n }\n\n const $minicart = $('.js-minicart');\n if ($minicart.length) {\n $minicart.map((i, v) => Minicart(v));\n }\n\n $('.validate-swedish-organization-number input').blur(\n wcValidationSwedishOrganizationNumber\n );\n $('.validate-swedish-ssn input').blur(wcValidationSwedishSSN);\n\n const $videoPlayer = $('.js-video-player');\n if ($videoPlayer.length) {\n $videoPlayer.map((i, v) => VideoPlayer(v));\n }\n\n const $videoModal = $('.js-video-modal');\n if ($videoModal.length) {\n $videoModal.map((i, v) => VideoModal(v, false));\n }\n\n const $fadeImage = $('.page-template-template-reportage');\n if ($fadeImage.length) {\n $fadeImage.map((i, v) => FadeImage(v, false));\n }\n\n const $embedMessage = $('.js-embed-message');\n if ($embedMessage.length) {\n $embedMessage.map((i, v) => EmbedMessage(v));\n }\n\n /**\n * .js-share and .js-copy is binded on click like this\n * because they are injected on the page via ajax through\n * gravityforms on submission, hence we need to bind on\n * document. We probably should refactor this to always\n * show a hidden share-button on initial rendering and\n * display it on submit instead. Would be cleaner and\n * this approach is probably bad for frontend performance\n */\n\n $(document).on(\"click\", \".js-share\", (e) => {\n e.preventDefault();\n\n const $el = $(e.currentTarget);\n Share.toggleShare($el);\n });\n\n $(document).on(\"click\", \".js-copy\", (e) => {\n const $el = $(e.currentTarget);\n Copy.copyData($el);\n });\n});\n\n$(window).on('beforeunload', () => {\n const $digitialCertificate = $('.js-digital-certificate');\n if ($digitialCertificate.length) {\n $digitialCertificate.map((i, v) => UnloadDigitalCertificate(v));\n }\n});\n\nconst $donation = $('#vue');\nif ($donation.length) {\n Donation('#vue');\n}\n\nconst $tmRegisterLead = $('#tm-register-lead');\nif ($tmRegisterLead.length) {\n console.log('hi');\n TMRegisterLead('#tm-register-lead');\n}\n","/* global $ */\n\nconst Agroforestry = (el) => {\n const $el = $(el);\n\n let $open = null;\n\n $el.find('.js-agroforestry-click').click((e) => {\n e.preventDefault();\n const $toggle = $($(e.target).data('toggle'));\n if($toggle.length) {\n $toggle.fadeIn(() => {\n $open = $toggle;\n $toggle.find('.js-agroforestry-close').click(() => {\n $toggle.fadeOut(() => {\n $toggle.find('.js-agroforestry-close').unbind('click');\n $open = null;\n });\n });\n });\n }\n });\n\n $(document).click((ev) => {\n if($open !== null) {\n const $parent = $open.children().first();\n if($parent.has(ev.target).length === 0 && !$parent.is(ev.target)) {\n $open.fadeOut(() => {\n $open.find('.js-agroforestry-close').unbind('click');\n $open = null;\n });\n }\n }\n });\n};\n\nexport default Agroforestry;\n","/* global $ */\n\nimport Cookies from 'js-cookie';\n\nconst Cookie = (el) => {\n const $el = $(el);\n\n $el.removeClass('js-state-cookie-initial').hide();\n\n const isClosed = Cookies.get('cookie-popup-closed_1');\n if (isClosed === undefined) {\n $el.slideDown();\n }\n\n $el.find('.js-cookie-close').click(function (e) {\n e.preventDefault();\n $(el).slideUp('fast');\n Cookies.set('cookie-popup-closed_1', 'true', {expires: 365});\n });\n};\n\n\nexport default Cookie;\n","/* global $ */\n\nconst Video = (el) => {\n const $el = $(el);\n\n $el.click((e) => {\n const iframe = $el.find('iframe')[0];\n if (!iframe) {\n return;\n }\n\n e.preventDefault();\n $el.addClass('js-state-video-active');\n iframe.src += '&autoplay=1';\n\n });\n};\n\nexport default Video;\n","const MenuToggle = (el) => {\n const $el = $(el)\n $el.click(() => {\n $('body').toggleClass('js-state-menu-open');\n })\n \n}\n\nexport { MenuToggle }","const SiteListToggle = (el) => {\n const $el = $(el)\n $el.click(() => {\n $('.site-list').toggleClass('site-list__toggleOpen');\n $('.js-toggle').toggle('slow');\n })\n\n}\n\nexport { SiteListToggle }\n","\nconst ScrollLock = (el) => {\n const $el = $(el)\n $el.click(() => {\n $('body').toggleClass('js-scroll-lock');\n })\n\n}\n\nexport { ScrollLock }\n","const Submenu = (el) => {\n const $el = $(el);\n $el.change(() => {\n const val = $el.val();\n const url = window.location.href;\n if(val !== '' && val !== url) {\n window.location = val;\n }\n }); \n}\n\nexport default Submenu;","/* global $ */\n\nconst Minicart = (el) => {\n let $el = $(el);\n $el.click(function (e) {\n e.preventDefault();\n\n $('body').toggleClass('js-state-open-minicart');\n });\n};\n\nexport default Minicart;\n","import $ from 'jquery';\n\nconst EmbedMessage = (el) => {\n const $el = $(el);\n const $button = $el.find('.js-embed-button');\n\n $button.click((e) => {\n const content = $el.data('content');\n $el.html(content);\n $el.addClass('js-state-video-active');\n });\n}\n\nexport default EmbedMessage;\n","import http from './http'\n\nfunction getSparPerson(ssn) {\n const url = '/wp-json/spar/v1/obfuscate/ssn/' + ssn\n return new Promise((resolve, reject) => {\n http.post(url).then(x => {\n if(!x.success) {\n reject(x);\n } else {\n let address = x.obfuscate.currentAddress.Utdelningsadress2;\n let address2 = '';\n if(x.obfuscate.currentAddress.Utdelningsadress1) {\n address2 = address;\n address = x.obfuscate.currentAddress.Utdelningsadress1;\n }\n\n resolve({\n sparId: x.spar_id,\n obfuscate: {\n firstName: x.obfuscate.personDetails.Fornamn,\n lastName: x.obfuscate.personDetails.Efternamn,\n address: address,\n address2: address2,\n postalCode: x.obfuscate.currentAddress.PostNr,\n city: x.obfuscate.currentAddress.Postort,\n }\n });\n }\n }).catch(x => reject(x))\n })\n}\n\nexport default getSparPerson\n"],"names":["isValidSSN","value","replace","length","slice","month","substring","day","luhn","validate","isValidSwedishOrganizationNumber","match","optional","isClearingNo","isNaN","maxLength","isAccountNo","isDate","test","isMinToday","today","Date","date","getFullYear","getMonth","getDate","validateIf","validation","condition","status","response","Promise","resolve","reject","json","url","data","options","defaultArgs","method","headers","body","JSON","stringify","JSSettings","nonce","fetch","then","query","Object","keys","map","k","encodeURIComponent","join","awaitPollStatus","func","param","timeout","interval","endTime","Number","_poll","x","setTimeout","catch","e","eventListener","qr","console","log","token","currentDevice","parseBankAccountStatusResponse","filter","clearingNo","accountNo","name","getBankAccountStatus","publicId","getAccountStatusUrl","http","onReceivedBankAccountStatus","onReceivedQR","onReceivedBankIdAutoStartToken","getSigningFingerprintStatus","onReceivedSigningFingerprintStatus","indexOf","getBankAccounts","bank","ssn","otherDevice","onReceivedCurrentDevice","onReceivedBankAccountInititate","resumeBankAccount","getSigningFingerprint","_GIFT_TYPE_TRACKING_NAMES","GIFT_TYPE_TRACKING_NAMES","SECTION_TRACKING_NAMES","amount","treeCount","cart","payment","certificate","personal","company","automaticPayment","XHR_STATUS_IDLE","XHR_STATUS_LOADING","XHR_STATUS_SUCCESS","XHR_STATUS_ERROR","XHR_STATUS_EMPTY","trackEvent","event","category","action","label","extra","window","dataLayer","push","trackCart","actionField","products","ecommerce","Logger","message","Sentry.setContext","Sentry.captureMessage","Sentry.Severity","Error","logger","V","Velocity","Vue","use","Vuelidate","VueLocalStorage","$el","open","style","text","addClass","copy","removeClass","pollPayex","orderId","success","pollSwish","showFieldError","error","$errorMsg","next","slideDown","is","slideUp","Gallery","el","$","$modal","find","click","preventDefault","i","currentTarget","$slider","fadeIn","slick","reloadSlider","goToSlide","fadeOut","wcValidationSwedishSSN","wrapper","this","closest","val","wcValidationSwedishOrganizationNumber","videoBgPlayer","playerBgType","videoModalPlayer","playerModalType","youtubeApiPromise","vimeoApiPromise","parseUrl","a","document","createElement","href","injectJsApi","scriptUrl","tag","src","firstScriptTag","getElementsByTagName","parentNode","insertBefore","addEventListener","getDomElements","$player","$wrapper","parent","$controlButton","$modalButtonOpen","$modalButtonClose","player","modal","controlButton","modalButtonOpen","modalButtonClose","playText","pauseText","youtubeReadyFunction","onYouTubeIframeAPIReady","YouTubePlayer","id","asBg","urlParts","videoId","$videoContainer","empty","innerContainer","videoContainerInnerId","elements","append","YT","Player","playerVars","controls","loop","playlist","modestbranding","showInfo","mute","rel","events","onReady","playVideo","onStateChange","state","showPauseButton","showPlayButton","getPlayerState","pauseVideo","width","modalPlayer","VimeoPlayer","autoplay","background","title","byline","muted","quality","Vimeo","on","getPaused","paused","play","pause","initVideo","warn","host","VideoPlayer","iframeImage","isPortrait","height","toggleClass","showImage","windowHeight","each","thisPos","offset","top","scrollTop","amounts","sectionsData","currency","locale","allowDecimalAmounts","pageUrl","pageId","minAmount","defaultAmounts","defaultAmount","sections","forms","defaultGroups","intlTelLoaded","Sentry.init","SENTRY_SDK_CONFIG","integrations","Integrations.BrowserTracing","tracking","ready","$agroforestry","v","$open","$toggle","target","unbind","ev","$parent","children","first","has","$cookie","hide","undefined","Cookies","get","set","expires","type","completedUrl","paymentUrl","$video","iframe","checkoutLoader","paymentMethod","location","$certificateForm","$form","change","show","slideToggle","$msgField","$fromField","$quantityField","html","quantity","fromName","fromText","$previewToggle","$btn","hasClass","maxRows","split","attr","CertificateForm","$digitialCertificate","animate","scroll","$menuToggle","$siteListToggle","toggle","$scrollLock","MSInputMethodContext","documentMode","$prev","$next","centerMode","centerPadding","nextArrow","prevArrow","Slider","$gallery","$submenu","$minicart","blur","$videoPlayer","$videoModal","$fadeImage","$embedMessage","content","Share","Copy","settings","postId","customerId","campaignCode","legalAgreement","certificatePrintCost","certificateTextMaxLength","certificateTextMaxRows","certificateFromMaxLength","certificateShowFromName","externalAmount","defaultPayment","minQuantity","certificateImages","isClimateCompensation","trackingName","cartInfo","isLoggedIn","leadGuid","section","s","assign","parseFloat","useCustomAmount","customAmount","defaultAmountIndex","Math","floor","includes","defaultQuantity","parseInt","defaultTotalCost","certificateImagesAreSelectable","defaultCertificateImage","isCompanyOrder","isCertificateOrder","isTreeOrder","isMonthlyOrder","intlTelInputGlobals","loadUtils","app","directives","intltelinput","inserted","_binding","vnode","vueApp","context","input","querySelector","countryKey","sanitizedKey","defaultCountry","fields","iso2","separateDialCode","initialCountry","onlyCountries","allowDropdown","preferredCountries","iti","Iti","getNumber","getSelectedCountryData","update","isValidKey","getInstance","number","intlTelInputUtils","isValidNumber","activeSection","currentSubmit","selectedCertificateImage","selectedCertificateImageStyle","backgroundImage","obfuscatedAddress","firstName","lastName","address","postalCode","city","sparId","address2","companyName","companyRegistrationNumber","email","phone","phoneSanitized","phoneIsValid","phoneCountry","showShippingFields","shippingFirstName","shippingLastName","shippingAddress","shippingAddress2","shippingPostalCode","shippingCity","swishPhone","swishPhoneSanitized","swishPhoneIsValid","swishPhoneCountry","certificateOther","certificateName","certificateFromName","certificateMessage","certificateImageId","ID","recipientEmail","recipientSelect","recipientDate","recipientSelectedDate","memorialOrderData","recipientName","recipientAddress","recipientAddress2","recipientPostalCode","recipientCity","bankAccountNumberSelected","billectaIsPolling","billectaBankAccountPublicId","billectaQRCode","billectaBankIdAutoStartToken","billectaCurrentDevice","bankIdUrl","digitalSignature","showPreviewModal","previewType","showAddressFields","showAccountFields","showObfuscatedAddress","showSparLoader","showSparError","showMissingAddressError","showCertificateName","isSwishPhone","isOtherCertificate","isPrintCertificate","allowSwishPhoneOverride","xhrStatusOrderStatus","xhrStatusBankAccount","xhrStatusSubmit","xhrStatusSubmitDonorToBe","xhrStatusMessageType","submitErrorMessage","bankAccountNumbers","showBankIDLoadingSpinner","openBankIDOnCurrentDevice","totalCost","touchedGroups","groupError","hideFieldError","groups","validations","rows","reqAddress","requiredIf","_this","reqShippingAddress","decimal","minValue","required","validateCustomAmount","numeric","validateSSN","validateCompanyRegistrationNumber","validateSwishPhone","validateClearingNo","validateRequiredFromName","validateRequiredEmail","validateRequiredDate","validateRequiredMinToday","watch","handler","setStore","deep","updateTotalCost","image","findCertificateImage","memorialOrderDateSelected","filters","convertLineBreaks","RegExp","formatAmount","minimumFractionDigits","maximumFractionDigits","toLocaleString","created","store","parse","$store","expire","now","validateOnCreate","$v","$touch","remove","getOrderStatus","_this2","setData","onTreeCountUpdate","methods","onChangeFocusOut","getMemorialOrderData","onChangeAmount","_e","onClickCustomAmount","$refs","inputCustomAmount","focus","onInputCustomAmount","onChangeCustomAmount","onInputField","$error","onChangeField","onSwishPhoneChange","copyPhoneToSwish","formatSSN","prefix","currentYear","toString","ssnYear","toggleAddress","$invalid","toggleAccount","togglePreviewModal","togglePreviewType","onEnterSection","done","parentElement","duration","delay","complete","onAfterEnterSection","onLeaveSection","onEnterExpandable","easing","onLeaveExpandable","onClickChangeSection","onClickNextSection","trackOnClickNextSection","currentIndex","nextUntouchedItem","_this3","onClickAddress","obfuscate","currentAddress","Utdelningsadress2","Utdelningsadress1","spar_id","personDetails","Fornamn","Efternamn","PostNr","Postort","_this4","diff","onClickChangeDonation","parseParamsToQuery","params","arr","p","parseQueryToParams","q","imageId","getCertificateImageUrl","clickSubmit","step","onSubmit","prepareData","loaderScrollTo","submitButton","maybeGetFingerprint","_response","_this5","submitDonation","redirect","_this6","_data","billecta","_this7","total","getBankAccountsThisDevice","getBankAccountsOtherDevice","ongoingRequestPublicId","_this8","updateFields","key","_this9","group","_this10","round","account","_key","recipientAddress1","_pollingTimeout","billectaEventListener","Donation","_this11","validatePhone","_this12","submittedFrom","_this13"],"mappings":"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"}