{"version":3,"file":"partnerwidget-eeb275c4.js","sources":["../../src/modules/PartnerWidget/views/Error.vue","../../src/modules/PartnerWidget/helpers/strings.js","../../src/modules/PartnerWidget/helpers/dates.js","../../src/modules/PartnerWidget/constants/index.js","../../src/hooks/usePartnerWidgetBundleLoader.js","../../src/hooks/usePartnerWidget.js","../../src/modules/PartnerWidget/components/Badge.vue","../../src/modules/PartnerWidget/components/Logo.vue","../../src/modules/PartnerWidget/views/Entry.vue","../../src/modules/PartnerWidget/helpers/formatters.js","../../src/modules/PartnerWidget/components/package/PackagePreview.vue","../../src/modules/PartnerWidget/helpers/tracking.js","../../src/modules/PartnerWidget/views/Bundle.vue","../../src/modules/PartnerWidget/components/product/ProductDetail.vue","../../src/modules/PartnerWidget/components/TabsContainer.vue","../../src/modules/PartnerWidget/components/PartnerWidgetExpander.vue","../../src/modules/PartnerWidget/components/PartnerWidgetAccordion.vue","../../src/modules/PartnerWidget/components/package/PackageDetail.vue","../../src/validations/personEdit.js","../../src/modules/PartnerWidget/components/person/PersonEdit.vue","../../src/modules/PartnerWidget/views/Detail.vue","../../src/modules/PartnerWidget/PartnerWidget.vue","../../src/modules/PartnerWidget/PartnerWidget.js"],"sourcesContent":["\n \n \n {{ translations.title[language] }}\n \n \n {{ translations[message.errorCode][language] }}\n \n \n \n\n\n\n\n\n","/**\n * Will replace {something} strings by the according value passed in 'params'\n * Example: str = 'My name is {name} and I work at {place}. My favorite game is {game}.'\n * params = {name: 'Jorinho', place: 'Infocentric', wtf: 'nothing'}\n * stringFormat(str, params) -> \"My name is Jorinho and I work at Infocentric. My favorite game is {game}.\"\n * note: the 'wtf' parameter doesn't hurt.\n * note 2: a not provided {placeholder} will simply be ignored and returned as is...\n * @param {String} str\n * @param {Object} params\n * @returns {String}\n */\nexport const resolve = (str = '', params = {}) => {\n const search = /\\{([\\s\\S]+?)\\}/g\n\n if (!str) {\n return ''\n }\n\n return str.replace(search, function (term) {\n let key = term.substring(1).slice(0, -1)\n return params[key] !== undefined ? params[key] : term\n })\n}\n","import { addMonths, isAfter, isValid, isPast, isToday } from 'date-fns'\nimport { DateTimeHelper } from '@/helpers'\nimport useBasket from '@/hooks/useBasket'\n\n// Hooks\nconst { getDefaultContractStartDate } = useBasket()\n\n// FLEX-1279 if date in the past or today or too far in future -> invalid, push contract start to next month\nexport const isInvalidContractStartDate = function (value) {\n if (!value) {\n return true\n }\n const ISODate = DateTimeHelper.parseDate(value)\n const isValidISODate = isValid(ISODate)\n const now = new Date()\n\n return !isValidISODate || isToday(ISODate) || isPast(ISODate) || isAfter(ISODate, addMonths(now, 20))\n}\n\n/**\n * If the start date in the bundle is not valid, the next valid contract start date is the start of the next month (FLEX-1279)\n * @returns {Promise} Promise resolving to ISO date\n */\nexport const getNewContractStartDate = async () => {\n return await getDefaultContractStartDate()\n}\n","// dynamic components\nexport const SCREEN = {\n BUNDLE: 'Bundle',\n DETAIL: 'Detail',\n ENTRY: 'Entry',\n ERROR: 'Error',\n}\n\nexport const BOOLEAN_CONFIG_KEYS = [\n 'animatedEntryLabelsOnClick',\n 'animatedEntryLabelsOnlyOnce',\n 'badge',\n 'dynamicSize',\n 'logo',\n 'openInSameWindow',\n 'skipEntryPage',\n 'skipPackagesOverview',\n 'showPackagesOverviewInfoIcon'\n]\n\nexport const CATEGORY_ADDITIONAL = 'ADDITIONAL'\nexport const CATEGORY_FURTHER_ADDITIONAL = 'FURTHER_ADDITIONAL'\n","import { ref, reactive } from 'vue'\nimport { v4 as uuidv4 } from 'uuid'\nimport { cloneDeep, isEmpty, pick } from 'lodash'\nimport { events$ } from '@/services'\n\nimport { getNewContractStartDate, isInvalidContractStartDate } from '@/modules/PartnerWidget/helpers/dates'\nimport { BOOLEAN_CONFIG_KEYS, SCREEN } from '@/modules/PartnerWidget/constants'\nimport { EVENT_LANGUAGE, EVENT_PARTNER_WIDGET, EVENT_TRACKING } from '@/config/events'\nimport { CHANNEL, GENDER, NOTIFICATION, PARTNER_WIDGET_RESTART_TIMEOUT, ROUTE_NAME } from '@/config/constants'\nimport { SOFT_CLOSED_PRODUCTS } from '@/utils/HaX'\nimport config from '@/config'\n\nimport useBackend from '@/hooks/useBackend'\nimport useBasket from '@/hooks/useBasket'\nimport useDistribution from '@/hooks/useDistribution'\nimport useMasterdata from '@/hooks/useMasterdata'\nimport useNotifications from '@/hooks/useNotifications'\nimport usePartnerWidget from '@/hooks/usePartnerWidget'\nimport useProduct from '@/hooks/useProduct'\nimport useI18n from '@/hooks/useI18n'\n\nimport { ReactivityUtil } from '@/utils/Reactivity'\n\nconst { doGet, setup } = useBackend()\nconst { updateOvpBasket } = useBasket()\nconst { createDistributionPartners } = useDistribution()\nconst { fetchLocations } = useMasterdata()\nconst { addNotification } = useNotifications()\nconst { getCustomThemeCssUrl } = usePartnerWidget()\nconst { fetchProducts } = useProduct()\nconst { t } = useI18n()\n\nsetup('/partnerwidget', config.microserviceBaseUrl)\n\nevents$.once(EVENT_LANGUAGE.LOADED, () => {\n languageLoaded.value = true\n})\n\n// Data\nconst bundleId = ref('')\nconst displayMode = ref('')\nconst hasChosenPackage = ref(false)\nconst language = ref('')\nconst languageLoaded = ref(false)\nconst ready = ref(false)\nconst screen = ref(SCREEN.ENTRY)\nconst screensDefinition = ref({})\nconst theme = ref('')\nconst code = ref('')\nconst bundleConfig = reactive({})\nconst packages = reactive([])\n\nexport default function usePartnerWidgetBundleLoader() {\n function screensDefinitionInit() {\n screensDefinition.value = {\n Entry: {\n events: {\n enter: enter,\n },\n props: {},\n },\n Bundle: {\n events: {\n requireDetail: onDetailRequired,\n },\n props: {\n logo: false,\n packages: [],\n skipEntryPage: false,\n showPackagesOverviewInfoIcon: false,\n },\n },\n Detail: {\n events: {\n backToBundle: onBackToBundle,\n editScreenDefinitions: editScreenDefinitions,\n goToSanitas: goToSanitas,\n },\n props: {\n item: null,\n skipEntryPage: false,\n skipPackagesOverview: false,\n openInSameWindow: false,\n },\n },\n Error: {\n props: {\n messages: [],\n language: language.value,\n },\n },\n }\n }\n\n async function fetchBundle(__code, __language) {\n const response = await doGet(`/public/bundles/${__code}`, {}, false, { headers: { 'Accept-Language': __language } })\n return response.data\n }\n\n async function loadBundle(params) {\n try {\n const bundleResponse = await fetchBundle(bundleId.value, language.value)\n code.value = bundleResponse.code\n\n ReactivityUtil.reAssign(bundleConfig, overrideBundleWithUrlProps(bundleResponse))\n ReactivityUtil.resetData(packages)\n\n for (const bundleBasket of bundleResponse.baskets) {\n let location = params.location\n if (location) {\n const contractStartDate = bundleBasket.contractStartDate ?? (await getNewContractStartDate())\n location = await findLocation(location, contractStartDate)\n }\n\n // HaX Filter out all Classic, Family and Jump products\n for (const __package of bundleBasket.packages) {\n __package.products = __package.products.filter(p => {\n return !SOFT_CLOSED_PRODUCTS.includes(p.id)\n })\n }\n // Filter out all packages with no products in it\n bundleBasket.packages = bundleBasket.packages.filter(pack => {\n return pack.products.length\n })\n\n let updatedBasketBundle = await overrideBasketBundleWithUrlProps(\n cloneDeep(bundleBasket),\n Object.assign({}, params, { location })\n )\n delete updatedBasketBundle.packages\n updatedBasketBundle = await createBasket(bundleBasket.packages, updatedBasketBundle)\n for (const __package of bundleBasket.packages) {\n const productsStructure = await loadProducts({\n persons: updatedBasketBundle.persons,\n collective: updatedBasketBundle?.collective,\n masterTreaty: updatedBasketBundle.masterTreaty,\n })\n const packageData = {\n ...__package,\n basket: updatedBasketBundle,\n productsStructure,\n showExampleOfferText: true,\n isPersonDataEdited: false,\n }\n packages.push(packageData)\n }\n }\n\n // general\n loadThemeCSS()\n setScreenDefinitions()\n\n if (bundleConfig.skipEntryPage) {\n enter()\n }\n } catch (/** @type {ErrorResponse}*/ e) {\n console.error(e)\n if (e.messages) {\n screensDefinition.value.Error.props.messages = e.messages\n }\n screen.value = SCREEN.ERROR\n }\n ready.value = true\n }\n\n async function createBasket(__packages, basket) {\n basket.basketId = __packages[0]?.id || uuidv4()\n\n const allPackageProducts = __packages.reduce((acc, pack) => {\n acc.push(...pack.products)\n return acc\n }, [])\n\n const payloadBasket = getBasketPayload(basket)\n const __basket = await updateOvpBasket(payloadBasket, { simulate: true })\n return await updateProductsInBasket(__basket, allPackageProducts)\n }\n\n // find matching location passed via url params\n async function findLocation(params, contractStartDate) {\n const query = params?.zipCode\n const locations = await fetchLocations({ query, contractStartDate }).catch(e => {\n console.warn('location service not available', e)\n })\n\n const locationData = locations?.data\n\n if (!locationData || locationData.length === 0) {\n return null\n }\n\n if (locationData.length === 1) {\n return locationData[0]\n }\n\n const matchingLocation = locationData.find(location => {\n const locationZipAddon = parseInt(location.zipCodeAddon, 10)\n const locationLocationNumber = parseInt(location.locationNumber, 10)\n\n const paramZipAddon = parseInt(params.zipCodeAddon, 10)\n const paramLocationNumber = parseInt(params.locationNumber, 10)\n\n return locationZipAddon === paramZipAddon && locationLocationNumber === paramLocationNumber\n })\n\n // fall back to first location for zipCode, if zipAddon or locationNumber don't match\n return matchingLocation ?? locationData[0]\n }\n\n /**\n * Updates the products in the basket (options with accident)\n * If selectProducts is true, the products are selected as well\n */\n function updateProductsInBasket(__basket, products, selectProducts = false, simulate = true) {\n const packageProducts = products\n const updatedBasket = cloneDeep(__basket)\n let personProducts = updatedBasket.persons[0].products.products\n\n resetProductSelection(personProducts)\n applyCriteriaAndSelectProducts(personProducts, packageProducts, selectProducts)\n\n return updateOvpBasket(updatedBasket, { simulate })\n }\n\n function resetProductSelection(personProducts) {\n // reset selection for products\n Object.values(personProducts).forEach(product => {\n product.selected = false\n product.prices.map(price => {\n price.selected = false\n return price\n })\n return product\n })\n }\n\n function applyCriteriaAndSelectProducts(personProducts, packageProducts, selectProducts) {\n packageProducts.forEach(p => {\n const { id, toggle, value } = p\n\n // select product\n const basketProduct = personProducts[p.id]\n if (!basketProduct) {\n return\n }\n\n const priceOptions = basketProduct.prices\n\n if (selectProducts) {\n basketProduct.selected = true\n }\n\n const selectedPriceOption = setSelectedPriceOption(priceOptions, value)\n setToggleAndSelectPriceOption(priceOptions, selectedPriceOption, toggle)\n\n // select product, set value & toggle\n if (selectProducts) {\n // reset selections for priceOptions\n priceOptions.forEach(price => {\n price.selected = false\n })\n if (selectedPriceOption) {\n selectedPriceOption.selected = true\n } else {\n console.error('Can not select correct price', id, toggle, value)\n }\n }\n })\n }\n\n function setSelectedPriceOption(priceOptions, value) {\n return priceOptions.length > 1\n ? priceOptions.find(price => {\n // check if value defined, value can be undefined for e.g. AB04Produkt\n const isPriceMatching = value ? price.value === parseInt(value, 10) : true\n const isDurationMatching = price.duration ? price.duration === '1' : true\n return isPriceMatching && isDurationMatching\n })\n : priceOptions[0]\n }\n\n // set toggle value and select this price option. Other toggle values will be set by backend\n function setToggleAndSelectPriceOption(priceOptions, selectedPriceOption, toggle) {\n if (selectedPriceOption && toggle !== undefined) {\n selectedPriceOption.toggle = toggle\n priceOptions.forEach(option => {\n option.selected = false\n })\n selectedPriceOption.selected = true\n }\n }\n\n function getBasketPayload(bundleBasket) {\n return {\n basketId: bundleBasket.basketId,\n createDate: new Date().toISOString(),\n channel: CHANNEL.PARTNERWIDGET,\n collective: isEmpty(bundleBasket.collective) ? null : bundleBasket.collective,\n masterTreaty: bundleBasket.masterTreaty,\n language: language.value.toUpperCase(),\n partnerWidgetBundleCode: code.value,\n distributionPartners: createDistributionPartners(bundleBasket.distributionPartnerNumber),\n contractStartDate: bundleBasket.contractStartDate,\n address: bundleBasket.address,\n route: ROUTE_NAME.BASKET,\n persons: [\n {\n collectivePersonGroup: bundleBasket.collectivePersonGroup,\n personId: uuidv4(),\n personData: {\n dateOfBirth: bundleBasket.person.dateOfBirth,\n firstName: bundleBasket.person.firstName,\n lastName: null,\n gender: bundleBasket.person.gender,\n },\n kvgContractStartDate: bundleBasket.contractStartDate,\n vvgContractStartDate: bundleBasket.contractStartDate,\n preInsurer: {},\n },\n ],\n }\n }\n\n async function loadProducts(__basket) {\n // use basket from backend response, contractStartdate may be set by BE\n return await fetchProducts(__basket).then(products => {\n return products\n })\n }\n\n function overrideBundleWithUrlProps(__bundle) {\n const { config: __config } = __bundle\n if (theme.value) {\n __config.theme = theme.value\n }\n if (displayMode.value) {\n __config.displayMode = displayMode.value\n }\n\n // parse boolean __configuration values from url\n BOOLEAN_CONFIG_KEYS.forEach(key => {\n if (__config[key]) {\n __config[key] = __config[key] === 'true' || __config[key]\n }\n })\n\n return __config\n }\n\n async function overrideBasketBundleWithUrlProps(bundleBasket, __options) {\n // Set current date if bundle contract start date are not valid\n if (\n !bundleBasket.contractStartDate ||\n (bundleBasket.contractStartDate && isInvalidContractStartDate(bundleBasket.contractStartDate))\n ) {\n bundleBasket.contractStartDate = await getNewContractStartDate()\n }\n // Set location if valid\n if (!isEmpty(__options.location)) {\n bundleBasket.address = __options.location\n }\n // Set gender if given gender available\n if ([GENDER.MALE, GENDER.FEMALE, GENDER.UNBORN].includes(__options.gender)) {\n bundleBasket.person.gender = __options.gender\n }\n\n if (__options.firstName) {\n bundleBasket.person.firstName = __options.firstName\n }\n\n // Set dateOfBirth\n if (__options.dateOfBirth) {\n bundleBasket.person.dateOfBirth = __options.dateOfBirth\n }\n\n return bundleBasket\n }\n\n function setScreenDefinitions() {\n screensDefinition.value.Entry.props = Object.assign(\n {},\n screensDefinition.value.Entry.props,\n pick(bundleConfig, ['logo', 'badge']),\n { basketAvailable: !!packages[0]?.basket?.basketId }\n )\n screensDefinition.value.Bundle.props = Object.assign(\n {},\n screensDefinition.value.Bundle.props,\n pick(bundleConfig, ['logo', 'skipEntryPage', 'showPackagesOverviewInfoIcon']),\n { packages }\n )\n screensDefinition.value.Detail.props = Object.assign({}, screensDefinition.value.Detail.props, {\n skipEntryPage: bundleConfig.skipEntryPage,\n skipPackagesOverview: bundleConfig.skipPackagesOverview,\n openInSameWindow: bundleConfig.openInSameWindow,\n })\n }\n\n function editScreenDefinitions(newScreenDefinitionsProps) {\n Object.assign(screensDefinition.value.Detail.props.item, newScreenDefinitionsProps)\n }\n\n function addStylesheet(url) {\n const themeFile = document.createElement('link')\n themeFile.setAttribute('rel', 'stylesheet')\n themeFile.setAttribute('type', 'text/css')\n\n themeFile.setAttribute('href', url)\n window.document.head.appendChild(themeFile)\n }\n\n function loadThemeCSS() {\n switch (bundleConfig.theme) {\n case 'light': // light theme is default, so doesn't load any css\n break\n case 'darkgreen':\n addStylesheet(`${import.meta.env.VITE_SANITAS_PUBLIC_PATH}partnerWidget/theme-darkgreen.css`)\n break\n case 'custom':\n // never show logo if custom theme is used\n bundleConfig.logo = false\n\n getCustomThemeCssUrl(code.value, bundleConfig.lastModifiedDate)\n .then(url => {\n addStylesheet(url)\n })\n .catch(e => {\n console.error(e)\n })\n break\n default:\n console.error(`Unknown theme: ${bundleConfig.theme}, falling back to default light theme`)\n }\n }\n\n function enter() {\n if (bundleConfig.skipPackagesOverview) {\n onDetailRequired(packages[0])\n } else {\n goToBundle()\n }\n }\n\n function onDetailRequired(pack) {\n screensDefinition.value.Detail.props.item = pack\n screen.value = SCREEN.DETAIL\n }\n\n function goToBundle() {\n screen.value = SCREEN.BUNDLE\n }\n\n function onBackToBundle() {\n screen.value = SCREEN.BUNDLE\n }\n\n async function goToSanitas(options) {\n if (hasChosenPackage.value) {\n return\n }\n\n events$.emit(EVENT_PARTNER_WIDGET.GOTO_SANITAS)\n\n try {\n const { item, target } = options\n hasChosenPackage.value = true\n // don't update store! Kvg without doctor can set the valid flag on the product to false,\n // causing the chosen package to be displayed as unavailable!\n let realBasket = cloneDeep(item.basket)\n delete realBasket.createDate\n delete realBasket.basketId\n realBasket = await updateProductsInBasket(realBasket, item.products, true, false)\n\n events$.emit(EVENT_TRACKING.ENTERED, { source: CHANNEL.PARTNERWIDGET })\n\n // navigate to dvp\n const sanitasHref = `${import.meta.env.VITE_SANITAS_PATH}${t('screen.partnerWidget.dvpUrl')}${\n realBasket.reentryToken\n }`\n window.open(sanitasHref, target)\n\n addNotification(\n t('screen.partnerWidget.popupMessage', { sanitasHref, target }),\n NOTIFICATION.WARNING,\n PARTNER_WIDGET_RESTART_TIMEOUT\n )\n\n // wait before reloading the widget in case a popup has prevented the new tab from opening\n // due to the navigation, the popup blocker message disappears instantly otherwise.\n window.setTimeout(() => {\n restartWidgetWithData(item.basket)\n }, PARTNER_WIDGET_RESTART_TIMEOUT)\n } catch (e) {\n hasChosenPackage.value = false\n console.error(e)\n }\n }\n\n function restartWidgetWithData(basket) {\n const parsedUrl = new URL(window.location.href)\n let searchParams = parsedUrl.searchParams\n\n const { address, persons } = basket\n const firstPersonData = persons[0].personData\n\n // update search params with entered data\n searchParams.set('gender', firstPersonData.gender)\n searchParams.set('birthDate', firstPersonData.dateOfBirth)\n\n const { locationNumber, zipCode, zipCodeAddon } = address\n searchParams.set('locationNumber', locationNumber)\n searchParams.set('zipCode', zipCode)\n searchParams.set('zipCodeAddon', zipCodeAddon)\n\n // restart widget\n location.search = searchParams.toString()\n }\n\n // Setter methods\n function setBundleId(value) {\n bundleId.value = value\n }\n\n function setDisplayMode(value) {\n displayMode.value = value\n }\n\n function setLanguage(value) {\n language.value = value\n }\n\n function setTheme(value) {\n theme.value = value\n }\n\n return {\n // Data\n bundleConfig,\n bundleId,\n displayMode,\n hasChosenPackage,\n language,\n languageLoaded,\n ready,\n screen,\n screensDefinition,\n screensDefinitionInit,\n theme,\n\n // Methods\n loadBundle,\n\n // Setter Methods\n setBundleId,\n setDisplayMode,\n setLanguage,\n setTheme,\n }\n}\n","import { computed } from 'vue'\nimport { cloneDeep, isNil } from 'lodash'\nimport config from '@/config'\nimport { DATE_FORMAT_ISO } from '@/config/constants'\nimport { DateTimeHelper } from '@/helpers/DateTime'\nimport { SortUtil } from '@/utils/Sorting'\nimport { resolve } from '@/modules/PartnerWidget/helpers/strings'\nimport { isRequired, NotFoundError } from '@/utils/CustomErrors'\n\nimport useBackend from '@/hooks/useBackend'\nimport usePartnerWidgetBundleLoader from '@/hooks/usePartnerWidgetBundleLoader'\n\nconst { buildURL, getBaseUrl, setup } = useBackend()\nconst { bundleConfig, displayMode, theme } = usePartnerWidgetBundleLoader()\n\nsetup('/partnerwidget', config.microserviceBaseUrl)\n\n// TODO: Already defined in usePersonSpecificProduct\nfunction getProduct(person, productId) {\n return person?.products?.products[productId]\n}\n\n// TODO: Already defined in usePersonSpecificProduct\nfunction getProductPrice(person, productId) {\n return getProduct(person, productId).prices.find(p => !!p.selected)\n}\n\n/**\n * The backend used id whereas the frontend works with productId everywhere. This function provides the mapping logic.\n * @param __products Set of products\n * @param __productId Id to identify the product\n */\nfunction mapIdToProductId(__products, __productId) {\n __products[__productId].productId = __productId\n delete __products[__productId].id\n}\n\n/**\n * Returns all existing products of a group sorted by the order field\n * @param __groups\n * @param __products\n * @param groupId\n * @return []\n */\nfunction _getSortedProductsFromGroup(\n __groups = isRequired('groups'),\n __products = isRequired('products'),\n groupId = isRequired('groupId')\n) {\n let groupsObject = { ...__groups }\n if (!groupsObject[groupId]) throw new NotFoundError('group with groupId', groupId)\n const productsCopy = cloneDeep(__products)\n return groupsObject[groupId].products\n .map(productId => {\n mapIdToProductId(productsCopy, productId)\n return productsCopy[productId]\n })\n .filter(product => product)\n .sort(SortUtil.sortByOrder)\n}\n\n/**\n * Returns all existing products of a category sorted by the order field\n * @param categoryId\n * @return []\n */\nfunction getSortedProductsFromCategory(productsStructure, categoryId = isRequired('categoryId')) {\n const { categories, groups, products } = productsStructure\n\n return categories[categoryId].groups\n .reduce((acc, groupId) => acc.concat(_getSortedProductsFromGroup(groups, products, groupId)), [])\n .sort(SortUtil.sortByOrder)\n}\n\nfunction getReferrerParams() {\n if (window.location && window.location.search) {\n const { search } = window.location\n const urlSearchParams = new URLSearchParams(search.toLowerCase())\n const params = {}\n urlSearchParams.forEach((value, key) => (params[key] = value))\n return params\n }\n return {}\n}\n\nfunction hasLabel(key) {\n return bundleConfig?.labels ? !!bundleConfig.labels[key] : false\n}\n\nfunction getLabel(key, params = {}) {\n if (!hasLabel(key)) {\n return key\n }\n return resolve(bundleConfig.labels[key], params)\n}\n\nfunction getOfferText(persons, showExampleOfferText = true) {\n if (!persons || persons.length < 1) return ''\n const person = persons[0]\n const age = person?.age || DateTimeHelper.getAge(person?.personData.dateOfBirth)\n const gender = person.personData.gender.toLowerCase()\n\n // currently no labels exist for unborn child\n const isBornChild = age > 0 && age < 16\n const textVariant = isBornChild ? 'child' : gender\n\n if (showExampleOfferText) {\n return getLabel('preview_example_' + textVariant, { age })\n }\n\n return getLabel('personal_offer_text_' + textVariant, { age })\n}\n\nexport default function usePartnerWidget() {\n const partnerWidgetTheme = computed(() => {\n if (Object.keys(bundleConfig).length === 0) {\n return theme.value\n }\n return bundleConfig.theme\n })\n\n const partnerWidgetDisplayMode = computed(() => {\n if (Object.keys(bundleConfig).length === 0) {\n return displayMode.value\n }\n return bundleConfig.displayMode\n })\n\n function getCustomThemeCssUrl(code, lastModifiedDate) {\n return Promise.resolve(buildURL(`${getBaseUrl}/public/bundles/${code}/css?v=${lastModifiedDate}`))\n }\n\n function getPackageTotalPrice(packageProducts, person) {\n if (isNil(packageProducts)) {\n throw new Error('getPackageTotalPrice: Invalid parameter packageProducts', packageProducts)\n }\n if (isNil(person)) {\n throw new Error(`getPackageTotalPrice: Invalid parameter personId, ${person}`)\n }\n\n return packageProducts.reduce((acc, product) => {\n const value = !isNil(product.value) ? parseInt(product.value) : null\n if (!isNil(value)) {\n acc += getProductPriceOptionForFranchise(person, product.id, value).price\n } else {\n acc += getProductPrice(person, product.id).price\n }\n return acc\n }, 0)\n }\n\n function getProductPriceOptionForFranchise(person, productId, value) {\n if (isNil(person) || isNil(productId) || isNil(value)) {\n throw new Error(\n `getProductPriceForFranchise missing required parameter(s) person: ${person} productId: ${productId} value: ${value}`\n )\n }\n\n const storeProduct = getProduct(person, productId)\n const price = storeProduct.prices.find(p => p.value === value)\n if (isNil(price)) {\n throw new Error(`getProductPriceForFranchise could not find price for product ${productId} franchise: ${value}`)\n }\n\n return price\n }\n\n /**\n * Select all customize parameters form the URL\n *\n * Available parameters:\n * - birthDate ==> Set the date of birth from the person, alias birthdate e.g. 2001-09-09\n * - firstName ==> Set the first name from the person, alias firstName\n * - gender ==> Set the gender from the person (MALE, FEMALE, UNBORN)\n * - zipcode ==> Set the zipCode for the location objecct\n * - zipcodeaddon ==> Set the zipCodeAddon for the location objecct\n * - locationnumber ==> Set the locationNumber for the location objecct\n *\n * @urlParams Object Get proper url parameters for setting a new person\n */\n function getQueryParams() {\n const params = getReferrerParams()\n const { locationnumber, zipcode, zipcodeaddon, birthdate, firstname } = params\n\n let gender\n if (params.gender) {\n gender = params.gender.toUpperCase()\n }\n\n let dateOfBirth\n if (DateTimeHelper.isValidBirthDate(birthdate)) {\n dateOfBirth = DateTimeHelper.formatDate(birthdate, DATE_FORMAT_ISO)\n }\n\n let location\n if (zipcode) {\n location = {\n locationNumber: locationnumber,\n zipCode: zipcode,\n zipCodeAddon: zipcodeaddon,\n }\n }\n\n return {\n gender,\n dateOfBirth,\n location,\n firstName: firstname,\n }\n }\n\n function isPackageValid(products) {\n const anyProductInvalid = products.some(product => {\n // product not found in basket => not valid (e.g. Kinderwunsch product not in basket, if person is male)\n if (!product) {\n return true\n }\n // special case medical private: ignore MEDICAL_PRIVATE_CONDITIONS_UNFULFILLED error, as products in basket\n // are not selected and valid will always be false\n if (\n product.id === 'PE04Produkt' &&\n product.messages.length === 1 &&\n product.messages[0].key === 'MEDICAL_PRIVATE_CONDITIONS_UNFULFILLED'\n ) {\n return false\n }\n return product.valid === false\n })\n return !anyProductInvalid\n }\n\n function isPackageAvailable(pack) {\n let isInvalid = false\n\n const firstPerson = pack.basket?.persons[0]\n\n // @TODO check for better way to handle products with franchises not matching for a person age\n try {\n getPackageTotalPrice(pack.products, firstPerson)\n } catch {\n return false\n }\n\n const products = pack.products.map(p => {\n const storeProduct = getProduct(firstPerson, p.id)\n\n if (!storeProduct) {\n isInvalid = true\n }\n\n return {\n id: p.id,\n ...storeProduct,\n }\n })\n\n if (isInvalid) {\n return false\n }\n\n return isPackageValid(products)\n }\n\n return {\n // Data\n partnerWidgetDisplayMode,\n partnerWidgetTheme,\n\n // Methods\n getCustomThemeCssUrl,\n getLabel,\n getOfferText,\n getPackageTotalPrice,\n getProductPrice,\n getProductPriceOptionForFranchise,\n getSortedProductsFromCategory,\n getQueryParams,\n hasLabel,\n isPackageAvailable,\n isPackageValid,\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\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 \n\n\n\n\n\n\n\n\n\n","export const currency = value => {\n if (!value) return '0.00'\n let formatted = parseFloat(value).toFixed(2)\n if (formatted > 999) {\n formatted = formatted.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \"'\")\n }\n return formatted\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n {{ `${$t('product.currency')} ${price}` }}\n \n \n \n \n \n \n \n \n\n \n \n \n\n\n\n\n\n\n","import { DEFAULT_LANGUAGE } from '@/config/constants'\nimport { SOURCE } from '@/config/events'\n\nlet _referrer\n\nexport function getRouteData(options) {\n const { origin, search } = window.location\n const params = new URLSearchParams(search)\n const language = params.get('language') || DEFAULT_LANGUAGE\n const title = options.title\n const subRoutes = options.routes || []\n\n const url = [origin, ...subRoutes].join('/')\n\n let referrerUrl = document.referrer\n if (_referrer) {\n referrerUrl = _referrer.page.url\n }\n\n const description = [SOURCE.PARTNER_WIDGET, language.toUpperCase(), title].join(' - ')\n const descriptionWithoutLang = [SOURCE.PARTNER_WIDGET, title].join(' - ')\n\n // Get page and route data\n const data = {\n page: {\n title,\n description,\n descriptionWithoutLang,\n language,\n url,\n aliasUrl: url,\n referrerUrl,\n },\n }\n _referrer = { ...data }\n return data\n}\n\nexport function getPackageTrackingId(pwPackage) {\n if (!pwPackage) {\n console.error('Can not get tracking id, pwPackage was falsy')\n return ''\n }\n const packageId = pwPackage.id\n if (!packageId || packageId.split('-', 1).length === 0) {\n console.error('Could not extract tracking id')\n return ''\n }\n return 'package-' + packageId.split('-', 1)[0]\n}\n","\n \n \n \n\n \n 0\">\n \n \n\n \n \n \n\n\n\n\n\n\n\n","\n \n \n \n \n {{ getLabel('detail_price', { price: setCurrency() }) }}\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\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 \n \n\n\n\n\n\n\n","\n \n \n \n {{ item.name }}\n \n {{ getLabel('detail_price', { price }) }}\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n","import { required } from '@vuelidate/validators'\nimport { dateOfBirth } from '@/validations/components'\nimport { ValidatorsUtil } from '@/utils/Validators'\n\nexport default {\n address: {\n required,\n location: ValidatorsUtil.isLocation,\n },\n dateOfBirth,\n gender: {\n required,\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 < {{ getLabel('main_back') }}\n \n \n \n \n {{ getLabel('detail_person_change') }}\n \n \n \n {{ getLabel('detail_userinfo') }}\n \n {{ buttonLabel }}\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\n\n\n\n\n\n\n","import PartnerWidget from '@/modules/PartnerWidget/PartnerWidget.vue'\nimport 'vite/modulepreload-polyfill'\n\n// global css variables for partner widget\nimport '@/modules/PartnerWidget/assets/styles/variables.css'\nimport { createApp, setup } from '@/setup'\n// parse querystring\nconst search = window.location.search\n .substring(1)\n .split('&')\n .reduce((acc, pair) => {\n const tab = pair.split('=')\n acc[tab[0]] = tab[1]\n return acc\n }, {})\n\nconst element = document.getElementById('partnerWidget')\n\nconst props = { ...element.dataset, ...search }\n\nconst app = setup(createApp(PartnerWidget, props))\napp.mount(element)\n"],"names":["translations","computed","resolve","str","params","search","term","key","getDefaultContractStartDate","useBasket","isInvalidContractStartDate","value","ISODate","DateTimeHelper","isValidISODate","isValid","now","isToday","isPast","isAfter","addMonths","getNewContractStartDate","SCREEN","BOOLEAN_CONFIG_KEYS","CATEGORY_ADDITIONAL","CATEGORY_FURTHER_ADDITIONAL","doGet","setup","useBackend","updateOvpBasket","createDistributionPartners","useDistribution","fetchLocations","useMasterdata","addNotification","useNotifications","getCustomThemeCssUrl","usePartnerWidget","fetchProducts","useProduct","t","useI18n","config","events$","EVENT_LANGUAGE","languageLoaded","bundleId","ref","displayMode","hasChosenPackage","language","ready","screen","screensDefinition","theme","code","bundleConfig","reactive","packages","usePartnerWidgetBundleLoader","screensDefinitionInit","enter","onDetailRequired","onBackToBundle","editScreenDefinitions","goToSanitas","fetchBundle","__code","__language","loadBundle","bundleResponse","ReactivityUtil","overrideBundleWithUrlProps","bundleBasket","location","contractStartDate","findLocation","__package","p","SOFT_CLOSED_PRODUCTS","pack","updatedBasketBundle","overrideBasketBundleWithUrlProps","cloneDeep","createBasket","productsStructure","loadProducts","packageData","loadThemeCSS","setScreenDefinitions","e","__packages","basket","uuidv4","allPackageProducts","acc","payloadBasket","getBasketPayload","__basket","updateProductsInBasket","query","locationData","locationZipAddon","locationLocationNumber","paramZipAddon","paramLocationNumber","products","selectProducts","simulate","packageProducts","updatedBasket","personProducts","resetProductSelection","applyCriteriaAndSelectProducts","product","price","id","toggle","basketProduct","priceOptions","selectedPriceOption","setSelectedPriceOption","setToggleAndSelectPriceOption","isPriceMatching","isDurationMatching","option","CHANNEL","isEmpty","ROUTE_NAME","__bundle","__config","__options","GENDER","pick","newScreenDefinitionsProps","addStylesheet","url","themeFile","goToBundle","options","EVENT_PARTNER_WIDGET","item","target","realBasket","EVENT_TRACKING","sanitasHref","NOTIFICATION","PARTNER_WIDGET_RESTART_TIMEOUT","restartWidgetWithData","searchParams","address","persons","firstPersonData","locationNumber","zipCode","zipCodeAddon","setBundleId","setDisplayMode","setLanguage","setTheme","buildURL","getBaseUrl","getProduct","person","productId","getProductPrice","mapIdToProductId","__products","__productId","_getSortedProductsFromGroup","__groups","isRequired","groupId","groupsObject","NotFoundError","productsCopy","SortUtil","getSortedProductsFromCategory","categoryId","categories","groups","getReferrerParams","urlSearchParams","hasLabel","getLabel","getOfferText","showExampleOfferText","age","gender","textVariant","partnerWidgetTheme","partnerWidgetDisplayMode","lastModifiedDate","getPackageTotalPrice","isNil","getProductPriceOptionForFranchise","getQueryParams","locationnumber","zipcode","zipcodeaddon","birthdate","firstname","dateOfBirth","DATE_FORMAT_ISO","isPackageValid","isPackageAvailable","isInvalid","firstPerson","storeProduct","badgeTitle","content","hasBadgeTitle","colors","startPathColor","endPathColor","textIndex","show","entryLabels","animationIntervalId","displayedText","hasEntrySmallTitle","hasAnimatedEntryLabels","entry","showEntrySmallTitle","textPositionClass","transition","transitionName","transitionMode","defaultTransition","setEntryLabels","i","nextText","setTransitionInterval","timeInterval","onAnimationClick","onMounted","currency","formatted","showIllustration","offerText","props","available","onCardClicked","emit","_referrer","getRouteData","origin","DEFAULT_LANGUAGE","title","subRoutes","referrerUrl","description","SOURCE","descriptionWithoutLang","data","getPackageTrackingId","pwPackage","packageId","once","sortedPackages","trackPartnerWidgetDisplayedAndPageViewed","trackingPayload","itemData","inject","setCurrency","activeCategory","emitOpen","setActiveCategory","category","emitOpened","$emit","open","init","onOpened","getSortedCategories","useCategories","packageTrackingId","useAccordion","productsIds","productsByCategory","bundleProduct","prod","folder","PartnerWidgetAccordion","TabsContainer","handleResize","width","handleTracking","onOpenedCategory","detailOpenedCategoryPayload","onBeforeUnmount","validations","required","ValidatorsUtil","formData","v","useVuelidate","isUnborn","isUnbornFunc","save","trackPersonScreenShown","pageData","EVENT_PERSONS_FORM_DISPLAYED","date","isFuture","parseISO","personData","watch","isSavingPersonData","personModal","buttonLabel","showBackButton","provide","buttonAction","onEditPerson","savePerson","updatedPerson","basketPayload","views","Bundle","Detail","Error","Entry","screenEvents","screenProps","classes","pair","tab","element","app","createApp","PartnerWidget"],"mappings":"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"}
{{ getLabel('detail_userinfo') }}