{"version":3,"file":"ProductInfoTable.js","sources":["../../../../templates/vue-elements/input/TextareaInput.vue","../../../../abstracts_depr/elements/button/button.vue","../../../../templates/vue-elements/comparison-inputs/PostalBox.vue","../../../../node_modules/lodash/_isKey.js","../../../../node_modules/lodash/toString.js","../../../../node_modules/lodash/_castPath.js","../../../../node_modules/lodash/_toKey.js","../../../../node_modules/lodash/_baseGet.js","../../../../node_modules/lodash/_baseIsMatch.js","../../../../node_modules/lodash/_isStrictComparable.js","../../../../node_modules/lodash/_getMatchData.js","../../../../node_modules/lodash/_matchesStrictComparable.js","../../../../node_modules/lodash/_baseMatches.js","../../../../node_modules/lodash/get.js","../../../../node_modules/lodash/_baseHasIn.js","../../../../node_modules/lodash/_hasPath.js","../../../../node_modules/lodash/hasIn.js","../../../../node_modules/lodash/_baseMatchesProperty.js","../../../../node_modules/lodash/_baseProperty.js","../../../../node_modules/lodash/_basePropertyDeep.js","../../../../node_modules/lodash/property.js","../../../../node_modules/lodash/_baseIteratee.js","../../../../node_modules/lodash/_createBaseFor.js","../../../../node_modules/lodash/_baseFor.js","../../../../node_modules/lodash/_baseForOwn.js","../../../../node_modules/lodash/_createBaseEach.js","../../../../node_modules/lodash/_baseEach.js","../../../../node_modules/lodash/_isIterateeCall.js","../../../../abstracts/components/saveComparisonModal/shared/ModalTemplate.vue","../../../../abstracts/components/saveComparisonModal/assets/js/saveComparisonModal.js","../../../../abstracts/components/saveComparisonModal/modals/SaveCompleteModal.vue","../../../../abstracts/components/saveComparisonModal/modals/SaveComparisonModal.vue","../../../../abstracts/elements/input/email/default/emailDefault.vue","../../../../abstracts/elements/field/email/default/emailDefault.vue","../../../../abstracts/components/saveComparisonModal/modals/EmailComparisonModal.vue","../../../../abstracts/components/saveComparisonModal/assets/js/saveComparison.js","../../../../abstracts/components/saveComparisonModal/SaveComparison.vue","../../../../abstracts/elements/input/radio/_shared/radioMixin.js","../../../../abstracts/elements/input/radio/default/radioDefault.vue","../../../../abstracts/elements/field/dropdown/alt/dropdownAlt.vue","../../../../abstracts/components/saveComparisonModal/modals/PickRecieverModal.vue","../../../../templates/shared/frank/store/frankStore.js","../../../../templates/shared/frank/FrankChoice.vue","../../../../templates/shared/frank/FrankNegative.vue","../../../../templates/shared/frank/FrankPositive.vue","../../../../templates/shared/frank/FrankConfirmation.vue","../../../../templates/shared/frank/FrankModal.vue","../../../../node_modules/lodash/_baseFilter.js","../../../../node_modules/lodash/filter.js","../../../../templates/vue-elements/product-info/PricingTable.vue","../../../../templates/vue-elements/product-info/PricingTableHeader.vue","../../../../templates/vue-elements/product-info/PricingTableRow.vue","../../../../templates/vue-elements/product-info/ProductInfoProperty.vue","../../../../templates/vue-elements/product-info/ProductInfoTable.vue"],"sourcesContent":["\n\n\n","\n\n\n\n\n","\n \n \n \n
\n \n \n
\n \n \n \n \n
\n
\n \n\n\n\n\n\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","\n\n\n\n","import mijnkeuzeStore from '../../../../../templates/sections/mijnKeuze/store/store';\n\nexport default {\n props: {\n comparison: Object,\n receiver: String,\n marketType: {\n type: String,\n required: true,\n validator: (value) => ['internet', 'energy'].includes(value),\n },\n },\n mounted() {\n this.setValidityState();\n this.setValidityStateInput();\n },\n methods: {\n logEvent(event, eventData) {\n if (typeof window.bananas !== 'undefined') {\n window.bananas('event', `saveComparison.${event}`, eventData);\n }\n },\n setValidityState() {\n this.$el.querySelectorAll('input')\n .forEach((element) => {\n element.setCustomValidity((this.error[element.name] ? 'error' : ''));\n });\n },\n setValidityStateInput() {\n this.$el.querySelectorAll('input')\n .forEach((element) => {\n element.addEventListener('input', () => {\n element.setCustomValidity('');\n });\n element.addEventListener('change', () => {\n element.setCustomValidity((this.error[element.name] ? 'error' : ''));\n });\n });\n },\n saveComparison() {\n document.activeElement.blur();\n\n let action = '';\n if (this.marketType === 'energy') {\n if (!this.signedIn) {\n action = 'emailEnergyComparison';\n } else if (this.receiver === 'other') {\n action = 'emailEnergyComparison';\n } else {\n action = this.receiver === 'friend' ? 'saveEnergyComparisonForFriend' : 'saveEnergyComparison';\n }\n } else if (this.marketType === 'internet') {\n if (!this.signedIn) {\n action = 'emailInternetComparison';\n } else if (this.receiver === 'other') {\n action = 'emailInternetComparison';\n } else {\n action = this.receiver === 'friend' ? 'saveInternetComparisonForFriend' : 'saveInternetComparison';\n }\n }\n this.logEvent('saveComparison', {\n action,\n signedIn: this.signedIn,\n });\n mijnkeuzeStore.dispatch(action, this.comparison)\n .then((response) => {\n if (window.bananas) {\n window.bananas('event', 'mijnkeuze.save-comparison', {\n type: this.marketType,\n id: response.saved_comparison.id,\n timestamp: Date.now(),\n });\n }\n this.logEvent('success', {\n comparison: response.saved_comparison,\n signedIn: this.signedIn,\n });\n this.$emit('complete', response.saved_comparison);\n })\n .catch(() => { // Force empty error state\n Object.keys(this.error)\n .forEach((key) => {\n document.querySelectorAll(`input#${key}`)\n .forEach((inputElement) => {\n inputElement.removeAttribute('placeholder');\n });\n });\n this.logEvent('error', {\n comparison: this.comparison,\n signedIn: this.signedIn,\n });\n this.$emit('previousStep');\n });\n },\n },\n watch: {\n error: {\n handler(errors) {\n this.$el.querySelectorAll('input')\n .forEach((element) => {\n element.setCustomValidity((errors[element.name] ? 'error' : ''));\n });\n },\n deep: true,\n },\n comparison: {\n handler(comparison) {\n mijnkeuzeStore.dispatch('validateComparison', comparison);\n },\n deep: true,\n },\n\n },\n computed: {\n signedIn() {\n return mijnkeuzeStore.getters.tokenValid && !!mijnkeuzeStore.getters.account.email_address;\n },\n error: {\n get() {\n return mijnkeuzeStore.getters.error;\n },\n },\n friends: {\n get() {\n return mijnkeuzeStore.getters.friends.friends;\n },\n },\n computedComparison: {\n set(value) {\n this.$emit('update:comparison', value);\n },\n get() {\n return this.comparison;\n },\n },\n computedReceiver: {\n set(value) {\n this.$emit('update:receiver', value);\n },\n get() {\n return this.receiver;\n },\n },\n friendOptions: {\n get() {\n const options = [];\n Object.values(this.friends)\n .forEach((friend) => {\n options.push({\n value: friend.id,\n label: friend.name,\n });\n });\n return options;\n },\n },\n friendName() {\n let friendName = 'je vriend';\n if (this.comparison.friend_id) {\n Object.values(this.friendOptions)\n .forEach((friend) => {\n if (friend.value === this.comparison.friend_id) {\n friendName = friend.label;\n }\n });\n }\n return friendName;\n },\n confirmFirstName() {\n return this.comparison.first_name ?? 'je vriend';\n },\n confirmEmailAddress() {\n return this.comparison.email_address ?? null;\n },\n showFriendFeature() {\n return this.signedIn && mijnkeuzeStore.getters.account.features.friends && this.friends.length > 0;\n },\n buttonLabel() {\n return this.receiver === 'self' ? 'Bewaar vergelijking' : 'Deel vergelijking';\n },\n },\n};\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","import mijnkeuzeStore from '../../../../../templates/sections/mijnKeuze/store/store';\nimport { logAnalyticsEvent } from '../../../../../assets/js/helpers/bananas';\n\nexport default {\n props: {\n location: Object,\n filters: Object,\n products: Array,\n },\n data() {\n return {\n savedComparison: null,\n receiver: 'self',\n step: 1,\n comparison: {\n email_address: mijnkeuzeStore.getters.account && mijnkeuzeStore.getters.account.email_address ? mijnkeuzeStore.getters.account.email_address : '',\n remarks: null,\n message: null,\n compare_url: window.location.href,\n product_count: this.products.length,\n location_object: this.location,\n filters: this.filters,\n products: null,\n subscribe_mail_campaigns: false,\n friend_id: null,\n },\n };\n },\n mounted() {\n this.$refs.saveComparisonModal?.$refs.input.addEventListener('change', (change) => {\n this.logEvent(change.target.checked ? 'openModal' : 'closeModal');\n });\n },\n computed: {\n signedIn() {\n return !!mijnkeuzeStore.getters.account.email_address && mijnkeuzeStore.getters.tokenValid;\n },\n canSaveComparison() {\n return this.products.length > 0 && !!this.comparison.location_object;\n },\n modalType() {\n return this.step === 1 ? 'PickReceiverModal' : 'SaveComparisonModal';\n },\n confirmEmailAddress() {\n return this.comparison.email_address ?? 'je e-mailadres';\n },\n\n },\n methods: {\n comparisonSaved(comparison) {\n this.savedComparison = comparison;\n },\n nextStep() {\n if (this.receiver === 'self') {\n this.comparison.friend_id = null;\n } else if (this.receiver === 'friend') {\n this.comparison.email_address = null;\n } else if (this.receiver === 'other' || this.receiver === 'mail-self') {\n this.comparison.friend_id = null;\n }\n this.logEvent('nextStep', {\n receiver: this.receiver,\n signedIn: this.signedIn,\n });\n this.step = 2;\n },\n logEvent(event, eventData) {\n logAnalyticsEvent(`saveComparison.${event}`, eventData);\n },\n previousStep() {\n this.step = 1;\n },\n updateComparison() {\n this.previousStep();\n this.savedComparison = null;\n this.comparison.location_object = this.location;\n this.comparison.products = this.products;\n this.comparison.product_count = this.products.length;\n this.comparison.filters = this.filters;\n this.comparison.compare_url = window.location.href;\n },\n },\n watch: {\n savedComparison: {\n handler() {\n this.$emit('savedComparison', this.savedComparison);\n },\n },\n location: {\n handler() {\n this.updateComparison();\n },\n deep: true,\n },\n products: {\n handler() {\n this.updateComparison();\n },\n deep: true,\n },\n },\n\n};\n","\n\n","export default {\n props: {\n /**\n * The value corresponding to the radio checked state\n * Use with :value.sync=\"mainProperty\"\n */\n value: [String, Boolean],\n disabled: Boolean,\n required: Boolean,\n /**\n * If more than 1 radio button sets the same value, specify native values (like native 'value' property of radio input\n */\n nativeValue: {\n type: [String, Boolean],\n required: true,\n default: true,\n },\n name: {\n type: String,\n required: true,\n },\n /* ID is required to link