{"mappings":"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","sources":["src/Benefits/Page/BenefitsPage.tsx","src/Benefits/Telemetry.ts","src/StringUtils.ts"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { ILumoOneAppState } from '../../boot/configureStore';\nimport { BenefitCategory, IBenefitDescriptionAM } from '../Api/ApiModels';\nimport { ResourceText, useResource } from '../../Components/ResourceText';\nimport { capitalize } from '../../Components/stringUtilities';\nimport { benefitPageActions } from './benefitsPageActions';\nimport { LoadingSpinner } from '../../Components/LoadingSpinner';\nimport { layoutActions } from '../../Common/Layout/layoutActions';\nimport { routeFromRoot, routes } from '../../Common/routes';\nimport * as QueryString from 'query-string';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { MarkdownContent } from '../../Components/MarkdownContent';\nimport {\n\taddTelemetryEventForBenefitCategoryView,\n\taddTelemetryEventForBenefitLinkClick,\n\taddTelemetryEventForExpandBenefit,\n} from '../Telemetry';\nimport SmartLink from '../../Components/SmartLink';\nimport { BenefitIcon } from '../../Components/BenefitIcon';\nimport { pageViewTelemetryActions } from '../../Telemetry/pageViewTelemetryActions';\nimport PageMeta from '../../Common/Layout/PageMeta';\nimport { IBenefitsPageStateProps } from './IBenefitsPageStateProps';\nimport { Language } from '../../Common/interfaces/language';\nimport { formatCurrency } from '../../StringUtils';\nimport { useMyLumoRoot } from '../../hooks/useSetting';\nimport { getBenefitIconUrl } from '../BenefitUtils';\nimport { withWindow } from '../../Common/window';\nimport { isAlreadyRequested, isOperationSuccess } from '../../Common/Api/ApiOperationState';\nimport { IDefineSsrRequirements, withSsrSupport } from '../../SSR/ssrDispatchWrapper';\nimport { useRunOnce } from '../../SSR/inlineRenderDispatchHelper';\n\nexport type IBenefitsPageProps = IBenefitsPageStateProps & IBenefitsPageDispatchProps & IDefineSsrRequirements;\n\nexport interface IBenefitsPageDispatchProps {\n\tgetAllBenefits: typeof benefitPageActions.getAllBenefits.request;\n\tsetLayoutValues: typeof layoutActions.setValues;\n\tpageComplete: typeof pageViewTelemetryActions.pageComplete;\n}\n\nfunction BenefitsPage(props: IBenefitsPageProps) {\n\tconst { getResourceText } = useResource();\n\tif (!isAlreadyRequested(props.benefits)) {\n\t\tprops.getAllBenefits();\n\t\tprops.requireForSsr(benefitPageActions.getAllBenefits);\n\t}\n\n\tuseRunOnce(() =>\n\t\tprops.setLayoutValues({\n\t\t\tbreadcrumbCurrentName: getResourceText('BenefitsPage_Heading_Main'),\n\t\t\tbreadcrumbParents: [\n\t\t\t\t{\n\t\t\t\t\tname: getResourceText('BenefitsPage_WhyLumo_LinkText'),\n\t\t\t\t\tpath: getResourceText('BenefitsPage_WhyLumo_LinkUrl'),\n\t\t\t\t},\n\t\t\t],\n\t\t\ttranslateUrl: routeFromRoot(routes.benefits),\n\t\t}),\n\t);\n\n\tuseEffect(() => {\n\t\tprops.pageComplete({});\n\t}, []);\n\n\tif (!isOperationSuccess(props.benefits)) {\n\t\treturn <LoadingSpinner />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<PageMeta title={getResourceText('BenefitsPage_Heading_Main')} />\n\t\t\t<div className=\"view-benefits\">\n\t\t\t\t<div className=\"view-benefits__wrapper\">\n\t\t\t\t\t<BenefitsIntro />\n\t\t\t\t\t<CategorizedBenefits benefits={props.benefits.result} language={props.language} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nfunction BenefitsIntro() {\n\treturn (\n\t\t<div className=\"benefits-intro white-background-overflow\">\n\t\t\t<h2 className=\"benefits-intro__heading\">\n\t\t\t\t<ResourceText resourceKey=\"BenefitsPage_Heading_Main\" />\n\t\t\t</h2>\n\t\t\t<p className=\"benefits-intro__text\">\n\t\t\t\t<ResourceText resourceKey=\"BenefitsPage_PageInfo2\" />\n\t\t\t</p>\n\t\t</div>\n\t);\n}\n\ntype LoadedBenefitsProps = Pick<IBenefitsPageStateProps, 'language'> & { benefits: IBenefitDescriptionAM[] };\n\nfunction CategorizedBenefits({ language, benefits }: LoadedBenefitsProps) {\n\tconst navigate = useNavigate();\n\tconst location = useLocation();\n\tconst query = QueryString.parse(location.search);\n\tconst { getResourceText } = useResource();\n\tconst [currentHash, setCurrentHash] = React.useState<string | undefined>(undefined);\n\tconst [activeTab, setActiveTab] = useState<BenefitCategory>(\n\t\tquery.category === BenefitCategory.PaidBenefits\n\t\t\t? BenefitCategory.PaidBenefits\n\t\t\t: BenefitCategory.IncludedInLiving,\n\t);\n\n\tconst onTabChange = (activeCategory: BenefitCategory) => {\n\t\tnavigate({\n\t\t\tpathname: location.pathname,\n\t\t\tsearch: `category=${activeCategory}`,\n\t\t});\n\t\tsetActiveTab(activeCategory);\n\t};\n\n\tuseEffect(() => {\n\t\taddTelemetryEventForBenefitCategoryView(getResourceText('BenefitsPage_Heading_' + activeTab));\n\t}, [activeTab]);\n\n\tuseEffect(() => {\n\t\tconst requestedHash = location.hash && location.hash.length > 1 ? location.hash.substring(1) : undefined;\n\t\tif (benefits && benefits.length && requestedHash && requestedHash !== currentHash) {\n\t\t\tconst benefit = benefits.find((b) => b.technicalName === requestedHash);\n\t\t\tif (benefit) {\n\t\t\t\tif (benefit.categories.includes(activeTab)) {\n\t\t\t\t\twithWindow((wnd) => {\n\t\t\t\t\t\tconst element = wnd.document.getElementById(requestedHash);\n\t\t\t\t\t\tif (element) {\n\t\t\t\t\t\t\tlet offset = 95;\n\t\t\t\t\t\t\tconst header = wnd.document.querySelector('.l-local-header');\n\t\t\t\t\t\t\tif (header) {\n\t\t\t\t\t\t\t\toffset = header.clientHeight + 5;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twnd.scrollTo({ top: element.offsetTop - offset, behavior: 'smooth' });\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tsetCurrentHash(requestedHash);\n\n\t\t\t\t\taddTelemetryEventForExpandBenefit(benefit.nameFi);\n\t\t\t\t} else {\n\t\t\t\t\tsetActiveTab(benefit.categories[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [benefits, activeTab, location]);\n\n\treturn (\n\t\t<div className=\"atom-tabs\">\n\t\t\t<TabButtons activeTab={activeTab} setActiveTab={onTabChange} />\n\t\t\t<TabContents language={language} benefits={benefits} activeTab={activeTab} />\n\t\t</div>\n\t);\n}\n\ninterface TabButtonsProps {\n\tactiveTab: BenefitCategory;\n\tsetActiveTab: (activeTab: BenefitCategory) => void;\n}\n\nfunction TabButtons({ activeTab, setActiveTab }: TabButtonsProps) {\n\tconst tabButtonBaseCssClass = 'atom-tabs__item';\n\tconst getTabButtonCssClass = (tabCategory: BenefitCategory) => {\n\t\treturn tabCategory === activeTab ? tabButtonBaseCssClass + ' -active' : tabButtonBaseCssClass;\n\t};\n\n\treturn (\n\t\t<div className=\"atom-tabs__container white-background-overflow\" role=\"tablist\">\n\t\t\t<button\n\t\t\t\tclassName={getTabButtonCssClass(BenefitCategory.IncludedInLiving)}\n\t\t\t\tid=\"atom-tabs__item-1\"\n\t\t\t\taria-selected=\"false\"\n\t\t\t\taria-controls=\"atom-tabs__content-1\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={() => setActiveTab(BenefitCategory.IncludedInLiving)}\n\t\t\t>\n\t\t\t\t<ResourceText resourceKey=\"BenefitCategory_IncludedInLiving\" />\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tclassName={getTabButtonCssClass(BenefitCategory.PaidBenefits)}\n\t\t\t\tid=\"atom-tabs__item-2\"\n\t\t\t\taria-selected=\"false\"\n\t\t\t\taria-controls=\"atom-tabs__content-2\"\n\t\t\t\ttabIndex={1}\n\t\t\t\tonClick={() => setActiveTab(BenefitCategory.PaidBenefits)}\n\t\t\t>\n\t\t\t\t<ResourceText resourceKey=\"BenefitCategory_PaidBenefits\" />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n\ntype TabContentsProps = LoadedBenefitsProps & Pick<TabButtonsProps, 'activeTab'>;\n\nfunction TabContents({ activeTab, language, benefits }: TabContentsProps) {\n\treturn (\n\t\t<div className=\"atom-tabs__content\">\n\t\t\t<CategoryIntroduction category={activeTab} />\n\t\t\t<TabPanel\n\t\t\t\tlanguage={language}\n\t\t\t\ttabIndex={activeTab === BenefitCategory.IncludedInLiving ? 0 : 1}\n\t\t\t\tbenefitCategory={activeTab}\n\t\t\t\tbenefits={benefits.filter((b) =>\n\t\t\t\t\tb.categories.some((c) =>\n\t\t\t\t\t\tactiveTab === BenefitCategory.IncludedInLiving\n\t\t\t\t\t\t\t? [BenefitCategory.IncludedInLiving].includes(c)\n\t\t\t\t\t\t\t: c === BenefitCategory.PaidBenefits,\n\t\t\t\t\t),\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\ninterface ITabPanelProps {\n\tbenefits: IBenefitDescriptionAM[];\n\ttabIndex: number;\n\tlanguage: Language;\n\tbenefitCategory?: BenefitCategory;\n}\n\nfunction TabPanel(props: ITabPanelProps) {\n\tconst tabNumber = props.tabIndex + 1;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"atom-tabs__contentItem\"\n\t\t\tid={'atom-tabs__content-' + tabNumber}\n\t\t\ttabIndex={props.tabIndex}\n\t\t\trole=\"tabpanel\"\n\t\t\taria-labelledby={'atom-tabs__item-' + tabNumber}\n\t\t>\n\t\t\t<div className=\"benefit__links\">\n\t\t\t\t{props.benefits.map((benefit) => {\n\t\t\t\t\treturn <BenefitLink benefit={benefit} language={props.language} key={benefit.technicalName} />;\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<div className=\"benefit__items\">\n\t\t\t\t{props.benefits.map((benefit) => {\n\t\t\t\t\treturn <BenefitItem key={benefit.technicalName} benefit={benefit} language={props.language} />;\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\ninterface BenefitLinkProps {\n\tlanguage: Language;\n\tbenefit: IBenefitDescriptionAM;\n}\n\nfunction BenefitLink(props: BenefitLinkProps) {\n\tconst { benefit, language } = props;\n\tconst { technicalName, publicDescriptionHeadingFi, publicDescriptionHeadingEn } = benefit;\n\treturn (\n\t\t<a className=\"benefit-link\" href={`#${technicalName}`}>\n\t\t\t<BenefitIcon benefitTechnicalName={technicalName} className=\"benefit-link__icon\" />\n\t\t\t<span>{language === 'fi' ? publicDescriptionHeadingFi : publicDescriptionHeadingEn}</span>\n\t\t</a>\n\t);\n}\n\ninterface IBenefitItemProps {\n\tbenefit: IBenefitDescriptionAM;\n\tlanguage: Language;\n}\n\nfunction BenefitItem({ benefit, language }: IBenefitItemProps) {\n\tconst handleLinkClicked = () => {\n\t\taddTelemetryEventForBenefitLinkClick(benefit.nameFi);\n\t};\n\n\tconst myLumoRootUrl = useMyLumoRoot();\n\tconst { getResourceText } = useResource();\n\n\tconst langCode = capitalize(language);\n\tlet linkText =\n\t\tbenefit[\n\t\t\t`publicLinkText${langCode}` as keyof Pick<IBenefitDescriptionAM, 'publicLinkTextFi' | 'publicLinkTextEn'>\n\t\t];\n\tlet linkUrl: string | undefined =\n\t\tbenefit[`publicLinkUrl${langCode}` as keyof Pick<IBenefitDescriptionAM, 'publicLinkUrlFi' | 'publicLinkUrlEn'>];\n\tconst isShownInMyLumo =\n\t\tbenefit[\n\t\t\t`isShownInMyLumo${langCode}` as keyof Pick<IBenefitDescriptionAM, 'isShownInMyLumoFi' | 'isShownInMyLumoEn'>\n\t\t];\n\n\tif (linkUrl && !linkText) {\n\t\tlinkUrl = undefined; // Don't show when no text for the url is available\n\t} else if (isShownInMyLumo) {\n\t\tif (!linkUrl) {\n\t\t\tlinkUrl =\n\t\t\t\tmyLumoRootUrl + getResourceText('BenefitsPage_OpenInMyLumo_LinkPath') + '#' + benefit.technicalName;\n\t\t}\n\t\tif (!linkText) {\n\t\t\tlinkText = getResourceText('BenefitsPage_OpenInMyLumo_LinkText');\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"benefit__item\" id={benefit.technicalName}>\n\t\t\t<div className=\"benefit__item__image__wrapper\">\n\t\t\t\t{benefit.mainImageUrl && <img className=\"benefit__item__image\" src={benefit.mainImageUrl} alt=\"\" />}\n\t\t\t\t<img className=\"benefit__item__image__icon\" src={getBenefitIconUrl(benefit, 'white')} alt=\"\" />\n\t\t\t</div>\n\t\t\t<div className=\"benefit__item__content\">\n\t\t\t\t<div className=\"benefit__item__heading__container\">\n\t\t\t\t\t<h3 className=\"benefit__item__heading\">\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbenefit[\n\t\t\t\t\t\t\t\t`publicDescriptionHeading${langCode}` as keyof Pick<\n\t\t\t\t\t\t\t\t\tIBenefitDescriptionAM,\n\t\t\t\t\t\t\t\t\t'publicDescriptionHeadingFi' | 'publicDescriptionHeadingEn'\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t</h3>\n\t\t\t\t\t{benefit.priceFrom && (\n\t\t\t\t\t\t<h3 className=\"benefit__item__heading--price\">\n\t\t\t\t\t\t\t<span className=\"benefit__item__heading--price -small\">\n\t\t\t\t\t\t\t\t<ResourceText resourceKey=\"BenefitsPage_PriceFrom\" />\n\t\t\t\t\t\t\t</span>{' '}\n\t\t\t\t\t\t\t<span>{formatCurrency(benefit.priceFrom, language)} €</span>\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"benefit__item__description\">\n\t\t\t\t\t<MarkdownContent\n\t\t\t\t\t\ttext={\n\t\t\t\t\t\t\tbenefit[\n\t\t\t\t\t\t\t\t`publicDescription${langCode}` as keyof Pick<\n\t\t\t\t\t\t\t\t\tIBenefitDescriptionAM,\n\t\t\t\t\t\t\t\t\t'publicDescriptionFi' | 'publicDescriptionEn'\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t{linkUrl && linkText && (\n\t\t\t\t\t\t<SmartLink to={linkUrl} onClick={handleLinkClicked} className=\"button benefit__item__link\">\n\t\t\t\t\t\t\t{linkText}\n\t\t\t\t\t\t</SmartLink>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\ninterface ICategoryIntroductionProps {\n\tcategory: BenefitCategory;\n}\n\nfunction CategoryIntroduction(props: ICategoryIntroductionProps) {\n\tconst { getResourceText } = useResource();\n\n\tconst categoryName = props.category;\n\n\tconst linkUrl = getResourceText(`BenefitsPage_CategoryIntroduction_${categoryName}_LinkUrl`, undefined, {\n\t\toptional: true,\n\t});\n\tconst linkText = getResourceText(`BenefitsPage_CategoryIntroduction_${categoryName}_LinkText`, undefined, {\n\t\toptional: true,\n\t});\n\tconst showLink = !!linkUrl && !!linkText;\n\n\treturn (\n\t\t<div className=\"atom-tabs__categoryIntros\">\n\t\t\t<h1 className=\"atom-tabs__categorySubheading\">\n\t\t\t\t<ResourceText resourceKey={`BenefitsPage_Heading_${categoryName}`} />\n\t\t\t</h1>\n\t\t\t<p className=\"atom-tabs__categoryText\">\n\t\t\t\t<ResourceText resourceKey={`BenefitsPage_CategoryIntroduction_${categoryName}_Content`} />\n\t\t\t</p>\n\t\t\t{showLink && (\n\t\t\t\t<p className=\"atom-tabs__categoryText\">\n\t\t\t\t\t<SmartLink to={linkUrl} className=\"plainLink\">\n\t\t\t\t\t\t<ResourceText resourceKey={`BenefitsPage_CategoryIntroduction_${categoryName}_LinkText`} />\n\t\t\t\t\t</SmartLink>\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport default withSsrSupport(\n\tconnect<IBenefitsPageStateProps, IBenefitsPageDispatchProps, Record<string, never>, ILumoOneAppState>(\n\t\t({ language, benefitsPage }) => {\n\t\t\treturn {\n\t\t\t\tlanguage: language.currentLanguage,\n\t\t\t\tbenefits: benefitsPage.benefits,\n\t\t\t};\n\t\t},\n\t\t{\n\t\t\tgetAllBenefits: benefitPageActions.getAllBenefits.request,\n\t\t\tsetLayoutValues: layoutActions.setValues,\n\t\t\tpageComplete: pageViewTelemetryActions.pageComplete,\n\t\t},\n\t)(BenefitsPage),\n);\n","import { addTelemetryEventGA4, GA4EventAction, GA4EventCategory, GA4EventType } from '../Telemetry/TelemetryGA4';\n\nexport function addTelemetryEventForBenefitCategoryView(categoryName: string) {\n\taddTelemetryEventGA4({\n\t\tevent: GA4EventType.ui_clicks,\n\t\tcategory: GA4EventCategory.benefits,\n\t\taction: GA4EventAction.AvattuKategoria,\n\t\tcategoryName,\n\t});\n}\n\nexport function addTelemetryEventForExpandBenefit(benefitName: string) {\n\taddTelemetryEventGA4({\n\t\tevent: GA4EventType.ui_clicks,\n\t\tcategory: GA4EventCategory.benefits,\n\t\taction: GA4EventAction.AvattuEtu,\n\t\tbenefitName,\n\t});\n}\n\nexport function addTelemetryEventForBenefitLinkClick(benefitName: string) {\n\taddTelemetryEventGA4({\n\t\tevent: GA4EventType.ui_clicks,\n\t\tcategory: GA4EventCategory.benefits,\n\t\taction: GA4EventAction.KlikattuEtu,\n\t\tbenefitName,\n\t});\n}\n","import { Language } from './Common/interfaces/language';\n\n/*** Formats the given value as decimal number. Always shows all decimals, does not truncate any digits.\n * - For finnish users, replaces the separator dot with comma\n * - Minimum amount of decimal places can be given (for example for using at least 2 decimals for prices).\n * - Optionally the minimum decimal requirement may be ignored when the value does not have any decimal digits (for example when price is full integer) */\nexport function formatDecimalNumber(\n\tvalue: number | undefined,\n\tlanguage: Language,\n\tminDecimalPlaces?: number,\n\tallowValueWithoutDecimals?: boolean,\n) {\n\tif (!value) {\n\t\treturn '';\n\t}\n\n\tlet formatted = value.toString();\n\n\tif (minDecimalPlaces) {\n\t\tconst integer = Math.trunc(value).toString();\n\n\t\tconst decimalPlaces = integer.length === formatted.length ? 0 : formatted.substring(integer.length + 1).length;\n\n\t\tif (decimalPlaces < minDecimalPlaces && !(decimalPlaces == 0 && allowValueWithoutDecimals)) {\n\t\t\tformatted = value.toFixed(minDecimalPlaces);\n\t\t}\n\t}\n\n\treturn language === 'fi' ? formatted.replace('.', ',') : formatted;\n}\n\nexport function formatCurrency(amount: number, language: Language): string {\n\treturn formatDecimalNumber(amount, language, 2, true);\n}\n"],"names":["$ed3kz","parcelRequire","BenefitsIntro","jsxs","className","jsx","$jjuiK","ResourceText","resourceKey","CategorizedBenefits","language","benefits","navigate","useNavigate","location","useLocation","query","QueryString","search","getResourceText","useResource","currentHash","setCurrentHash","React","useState","undefined","activeTab","setActiveTab","category","BenefitCategory","PaidBenefits","IncludedInLiving","useEffect","addTelemetryEventForBenefitCategoryView","requestedHash","hash","length","substring","benefit","find","b","technicalName","categories","includes","withWindow","wnd","element","document","getElementById","offset","header","querySelector","clientHeight","scrollTo","top","offsetTop","behavior","addTelemetryEventForExpandBenefit","nameFi","$91b52208a9d7d88f$var$TabButtons","activeCategory","pathname","$91b52208a9d7d88f$var$TabContents","TabButtons","tabButtonBaseCssClass","getTabButtonCssClass","tabCategory","role","id","tabIndex","onClick","TabContents","$91b52208a9d7d88f$var$CategoryIntroduction","$91b52208a9d7d88f$var$TabPanel","benefitCategory","filter","some","c","TabPanel","props","tabNumber","map","$91b52208a9d7d88f$var$BenefitLink","$91b52208a9d7d88f$var$BenefitItem","BenefitLink","publicDescriptionHeadingFi","publicDescriptionHeadingEn","href","$fddP5","BenefitIcon","benefitTechnicalName","BenefitItem","myLumoRootUrl","useMyLumoRoot","langCode","capitalize","linkText","linkUrl","isShownInMyLumo","mainImageUrl","src","alt","getBenefitIconUrl","priceFrom","formatCurrency","$hJlnN","MarkdownContent","text","$e3EsW","default","to","handleLinkClicked","addTelemetryEventForBenefitLinkClick","CategoryIntroduction","categoryName","optional","showLink","$91b52208a9d7d88f$export$2e2bcd8739ae039","withSsrSupport","connect","benefitsPage","currentLanguage","getAllBenefits","benefitPageActions","request","setLayoutValues","layoutActions","setValues","pageComplete","pageViewTelemetryActions","isAlreadyRequested","requireForSsr","useRunOnce","breadcrumbCurrentName","breadcrumbParents","name","path","translateUrl","routeFromRoot","routes","isOperationSuccess","Fragment","$2LBWb","title","$91b52208a9d7d88f$var$BenefitsIntro","$91b52208a9d7d88f$var$CategorizedBenefits","result","$fQt7u","LoadingSpinner","$jwOO8","addTelemetryEventGA4","event","GA4EventType","ui_clicks","GA4EventCategory","action","GA4EventAction","AvattuKategoria","benefitName","AvattuEtu","KlikattuEtu","amount","value","minDecimalPlaces","allowValueWithoutDecimals","formatted","toString","integer","Math","trunc","decimalPlaces","toFixed","replace","formatDecimalNumber"],"version":3,"file":"BenefitsPage.be9c40d6.js.map"}