{"version":3,"file":"partnerwidget-c6518e52.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\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 config from '@/config'\n\nimport useBackend from '@/hooks/useBackend'\nimport useBasket from '@/hooks/useBasket'\nimport useDistribution from '@/hooks/useDistribution'\nimport useError from '@/hooks/useError'\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 { createErrorResponse } = useError()\nconst { fetchLocations } = useMasterdata()\nconst { addNotification } = useNotifications()\nconst { getCustomThemeCssUrl } = usePartnerWidget()\nconst { fetchProducts } = useProduct()\nconst { t } = useI18n()\n\nsetup('/partnerwidget', config.microserviceBaseUrl, {\n responseSuccess: response => {\n return response.data\n },\n responseError: error => {\n return createErrorResponse(error)\n },\n})\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 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 (e) {\n console.error(e)\n if (e.response) {\n screensDefinition.value.Error.props.messages = e.response.data.infoMessages\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 useError from '@/hooks/useError'\nimport usePartnerWidgetBundleLoader from '@/hooks/usePartnerWidgetBundleLoader'\n\nconst { buildURL, getBaseUrl, setup } = useBackend()\nconst { createErrorResponse } = useError()\nconst { bundleConfig, displayMode, theme } = usePartnerWidgetBundleLoader()\n\nsetup('/partnerwidget', config.microserviceBaseUrl, {\n responseSuccess: response => {\n return response.data\n },\n responseError: error => {\n return createErrorResponse(error)\n },\n})\n\nfunction getProduct(person, productId) {\n return person?.products?.products[productId]\n}\n\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 if (showExampleOfferText) {\n return getLabel('preview_example_' + gender, { age })\n }\n // currently no labels exist for unborn child\n const isBornChild = age > 0 && age < 16\n const textVariant = isBornChild ? 'child' : gender\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","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","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\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 { 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","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","createErrorResponse","useError","fetchLocations","useMasterdata","addNotification","useNotifications","getCustomThemeCssUrl","usePartnerWidget","fetchProducts","useProduct","t","useI18n","config","response","error","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","updatedBasketBundle","overrideBasketBundleWithUrlProps","cloneDeep","createBasket","__package","productsStructure","loadProducts","packageData","loadThemeCSS","setScreenDefinitions","e","__packages","basket","uuidv4","allPackageProducts","acc","pack","payloadBasket","getBasketPayload","__basket","updateProductsInBasket","query","locationData","locationZipAddon","locationLocationNumber","paramZipAddon","paramLocationNumber","products","selectProducts","simulate","packageProducts","updatedBasket","personProducts","resetProductSelection","applyCriteriaAndSelectProducts","product","price","p","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","tm","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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"}