{"version":3,"sources":["components/common/ErrorBoundary/resources.i18n.ts","components/common/ErrorBoundary/ErrorBoundary.tsx","components/common/MainSpinner.tsx","components/common/index.ts","components/common/Popup/popup-reducer.ts","icons/IconCheckMark.tsx","icons/IconExclamationMark.tsx","icons/IconLock.tsx","icons/IconMessage.tsx","icons/IconPen.tsx","icons/index.tsx","components/common/FormattedMoney.tsx","components/Page/PageContainer.tsx","components/Page/PageHeader.tsx","components/Page/index.ts","components/common/ContentText/index.ts","config/AppConfigContext.tsx","hooks/use-endpoint.ts","components/ContentContainer.tsx","components/common/Popup/popup-context.ts","components/common/ContentText/ContentText.tsx","components/common/Toast/Toast.tsx","components/common/Toast/index.ts","logos/Ropo_logo4_RGB_white_103x40.png","logos/Ropo_logo3_RGB_black_177x36.png","config/profiles/index.ts","config/profiles/profile.fallback.ts","config/profiles/profile.fi.ts","config/profiles/profile.se.ts","components/common/Popup/PopupComponent.tsx","App.tsx","config/SentryConfig.ts","serviceWorker.js","index.tsx","components/common/Popup/index.tsx","hooks/use-authenticated.tsx","hooks/use-debtor.ts","hooks/use-interval.ts","hooks/use-localized-countries.ts","hooks/index.ts","config/index.ts","model/DebtorData.tsx","components/DebtorAppContainer.tsx","components/resources.i18n.ts","components/FooterMenu.tsx","components/DebtorAppFooter.tsx","components/MenuLanguages/LangFlagIcons.tsx","components/MenuLanguages/MenuLanguages.tsx","components/DebtorAppHeader.tsx","components/DebtorAppMain.tsx","components/ProtectedRoute/ProtectedRoute.tsx","components/index.ts","icons/IconArrow.tsx","icons/IconToast.tsx","icons/encoded/index.tsx"],"names":["resources","en","applicationErrorTitle","applicationErrorMessage","applicationErrorButtonLabel","applicationUpdateAvailableTitle","applicationUpdateAvailableMessage","applicationUpdateAvailableButtonLabel","fi","sv","ErrorBoundary","state","hasError","logToSentry","error","errorInfo","Sentry","scope","setTag","setFingerprint","setExtras","extras","this","props","children","fallback","React","Component","defaultProps","Container","styled","marginTop","marginBottom","ErrorBoundaryMessage","button","message","messageType","title","Page","ApplicationMessage","ErrorBoundaryUpdateAvailable","t","useTranslation","label","onClick","window","location","assign","ErrorBoundaryGenericError","MainSpinnerContainer","height","MainSpinner","Spinner","centered","spinnerType","style","top","PopupAction","initialPopupState","isOpen","isError","buttonText","popupReducer","action","type","payload","IconCheckMark","backgroundColor","foregroundColor","version","viewBox","width","xmlns","xmlnsXlink","fill","fillRule","id","uniqid","stroke","d","points","IconExclamationMark","cx","cy","r","IconLock","className","strokeWidth","transform","IconMessage","IconPen","span","theme","inline","isInlineOnDesktop","desktop","isInlineOnTablet","tablet","isInlineOnMobile","mobile","whiteSpace","textAlign","display","breakpoints","tabletAndLower","mobileAndLower","FormattedMoney","amount","value","currency","formatMoney","toUpperCase","PageContainer","div","colors","white","padding","PageHeader","Toast","H1","appConfigProfile","process","REACT_APP_CONFIG_PROFILE","appConfig","profiles","AppConfigContext","createContext","AppConfigContextProvider","Provider","shouldUseMockServer","REACT_APP_MOCK_API","toLowerCase","errorInterceptor","config","enableInterceptors","isInterceptorsEnabled","status","response","isWhitelistedPathName","pathname","match","shouldCauseLogoutRedirect","Promise","reject","axiosInstance","axios","create","baseURL","timeout","interceptors","use","useEndpoint","requestConfig","initalData","useState","data","pending","complete","setResponse","useCallback","req","a","request","res","requestCompletedCallback","doEndpointRequest","url","ContentContainer","maxWidth","PopupContext","popup","dispatch","ContentText","p","size","bold","fontStyle","fontSize","fontWeight","margin","gray10","borderRadius","ToastMessage","font","fonts","small","marginLeft","alignSelf","ToastIcon","level","backgroundImage","encodedIconToast","backgroundRepeat","backgroundPosition","backgroundSize","TOAST_INITIAL_STATE","enableToast","requireAuthentication","useAuthenticated","authenticated","setToastInformation","initialLoad","setInitialLoad","method","getToast","shouldShowToast","useMemo","useEffect","module","exports","i18n","defaultLocale","availableLocales","code","dateFormat","topBarMenuItems","navBarMenuItems","topBarProfileMenuItems","paymentOptions","plusGiro","translatable","footerMenuItems","paymentPlan","minimumAmount","totalDays","gdprInfo","organizationInfo","legalName","address","street1","postalCode","city","phone","email","customerServiceUrl","se","swish","minimumPaymentAmount","minimumEditableAmount","minimumDifferenceAmount","organizationNumber","PopupComponent","useContext","onClose","SetIsOpen","SetIsError","AppRoot","lazy","Cases","Login","DebtorNotFound","Messages","UserDetails","Logout","ErrorNotFound","App","appConfigContext","useLocalStorage","activeLocale","setActiveLocale","locales","localeContext","changeLocale","locale","document","documentElement","lang","useReducer","AppContainer","Popup","AppMain","component","exact","path","Error","dsn","release","console","warn","Boolean","hostname","require","ReactDOM","render","getElementById","navigator","serviceWorker","ready","then","registration","unregister","INITIAL_AUTHENTICATED_CONTEXT","debtor","DebtorData","debtorResponse","setDebtor","setAuthenticated","isAuthenticated","AuthenticatedContext","AuthenticatedContextProvider","useDebtor","authenticatedContext","newDebtorData","doRequest","plainToClass","useInterval","callback","delay","savedCallback","useRef","current","setInterval","clearInterval","countries","key","useLocalizedCountries","LocaleContext","countryCodes","codes","forEach","country","push","countryList","sort","b","personalNumber","debtorNumber","firstName","lastName","coAddress","zipCode","phoneNumber","debtorType","contactViaSms","contactViaEmail","fullName","flexDirection","MenuOpenLabel","MenuClosedLabel","ProfileMobileLabel","PhoneNumber","Email","OrganizationNumber","FAQ","Complaints","PersonalData","Cookies","Footer","section","flexGrow","alignItems","borderLeft","minHeight","paddingLeft","borderTop","borderBottom","textDecoration","listStyle","FooterMenuListItems","href","FooterMenu","map","item","footer","color","deepBlue","position","bottom","FooterContent","flex","Copyright","justifyContent","lineHeight","Logo","alt","src","ropoLogo","LegalNameAndAddress","minWidth","PhoneAndEmail","aside","OrganizationInfo","paddingRight","flexWrap","NoWrap","LegalName","EmailAddress","emailAddress","PostalAddress","street2","DebtorAppFooter","Date","getFullYear","Flag","SvFlag","x","y","rx","FiFlag","EnFlag","xlinkHref","mask","activeCheckMarkIcon","createEncodedBgSvg","LangContainer","lighten","flexBasis","flexFlow","fontFamily","fontStack","text","cursor","InnerContainer","medium","zIndex","ActiveLocale","textHeavy","textTransform","List","ul","maxHeight","large","overflow","transition","right","ListItem","li","backgroundPositionX","backgroundPositionY","MenuLangIcon","isMenuOpen","MenuItem","Button","buttonType","MenuLanguages","menuItems","setIsOpen","pageClick","e","LangIsClicked","hasClassInTree","target","addEventListener","removeEventListener","Object","keys","Cover","isCoverOpen","header","useMemoizedMenuItems","items","translateLabels","logoElement","verticalAlign","DebtorAppHeader","memoizedTopBarMenuItems","memoizedTopBarProfileMenuItems","memoizedNavBarMenuItems","setIsCoverOpen","useLocation","shouldShowLogoutButton","TopBar","TopBarMenu","setCoverOpen","TopBarProfile","desktopLink","name","subLabel","TopBarLogout","NavBar","logo","NavBarMenu","closedLabel","openLabel","main","ProtectedRoute","rest","useRouteMatch","history","useHistory","log","IconArrow","IconToast","ry","encodedIconArrow","ReactDomServer","renderToString","encodedIconCheckMark","encodedIconExclamationMark"],"mappings":"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","file":"static/js/main.a76eccf3.chunk.js","sourcesContent":["import { ILocaleResource } from '@colligent/use-translation';\n\nexport const resources: ILocaleResource = {\n en: {\n applicationErrorTitle: 'Oops!',\n applicationErrorMessage: `An unexpected error occurred. It's not your fault, it's ours. Details about the error has been logged and we have been notified. You may try starting over.`,\n applicationErrorButtonLabel: 'Start over',\n applicationUpdateAvailableTitle: 'Update available',\n applicationUpdateAvailableMessage:\n 'An updated version of My Pages is available. You will be logged out while we update to the new version for you.',\n applicationUpdateAvailableButtonLabel: 'Update now'\n },\n fi: {\n applicationErrorTitle: 'Oho!',\n applicationErrorMessage: `Jotain meni pieleen. Se ei ole sinun syytäsi, se on meidän. Vika on ilmoitettu eteenpäin ja tutkimme asiaa. Voit yrittää uudelleen.`,\n applicationErrorButtonLabel: 'Aloita alusta',\n applicationUpdateAvailableTitle: 'Päivitys saatavilla',\n applicationUpdateAvailableMessage:\n 'OmaRopoCapital- sivusta on nyt saatavilla päivitetty versio. Sinut kirjataan ulos sivustolta päivityksen ajaksi.',\n applicationUpdateAvailableButtonLabel: 'Päivitä nyt'\n },\n sv: {\n applicationErrorTitle: 'Hoppsan!',\n applicationErrorMessage: `Ett oväntat fel uppstod. Det är inte ditt fel, det är vårt. Detaljer om felet har loggats och vi har blivit underrättade. Du kan prova med att börja om igen.`,\n applicationErrorButtonLabel: 'Börja om',\n applicationUpdateAvailableTitle: 'Uppdatering tillgänglig',\n applicationUpdateAvailableMessage:\n 'En uppdaterad version av Mina sidor är tillgänglig. Du kommer att loggas ut medan vi uppdaterar till den nya versionen åt dig.',\n applicationUpdateAvailableButtonLabel: 'Uppdatera nu'\n }\n};\n","import styled from '@colligent/colligent-component-framework';\nimport {\n ApplicationMessage,\n IApplicationMessage,\n IApplicationMessageButton\n} from '@colligent/colligent-component-framework/dist/common/components/ApplicationMessage';\nimport { useTranslation } from '@colligent/use-translation';\nimport * as Sentry from '@sentry/browser';\nimport React, { ReactNode } from 'react';\nimport { PageContainer } from '../../Page';\nimport { resources } from './resources.i18n';\n\ninterface IErrorProps {\n fallback?: string | ReactNode;\n logToSentry?: boolean;\n}\n\ninterface IErrorState {\n hasError: boolean;\n}\n\nexport class ErrorBoundary extends React.Component {\n static defaultProps = {\n logToSentry: true\n };\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n state = {\n hasError: false\n };\n\n componentDidCatch(error: Error | null, errorInfo: object) {\n const logToSentry = this.props;\n\n // if (isRedirect(error)) {\n if (logToSentry) {\n this.logToSentry(error, errorInfo);\n }\n\n // TODO: @Pontus: isREdirect(error) solution may be needed (compare to previous version of the file), investigate...\n throw error;\n }\n\n logToSentry = (error: Error | null, errorInfo: object) => {\n Sentry.withScope(scope => {\n scope.setTag('module', 'ErrorBoundary');\n scope.setFingerprint(['ErrorBoundary']);\n scope.setExtras({ extras: errorInfo });\n\n Sentry.captureMessage(`ErrorBoundary: ${error}.`);\n });\n };\n\n render() {\n const { children, fallback } = this.props;\n const { hasError } = this.state;\n\n if (hasError) {\n return fallback ?? ;\n }\n\n return children;\n }\n}\n\nconst Container = styled('div')<{}>(() => ({\n marginTop: 60,\n marginBottom: 60\n}));\n\nconst ErrorBoundaryMessage: React.FC = ({ button, message, messageType, title }) => {\n return (\n \n \n \n \n \n );\n};\n\nexport const ErrorBoundaryUpdateAvailable = () => {\n const t = useTranslation(resources);\n\n const button: IApplicationMessageButton = {\n label: t('applicationUpdateAvailableButtonLabel'),\n onClick: () => {\n // Unable to use reach-router for navigation if we want to reset the app completely.\n window.location.assign('/api/logout');\n }\n };\n\n return (\n \n );\n};\n\nconst ErrorBoundaryGenericError: React.FC = () => {\n const t = useTranslation(resources);\n\n const button: IApplicationMessageButton = {\n label: t('applicationErrorButtonLabel'),\n onClick: () => {\n // Unable to use reach-router for navigation if we want to reset the app completely.\n window.location.assign('/');\n }\n };\n\n return (\n \n );\n};\n","import styled from '@colligent/colligent-component-framework';\nimport { Spinner } from '@colligent/colligent-component-framework/dist/common/components/Spinner';\nimport React from 'react';\n\nconst MainSpinnerContainer = styled('div')<{}>(() => ({\n height: '100vh'\n}));\n\nexport const MainSpinner: React.FC = () => {\n return (\n \n \n \n );\n};\n","export * from './ErrorBoundary';\nexport * from './FormattedMoney';\nexport * from './MainSpinner';\nexport * from './Popup';\nexport * from './ContentText';\n","export enum PopupAction {\n SetIsOpen = 'SET_IS_OPEN',\n SetIsError = 'SET_IS_ERROR',\n SetPopupTitle = 'SET_POPUP_TITLE',\n SetPopupMessage = 'SET_POPUP_MESSAGE',\n SetButtonText = 'SET_BUTTON_TEXT'\n}\n\ninterface IPopupState {\n isOpen: boolean;\n isError: boolean;\n title: string;\n message: string;\n buttonText: string;\n}\n\nexport interface IPopupAction {\n type: PopupAction;\n payload?: string | boolean;\n callback?: () => {} | void;\n}\n\nexport const initialPopupState: IPopupState = {\n isOpen: false,\n isError: false,\n title: 'title',\n message: 'message',\n buttonText: 'Ok'\n};\n\nexport const popupReducer = (state: IPopupState, action: IPopupAction): IPopupState => {\n switch (action.type) {\n case 'SET_IS_OPEN':\n return { ...state, isOpen: action.payload as boolean };\n case 'SET_IS_ERROR':\n return { ...state, isError: action.payload as boolean };\n case 'SET_POPUP_TITLE':\n return { ...state, title: action.payload as string };\n case 'SET_POPUP_MESSAGE':\n return { ...state, message: action.payload as string };\n case 'SET_BUTTON_TEXT':\n return { ...state, buttonText: action.payload as string };\n default:\n return state;\n }\n};\n","/* eslint-disable max-len */\nimport React from 'react';\nimport uniqid from 'uniqid';\n\ninterface ICheckMark {\n backgroundColor?: string;\n foregroundColor?: string;\n}\n\nexport const IconCheckMark: React.FC = ({ backgroundColor = '#99D161', foregroundColor = '#FFF' }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","/* eslint-disable max-len */\nimport React from 'react';\nimport uniqid from 'uniqid';\n\nexport const IconExclamationMark: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n","/* eslint-disable max-len */\nimport React from 'react';\nimport uniqid from 'uniqid';\n\nexport const IconLock: React.FC<{\n className?: string;\n}> = ({ className }) => (\n \n \n \n \n \n \n \n \n \n \n);\n","/* eslint-disable max-len */\nimport React from 'react';\nimport uniqid from 'uniqid';\n\nexport const IconMessage: React.FC = () => (\n \n \n \n \n \n \n \n \n \n);\n","/* eslint-disable max-len */\nimport React from 'react';\nimport uniqid from 'uniqid';\n\nexport const IconPen = () => (\n \n \n \n \n \n \n \n \n \n);\n","/* eslint-disable max-len */\nexport { encodedIconArrow, encodedIconCheckMark, encodedIconExclamationMark, encodedIconToast } from './encoded';\nexport { IconCheckMark } from './IconCheckMark';\nexport { IconExclamationMark } from './IconExclamationMark';\nexport { IconLock } from './IconLock';\nexport { IconMessage } from './IconMessage';\nexport { IconPen } from './IconPen';\n","import styled from '@colligent/colligent-component-framework';\nimport { formatMoney } from '@colligent/colligent-component-framework/dist/formatters';\nimport React from 'react';\nimport Money from '../../model/Money';\n\nexport type Inline = { desktop: boolean; tablet: boolean; mobile: boolean } | boolean;\n\ninterface IFormattedMoneyProps {\n amount: Money;\n inline?: Inline;\n}\n\nconst Container = styled.span<{ inline: Inline }>(({ theme, inline }) => {\n const isInlineOnDesktop = typeof inline === 'object' ? inline.desktop : inline;\n const isInlineOnTablet = typeof inline === 'object' ? inline.tablet : inline;\n const isInlineOnMobile = typeof inline === 'object' ? inline.mobile : inline;\n return {\n whiteSpace: 'nowrap',\n textAlign: 'right',\n width: isInlineOnDesktop ? 'auto' : '100%',\n display: isInlineOnDesktop ? 'inline' : 'inline-block',\n [theme.breakpoints.tabletAndLower]: {\n width: isInlineOnTablet ? 'auto' : '100%',\n display: isInlineOnTablet ? 'inline' : 'inline-block'\n },\n [theme.breakpoints.mobileAndLower]: {\n width: isInlineOnMobile ? 'auto' : '100%',\n display: isInlineOnMobile ? 'inline' : 'inline-block'\n }\n };\n});\n\nexport const FormattedMoney: React.FC = ({ amount, inline = false }) => {\n if (amount !== null && typeof amount.value === 'number' && typeof amount.currency === 'string') {\n return {formatMoney(amount.value, amount.currency.toUpperCase())};\n } else {\n // TODO: Log error to Sentry here once that feature is implemented\n return null;\n }\n};\n","import styled from '@colligent/colligent-component-framework';\n\nexport const PageContainer = styled.div<{}>(({ theme }) => ({\n backgroundColor: theme.colors.white,\n padding: '10px 20px',\n [theme.breakpoints.mobileAndLower]: {\n padding: '10px 15px'\n }\n}));\n","import { H1 } from '@colligent/colligent-component-framework/dist/common/typography';\nimport React from 'react';\nimport { Toast } from '../common/Toast';\n\ninterface IPageHeaderProps {\n title?: string;\n}\n\nexport const PageHeader: React.FC = ({ title, children }) => {\n return (\n <>\n \n {title ?

{title}

: children}\n \n );\n};\n","import { PageContainer } from './PageContainer';\nimport { PageHeader } from './PageHeader';\n\nexport { PageContainer, PageHeader };\n","export * from './ContentText';\n","import React from 'react';\nimport profiles from './profiles';\n\ntype AppConfigProfile = 'fallback' | 'fi' | 'se';\n\ntype Locale = {\n label: string;\n code: string;\n};\n\ntype Address = {\n street1: string;\n postalCode: string;\n city: string;\n};\n\nexport type PaymentPlanOptions = {\n minimumAmount: number;\n totalDays: number;\n};\n\nexport type SwishPaymentOptions = {\n minimumPaymentAmount: number;\n minimumEditableAmount: number;\n minimumDifferenceAmount: number;\n};\n\nexport interface IMenuItem {\n label: string;\n url: string;\n translatable?: boolean;\n}\n\ninterface OrganizationInfo {\n legalName: string;\n organizationNumber?: string;\n address: Address;\n phone: string;\n email: string;\n customerServiceUrl?: string;\n}\n\ninterface I18n {\n defaultLocale: string;\n availableLocales: { [key: string]: Locale };\n dateFormat: string;\n}\n\ninterface PaymentOptions {\n plusGiro: object;\n paymentPlan?: PaymentPlanOptions;\n swish?: SwishPaymentOptions;\n}\n\ninterface GdprInfo {\n url: string;\n}\n\ninterface AppConfig {\n i18n: I18n;\n topBarMenuItems: IMenuItem[];\n navBarMenuItems: IMenuItem[];\n topBarProfileMenuItems: IMenuItem[];\n footerMenuItems?: IMenuItem[];\n paymentOptions: PaymentOptions;\n gdprInfo?: GdprInfo;\n organizationInfo?: OrganizationInfo;\n}\n\n// process.env.REACT_APP_CONFIG_PROFILE is read from a local .env file\nconst appConfigProfile = (process?.env?.REACT_APP_CONFIG_PROFILE ?? 'fallback') as AppConfigProfile;\nexport const appConfig: AppConfig = profiles[appConfigProfile];\n\nexport const AppConfigContext = React.createContext(appConfig);\n\nexport const AppConfigContextProvider: React.FC = ({ children }) => {\n return {children};\n};\n","import axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { useCallback, useState } from 'react';\n\nexport interface IResponse {\n data: any;\n pending: boolean;\n complete: boolean;\n error: boolean;\n status: number;\n}\n\ninterface IAxiosRequestConfigWithInterceptor extends AxiosRequestConfig {\n data?: any; // TODO: Generic type instead?\n enableInterceptors?: boolean;\n requestCompletedCallback?: TRequestCallback;\n}\n\ntype TRequestCallback = (...args: any) => {} | void;\ntype TDoRequest = (...args: any) => void;\ntype TUseEndpoint = [IResponse, TDoRequest];\n\nexport const shouldUseMockServer = (): boolean => {\n return !!process.env.REACT_APP_MOCK_API && process.env.REACT_APP_MOCK_API.toLowerCase() === 'yes';\n};\n\nconst shouldCauseLogoutRedirect = (status: number) => {\n // Path names /login and /logout are whitelisted and should not cause a logout redirect\n const isWhitelistedPathName = window.location.pathname.match(/^\\/(?:log(?:in|out))$/) !== null;\n\n return status === 401 && !isWhitelistedPathName;\n};\n\nconst isInterceptorsEnabled = (config: IAxiosRequestConfigWithInterceptor) => {\n // Success / error interceptors will be enabled by default, unless explicitly already set by the request\n return config?.enableInterceptors ?? true;\n};\n\nconst errorInterceptor = (error: AxiosError): Promise => {\n if (isInterceptorsEnabled(error.config)) {\n const status = error.response && error.response.status;\n\n if (status === 401 || status === 403) {\n if (shouldCauseLogoutRedirect(status)) {\n window.location.assign('/logout');\n }\n }\n }\n\n return Promise.reject(error);\n};\n\nconst successInterceptor = (response: AxiosResponse): AxiosResponse => {\n // if (isInterceptorsEnabled(response.config)) {\n // @TODO: Need for handling response?\n // }\n return response;\n};\n\n// Single Axios instance with default config.\n// Note! In 'production' we use the very same baseUrl\n// as the API runs on, so a value of '' is fine here.\nconst axiosInstance: AxiosInstance = axios.create({\n baseURL: shouldUseMockServer() ? 'http://localhost:3001' : '',\n timeout: process.env.NODE_ENV === 'development' ? 180000 : 30000\n});\n\n// Registers success / error interceptors for response\naxiosInstance.interceptors.response.use(\n response => successInterceptor(response),\n error => errorInterceptor(error)\n);\n\nexport const useEndpoint = (requestConfig: IAxiosRequestConfigWithInterceptor, initalData?: any): TUseEndpoint => {\n const [response, setResponse] = useState({\n data: initalData,\n pending: false,\n complete: false,\n error: false,\n status: 0\n });\n const doRequest = useCallback(() => {\n // r === response, uses functional update of state with\n // argument \"r\" so we don't have to provide \"response\" as dependency\n setResponse(r => ({ ...r, pending: true, complete: false, error: false, status: 0 }));\n\n const doEndpointRequest = async (req: IAxiosRequestConfigWithInterceptor) => {\n try {\n const res = await axiosInstance.request(req);\n\n setResponse(r => ({ ...r, data: res.data, pending: false, complete: true, status: res.status }));\n\n if (req.requestCompletedCallback) {\n req.requestCompletedCallback();\n }\n } catch (error) {\n const status = error.response && error.response.status;\n const data = error.response && error.response.data;\n\n setResponse(r => ({ ...r, pending: false, error: true, complete: true, status, data }));\n }\n };\n\n doEndpointRequest(requestConfig);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [requestConfig.url, requestConfig.data]);\n\n return [response, doRequest];\n};\n","import styled from '@colligent/colligent-component-framework';\n\nexport const ContentContainer = styled.div<{}>(({ theme }) => ({\n padding: '0 15px',\n width: 'calc(100% - 30px)',\n maxWidth: 1600,\n\n [theme.breakpoints.mobileAndLower]: {\n padding: 0,\n width: '100%'\n }\n}));\n","import React from 'react';\nimport { IPopupAction, initialPopupState } from './popup-reducer';\n\nexport const PopupContext = React.createContext({\n popup: initialPopupState,\n dispatch: (() => '') as React.Dispatch\n});\n","import styled from '@colligent/colligent-component-framework';\n\nexport const ContentText = styled.p<{\n size?: number;\n bold?: boolean;\n marginTop?: number;\n fontStyle?: string;\n}>(({ size, bold, marginTop, fontStyle }) => ({\n fontSize: size ?? 14,\n fontWeight: bold ? 900 : 300,\n margin: marginTop ? `${marginTop}px 0px 0px 0px` : 0,\n fontStyle: fontStyle ?? 'none'\n}));\n","import styled from '@colligent/colligent-component-framework';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useAuthenticated, useEndpoint } from '../../../hooks';\nimport { encodedIconToast } from '../../../icons';\n\ntype Level = 'info' | 'warning' | 'error';\n\ninterface IToastIcon {\n level: Level;\n}\n\ninterface IToast {\n enableToast: boolean;\n message: string;\n level: Level;\n requireAuthentication: boolean;\n}\n\nconst Container = styled.div<{}>(({ theme }) => ({\n backgroundColor: theme.colors.gray10,\n display: 'flex',\n borderRadius: 4,\n padding: 20,\n marginTop: 30\n}));\n\nconst ToastMessage = styled.p<{}>(({ theme }) => ({\n font: theme.fonts.desktop.small,\n margin: 0,\n marginLeft: 20,\n alignSelf: 'center',\n maxWidth: '75%',\n textAlign: 'left',\n\n [theme.breakpoints.mobileAndLower]: {\n font: theme.fonts.mobile.small\n }\n}));\n\nconst ToastIcon = styled.div(({ level, theme }) => ({\n backgroundColor: theme.colors[level],\n backgroundImage: encodedIconToast,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n backgroundSize: '8px 25px',\n borderRadius: 4,\n height: 60,\n width: 60,\n alignSelf: 'center',\n\n [theme.breakpoints.mobileAndLower]: {\n alignSelf: 'stretch',\n height: 48,\n width: 48,\n backgroundSize: '30% 30%'\n }\n}));\n\nconst TOAST_INITIAL_STATE: IToast = {\n enableToast: false,\n message: '',\n level: 'info',\n requireAuthentication: false\n};\n\nexport const Toast = () => {\n const [authenticated] = useAuthenticated();\n const [{ enableToast, message, level, requireAuthentication }, setToastInformation] = useState(TOAST_INITIAL_STATE);\n const [initialLoad, setInitialLoad] = useState(false);\n\n const [{ complete, data }, getToast] = useEndpoint({\n method: 'GET',\n url: `/api/toast`\n });\n\n const shouldShowToast = useMemo(() => enableToast && (!requireAuthentication || authenticated), [\n enableToast,\n requireAuthentication,\n authenticated\n ]);\n\n useEffect(() => {\n if (!initialLoad) {\n getToast();\n setInitialLoad(true);\n }\n }, [initialLoad, getToast]);\n\n useEffect(() => {\n if (complete && data) {\n setToastInformation({\n enableToast: data.enableToast,\n message: data.message,\n level: data.level,\n requireAuthentication: data.requireAuthentication\n });\n }\n }, [complete, data]);\n\n return shouldShowToast ? (\n \n \n {message}\n \n ) : null;\n};\n","export * from './Toast';\n","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","import fallback from './profile.fallback';\nimport fi from './profile.fi';\nimport se from './profile.se';\n\nexport default {\n fallback,\n fi,\n se\n};\n","export default {\n i18n: {\n defaultLocale: 'en',\n availableLocales: {\n en: {\n label: 'English',\n code: 'en'\n }\n },\n dateFormat: 'yyyy-MM-dd'\n },\n topBarMenuItems: [\n {\n label: 'My Pages',\n url: '/'\n }\n ],\n navBarMenuItems: [\n {\n label: 'Cases',\n url: '/cases'\n },\n {\n label: 'Messages',\n url: '/messages'\n },\n {\n label: 'My Details',\n url: '/user'\n }\n ],\n topBarProfileMenuItems: [\n {\n label: 'My Details',\n url: '/user'\n },\n {\n label: 'Logout',\n url: '/logout'\n }\n ],\n paymentOptions: {\n plusGiro: {}\n }\n};\n","export default {\n i18n: {\n defaultLocale: 'fi',\n availableLocales: {\n en: {\n label: 'English',\n code: 'en'\n },\n sv: {\n label: 'Svenska',\n code: 'sv'\n },\n fi: {\n label: 'Suomi',\n code: 'fi'\n }\n },\n dateFormat: 'd.M.yyyy'\n },\n topBarMenuItems: [\n {\n label: 'My Pages',\n url: '/'\n },\n {\n label: 'ropocapital.fi',\n url: 'https://ropocapital.fi',\n translatable: false\n }\n ],\n navBarMenuItems: [\n {\n label: 'Cases',\n url: '/cases'\n },\n {\n label: 'Messages',\n url: '/messages'\n },\n {\n label: 'My Details',\n url: '/user'\n }\n ],\n topBarProfileMenuItems: [\n {\n label: 'My Details',\n url: '/user'\n },\n {\n label: 'Logout',\n url: '/logout'\n }\n ],\n footerMenuItems: [\n {\n label: 'FAQ',\n url: 'https://www.ropocapital.fi/maksuvaatimus/usein-kysyttya/'\n },\n {\n label: 'Complaints',\n url: 'https://www.ropocapital.fi/henkilotietojen-kasittely-ja-evasteet/reklamaatiot/'\n },\n {\n label: 'PersonalData',\n url: 'https://www.ropocapital.fi/henkilotietojen-kasittely-ja-evasteet/'\n },\n {\n label: 'Cookies',\n url: 'https://www.ropocapital.fi/henkilotietojen-kasittely-ja-evasteet/evasteet/'\n }\n ],\n paymentOptions: {\n plusGiro: {},\n paymentPlan: {\n minimumAmount: 25,\n totalDays: 31\n }\n },\n gdprInfo: {\n url: 'https://www.ropocapital.fi/henkilotietojen-kasittely-ja-evasteet/'\n },\n organizationInfo: {\n legalName: 'Ropo AB',\n address: {\n street1: 'PL 79',\n postalCode: '00101',\n city: 'Helsinki'\n },\n phone: '+358 9 3158 9933',\n email: 'asiakaspalvelu@ropocapital.fi',\n customerServiceUrl: 'https://www.ropocapital.fi/asiakaspalvelu/'\n }\n};\n","export default {\n i18n: {\n defaultLocale: 'sv',\n availableLocales: {\n en: {\n label: 'English',\n code: 'en'\n },\n sv: {\n label: 'Svenska',\n code: 'sv'\n }\n },\n dateFormat: 'yyyy-MM-dd'\n },\n topBarMenuItems: [\n {\n label: 'My Pages',\n url: '/'\n },\n {\n label: 'ropo.se',\n url: 'https://ropo.se',\n translatable: false\n }\n ],\n navBarMenuItems: [\n {\n label: 'Cases',\n url: '/cases'\n },\n {\n label: 'Messages',\n url: '/messages'\n },\n {\n label: 'My Details',\n url: '/user'\n }\n ],\n topBarProfileMenuItems: [\n {\n label: 'My Details',\n url: '/user'\n },\n {\n label: 'Logout',\n url: '/logout'\n }\n ],\n footerMenuItems: [\n {\n label: 'FAQ',\n url: 'https://www.ropo.se/inkassokrav/fragor-och-svar/'\n },\n {\n label: 'Complaints',\n url: 'https://www.ropo.se/klagomal/'\n },\n {\n label: 'PersonalData',\n url: 'https://www.ropo.se/dataskydd-inkasso-och-fakturakunder/'\n },\n {\n label: 'Cookies',\n url: 'https://www.ropo.se/cookies/'\n }\n ],\n paymentOptions: {\n plusGiro: {},\n paymentPlan: {\n minimumAmount: 250,\n totalDays: 31\n },\n swish: {\n minimumPaymentAmount: 180,\n minimumEditableAmount: 230,\n minimumDifferenceAmount: 50\n }\n },\n gdprInfo: {\n url: 'https://www.ropo.se/dataskydd-inkasso-och-fakturakunder/'\n },\n organizationInfo: {\n legalName: 'Ropo AB',\n organizationNumber: '556527-5418',\n address: {\n street1: 'Box 114 82',\n postalCode: '404 30',\n city: 'Göteborg'\n },\n phone: '010 - 174 01 90',\n email: 'info.sweden@ropo.com',\n customerServiceUrl: 'https://www.ropo.se/kundservice/'\n }\n};\n","import { Popup } from '@colligent/colligent-component-framework/dist/common/components/Popup';\nimport React, { useContext } from 'react';\nimport { PopupAction, PopupContext } from '.';\n\nexport const PopupComponent: React.FC<{}> = () => {\n const { popup, dispatch } = useContext(PopupContext);\n const { buttonText, isError, isOpen, message, title } = popup;\n\n const handleOnClose = () => {\n dispatch({ type: PopupAction.SetIsOpen, payload: false });\n dispatch({ type: PopupAction.SetIsError, payload: false });\n };\n\n return (\n <>\n {isOpen ? (\n \n ) : (\n <>\n )}\n \n );\n};\n","import { AppContainer, AppMain } from '@colligent/colligent-component-framework/dist/components';\nimport { useLocalStorage } from '@colligent/use-localstorage';\nimport { ILocaleContext, LocaleContext } from '@colligent/use-translation';\nimport React, { lazy, Suspense, useContext, useEffect, useReducer, useState } from 'react';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport 'reflect-metadata'; // needed for plainToClass object conversion\nimport { DebtorAppFooter, DebtorAppHeader, ProtectedRoute } from './components';\nimport { ErrorBoundary, ErrorBoundaryUpdateAvailable, MainSpinner } from './components/common';\nimport { initialPopupState, PopupContext, popupReducer } from './components/common/Popup';\nimport { PopupComponent } from './components/common/Popup/PopupComponent';\nimport { AppConfigContext, AppConfigContextProvider } from './config';\nimport { AuthenticatedContextProvider } from './hooks';\n\n// lazy load screens to use code splitting\nconst AppRoot = lazy(() => import('./AppRoot'));\nconst Cases = lazy(() => import('./screens/cases/Cases'));\nconst Login = lazy(() => import('./screens/login/Login'));\nconst DebtorNotFound = lazy(() => import('./screens/debtor-not-found/DebtorNotFound'));\nconst Messages = lazy(() => import('./screens/messages/Messages'));\nconst UserDetails = lazy(() => import('./screens/user-details/UserDetails'));\nconst Logout = lazy(() => import('./screens/logout/Logout'));\nconst ErrorNotFound = lazy(() => import('./screens/errors/ErrorNotFound'));\n\nconst App: React.FC = () => {\n const appConfigContext = useContext(AppConfigContext);\n\n // bootstraps with activeLocale from localStorage, or fallback to defaultLocale from config\n const [activeLocale, setActiveLocale] = useLocalStorage('activeLocale', appConfigContext.i18n.defaultLocale);\n\n // locales available\n const [locales] = useState(appConfigContext.i18n.availableLocales);\n\n // defines LocaleContext based on appConfig values\n const localeContext: ILocaleContext = {\n activeLocale,\n locales,\n changeLocale: (locale: string) => {\n setActiveLocale(locale);\n }\n };\n\n useEffect(() => {\n // Updates the lang=\"en\" attribute of the tag to reflect the current locale\n window.document.documentElement.lang = activeLocale;\n }, [activeLocale]);\n\n const [popup, dispatch] = useReducer(popupReducer, initialPopupState);\n\n return (\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\nexport default App;\n","import * as Sentry from '@sentry/browser';\n\n/**\n * Sentry.io configuration and initialization.\n *\n * We use Sentry.io mainly for production environments. Events sent from localhost are blocked via\n * filters in Sentry.io but we block it here via process.env.NODE_ENV also to prevent unwanted\n * error spamming in the browser console.\n *\n * Variables \"process.env.REACT_APP_SENTRY_DSN\" and \"process.env.REACT_APP_SENTRY_RELEASE\"\n * are read from .env files local to the app root of the application. You may have to\n * create the .env file yourself.\n */\n\nclass SentryConfigError extends Error {\n constructor(configKey?: string) {\n super(`[Sentry.io] No \"${configKey}\" configured. You should add one.`);\n\n Object.setPrototypeOf(this, new.target.prototype);\n this.name = SentryConfigError.name;\n }\n}\n\n// Only initialize Sentry.io in production mode\nif (process.env.NODE_ENV === 'production') {\n try {\n if (!process.env.REACT_APP_SENTRY_DSN) {\n throw new SentryConfigError('process.env.REACT_APP_SENTRY_DSN');\n }\n if (!process.env.REACT_APP_SENTRY_RELEASE) {\n throw new SentryConfigError('process.env.REACT_APP_SENTRY_RELEASE');\n }\n\n Sentry.init({\n dsn: process.env.REACT_APP_SENTRY_DSN,\n release: process.env.REACT_APP_SENTRY_RELEASE\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(error);\n }\n}\n","/* eslint-disable no-console, no-param-reassign, no-use-before-define */\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import { ColligentComponentFramework } from '@colligent/colligent-component-framework';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport './config/SentryConfig';\nimport './index.css';\nimport * as serviceWorker from './serviceWorker';\n\nrequire('es6-object-assign/auto');\nrequire('es6-promise/auto');\nrequire('ie-array-find-polyfill');\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export * from './popup-context';\nexport * from './popup-reducer';\n","/* eslint-disable no-unused-vars */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { useLocalStorage } from '@colligent/use-localstorage';\nimport React from 'react';\nimport { useDebtor } from '.';\nimport DebtorData from '../model/DebtorData';\nimport { IResponse } from './use-endpoint';\n\ntype IUseAuthenticatedHook = () => [boolean, React.Dispatch>];\n\ninterface IAuthenticatedContext {\n authenticated: boolean;\n debtor: DebtorData;\n debtorResponse: IResponse;\n setDebtor(debtor: DebtorData): void;\n setAuthenticated(isAuthenticated: boolean): void;\n}\n\nexport const useAuthenticated: IUseAuthenticatedHook = () => {\n const [authenticated, setAuthenticated] = useLocalStorage('authenticated', false);\n\n return [authenticated, setAuthenticated];\n};\n\nconst INITIAL_AUTHENTICATED_CONTEXT: IAuthenticatedContext = {\n authenticated: false,\n debtor: new DebtorData(),\n debtorResponse: { data: {}, pending: false, complete: false, error: false, status: 0 },\n setDebtor: (debtor: DebtorData) => {},\n setAuthenticated: (isAuthenticated: boolean) => {}\n};\n\nexport const AuthenticatedContext = React.createContext(INITIAL_AUTHENTICATED_CONTEXT);\n\nexport const AuthenticatedContextProvider: React.FC = ({ children }) => {\n const [authenticated, setAuthenticated] = useAuthenticated();\n const { debtor, setDebtor, debtorResponse } = useDebtor();\n\n const authenticatedContext: IAuthenticatedContext = {\n authenticated,\n debtor,\n setDebtor,\n setAuthenticated,\n debtorResponse\n };\n\n return {children};\n};\n","import { plainToClass } from 'class-transformer';\nimport React, { useEffect, useState } from 'react';\nimport { useEndpoint } from '.';\nimport DebtorData from '../model/DebtorData';\nimport { IResponse } from './use-endpoint';\n\ntype TUseDebtorHook = () => {\n debtor: DebtorData;\n setDebtor: React.Dispatch>;\n debtorResponse: IResponse;\n};\n\nexport const useDebtor: TUseDebtorHook = () => {\n const newDebtorData = new DebtorData();\n const [debtor, setDebtor] = useState();\n const [debtorResponse, doRequest] = useEndpoint(\n {\n method: 'GET',\n url: '/api/debtor'\n },\n newDebtorData\n );\n const { data, pending, complete } = debtorResponse;\n\n useEffect(() => {\n if (!pending && !complete) {\n doRequest();\n }\n }, [doRequest, complete, pending]);\n\n useEffect(() => {\n if (complete) {\n setDebtor(plainToClass(DebtorData, data as DebtorData));\n }\n }, [complete, data]);\n\n return { debtor, setDebtor, debtorResponse };\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useInterval = (callback: () => void, delay: number) => {\n const savedCallback = useRef(() => {});\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n // eslint-disable-next-line consistent-return\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n\n if (delay !== null) {\n const id = setInterval(tick, delay);\n\n return () => clearInterval(id);\n }\n }, [delay]);\n};\n","import { LocaleContext } from '@colligent/use-translation';\nimport { useContext, useMemo } from 'react';\n\ninterface ILocalizedCountry {\n key: string;\n label: string;\n}\n\ninterface ICountriesByLanguage {\n [key: string]: ILocalizedCountry[];\n}\n\nconst countries: ICountriesByLanguage = {\n en: [\n {\n key: 'DE',\n label: 'Germany'\n },\n {\n key: 'DK',\n label: 'Denmark'\n },\n {\n key: 'EE',\n label: 'Estonia'\n },\n {\n key: 'ES',\n label: 'Spain'\n },\n {\n key: 'FI',\n label: 'Finland'\n },\n {\n key: 'GB',\n label: 'Great Britain'\n },\n {\n key: 'IS',\n label: 'Iceland'\n },\n {\n key: 'NO',\n label: 'Norway'\n },\n {\n key: 'SE',\n label: 'Sweden'\n }\n ],\n\n fi: [\n {\n key: 'DE',\n label: 'Saksa'\n },\n {\n key: 'DK',\n label: 'Tanska'\n },\n {\n key: 'EE',\n label: 'Viro'\n },\n {\n key: 'ES',\n label: 'Espanja'\n },\n {\n key: 'FI',\n label: 'Suomi'\n },\n {\n key: 'GB',\n label: 'Iso-Britannia'\n },\n {\n key: 'IS',\n label: 'Islanti'\n },\n {\n key: 'NO',\n label: 'Norja'\n },\n {\n key: 'SE',\n label: 'Ruotsi'\n }\n ],\n\n sv: [\n {\n key: 'DE',\n label: 'Tyskland'\n },\n {\n key: 'DK',\n label: 'Danmark'\n },\n {\n key: 'EE',\n label: 'Estland'\n },\n {\n key: 'ES',\n label: 'Spanien'\n },\n {\n key: 'FI',\n label: 'Finland'\n },\n {\n key: 'GB',\n label: 'Storbritannien'\n },\n {\n key: 'IS',\n label: 'Island'\n },\n {\n key: 'NO',\n label: 'Norge'\n },\n {\n key: 'SE',\n label: 'Sverige'\n }\n ]\n};\n\nexport const useLocalizedCountries = () => {\n const { activeLocale } = useContext(LocaleContext);\n\n const countryCodes = useMemo(() => {\n const codes: string[] = [];\n\n countries.en.forEach(country => {\n codes.push(country.key);\n });\n\n return codes;\n }, []);\n\n const countryList = useMemo(() => {\n return countries[activeLocale].sort((a: ILocalizedCountry, b: ILocalizedCountry) => {\n return a.label > b.label ? 1 : -1;\n }) as ILocalizedCountry[];\n }, [activeLocale]);\n\n return {\n countryCodes,\n countryList\n };\n};\n","export * from './use-authenticated';\nexport * from './use-debtor';\nexport * from './use-endpoint';\nexport * from './use-interval';\nexport * from './use-localized-countries';\n","export * from './AppConfigContext';\n","import { DebtorResponse } from '../models/api';\n\nexport default class DebtorData implements DebtorResponse {\n public personalNumber: string = '';\n\n public debtorNumber: number = 0;\n\n public firstName: string = '';\n\n public lastName: string = '';\n\n public coAddress: string = '';\n\n public address: string = '';\n\n public zipCode: string = '';\n\n public city: string = '';\n\n public country: string = '';\n\n public phoneNumber: string = '';\n\n public email: string = '';\n\n public debtorType: number = 0;\n\n public contactViaSms: boolean = false;\n\n public contactViaEmail: boolean = false;\n\n public fullName = () => this.firstName + (this.lastName ? ` ${this.lastName}` : '');\n}\n","import styled from '@colligent/colligent-component-framework';\n\nexport const DebtorAppContainer = styled.div<{}>(({ theme }) => ({\n backgroundColor: theme.colors.white,\n display: 'flex',\n flexDirection: 'column'\n}));\n","import { ILocaleResource } from '@colligent/use-translation';\n\nexport const resources: ILocaleResource = {\n en: {\n Cases: 'Cases',\n 'Logged in as': 'Logged in as',\n Messages: 'Messages',\n 'My Details': 'My Details',\n 'My Pages': 'My Pages',\n Logout: 'Log out',\n MenuOpenLabel: 'Menu',\n MenuClosedLabel: 'Close',\n ProfileMobileLabel: 'User',\n PhoneNumber: 'Phone',\n Email: 'Email',\n OrganizationNumber: 'Organization number',\n FAQ: 'FAQ',\n Complaints: 'Complaints',\n PersonalData: 'Processing of personal data',\n Cookies: 'Cookies'\n },\n fi: {\n Cases: 'Perintäasiat',\n 'Logged in as': 'Kirjautuneena sisään',\n Messages: 'Viestit',\n 'My Details': 'Omat tiedot',\n 'My Pages': 'Oma Ropo',\n Logout: 'Kirjaudu ulos',\n MenuOpenLabel: 'Valikko',\n MenuClosedLabel: 'Sulje',\n ProfileMobileLabel: 'Käyttäjä',\n PhoneNumber: 'Puhelin',\n Email: 'Sähköposti',\n OrganizationNumber: 'Y-tunnus',\n FAQ: 'Usein kysyttyä',\n Complaints: 'Reklamaatiot',\n PersonalData: 'Henkilötietojen käsittely',\n Cookies: 'Evästeet'\n },\n sv: {\n Cases: 'Ärenden',\n 'Logged in as': 'Inloggad som',\n Messages: 'Meddelanden',\n 'My Details': 'Mina uppgifter',\n 'My Pages': 'Mina sidor',\n Logout: 'Logga ut',\n MenuOpenLabel: 'Meny',\n MenuClosedLabel: 'Stäng',\n ProfileMobileLabel: 'Användare',\n PhoneNumber: 'Telefon',\n Email: 'E-post',\n OrganizationNumber: 'Organisationsnummer',\n FAQ: 'Vanliga frågor',\n Complaints: 'Klagomål',\n PersonalData: 'Dataskydd',\n Cookies: 'Om cookies'\n }\n};\n","import styled from '@colligent/colligent-component-framework';\nimport { useTranslation } from '@colligent/use-translation';\nimport React, { useContext } from 'react';\nimport { AppConfigContext, IMenuItem } from '../config';\nimport { resources } from './resources.i18n';\n\nconst Footer = styled.section<{}>(({ theme }) => ({\n flexGrow: 5,\n display: 'flex',\n alignItems: 'center',\n borderLeft: `1px solid ${theme.colors.white}`,\n minHeight: 200,\n margin: '20px 20px 20px 0',\n paddingLeft: 30,\n\n [theme.breakpoints.mobileAndLower]: {\n borderLeft: 'none',\n borderTop: `1px solid ${theme.colors.white}`,\n margin: '20px 20px 30px 20px',\n minHeight: 'unset',\n paddingLeft: 0\n },\n\n a: {\n borderBottom: `1px solid ${theme.colors.white}`,\n textDecoration: 'none'\n },\n\n '& ul': {\n listStyle: 'none',\n margin: '0',\n paddingLeft: 0,\n\n [theme.breakpoints.mobileAndLower]: {\n marginTop: 30\n },\n\n '& li': {\n marginBottom: 10,\n\n '&:last-of-type': {\n marginBottom: 0\n }\n }\n }\n}));\n\nconst FooterMenuListItems: React.FC = ({ label, url }) => {\n const t = useTranslation(resources);\n\n return (\n
  • \n {t(label)}\n
  • \n );\n};\n\nexport const FooterMenu: React.FC = () => {\n const { footerMenuItems } = useContext(AppConfigContext);\n\n return (\n
    \n {footerMenuItems ? (\n
      \n {footerMenuItems.map((item: IMenuItem) => (\n \n ))}\n
    \n ) : null}\n
    \n );\n};\n","/* eslint-disable max-len */\nimport styled from '@colligent/colligent-component-framework';\nimport { useTranslation } from '@colligent/use-translation';\nimport React, { useContext } from 'react';\nimport { AppConfigContext } from '../config';\nimport { FooterMenu } from './FooterMenu';\nimport { resources } from './resources.i18n';\nimport ropoLogo from '../logos/Ropo_logo4_RGB_white_103x40.png';\n\nconst Footer = styled.footer<{}>(({ theme }) => ({\n color: theme.colors.white,\n display: 'flex',\n flexDirection: 'column',\n font: theme.fonts.desktop.small,\n backgroundColor: theme.colors.deepBlue,\n height: 'auto',\n position: 'absolute',\n bottom: 0,\n width: '100%',\n\n [theme.breakpoints.mobileAndLower]: {\n height: 'auto',\n position: 'static',\n bottom: 'unset'\n },\n\n '& a': {\n color: theme.colors.white\n }\n}));\n\nconst FooterContent = styled.section<{}>(({ theme }) => ({\n flex: 'auto',\n display: 'flex',\n flexDirection: 'row',\n\n [theme.breakpoints.mobileAndLower]: {\n flexDirection: 'column'\n }\n}));\n\nconst Copyright = styled.div<{}>(({ theme }) => ({\n flex: 'auto',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: theme.colors.deepBlue,\n color: theme.colors.white,\n fontSize: 12,\n minHeight: 30,\n lineHeight: 1,\n width: '100%'\n}));\n\nconst RopoLogo: React.FC<{ className?: string }> = ({ className }) => {\n return \"Ropo\";\n};\n\nconst Logo = styled(RopoLogo)({\n marginLeft: 20\n});\n\nconst LegalNameAndAddress = styled.address<{}>(({ theme }) => ({\n color: theme.colors.white,\n flex: 1,\n fontStyle: 'normal',\n margin: '15px 30px 0 20px',\n minWidth: 100,\n\n [theme.breakpoints.mobileAndLower]: {\n minWidth: '70%'\n },\n\n '& > strong': {\n display: 'block'\n }\n}));\n\nconst PhoneAndEmail = styled.aside<{}>(({ theme }) => ({\n flex: 1,\n margin: '15px 30px 0 20px',\n font: theme.fonts.desktop.small,\n minWidth: 150,\n\n [theme.breakpoints.mobileAndLower]: {\n minWidth: 'unset',\n margin: '15px 20px 0 20px'\n },\n\n '& > strong': {\n display: 'block'\n },\n\n '& a': {\n textDecoration: 'none'\n }\n}));\n\nconst OrganizationInfo = styled.section<{}>(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '460px',\n minWidth: '130px',\n margin: '20px 0',\n paddingRight: 30,\n\n [theme.breakpoints.mobileAndLower]: {\n margin: '20px 0 0 0',\n paddingRight: 0\n },\n\n '& > h1': {\n margin: 0\n },\n\n '& > div ': {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap'\n }\n}));\n\nconst NoWrap = styled.span<{}>(() => ({\n whiteSpace: 'nowrap'\n}));\n\ninterface ILegalName {\n legalName?: string;\n}\n\ninterface IOrganizationNumber {\n organizationNumber?: string;\n}\n\ninterface IPhoneNumber {\n phoneNumber: string;\n}\n\ninterface IEmailAddress {\n emailAddress: string;\n}\n\ninterface IAddress {\n street1: string;\n street2?: string;\n postalCode: string;\n city: string;\n country?: string;\n}\n\ninterface IOrganizationInfo {\n legalName?: string;\n organizationNumber?: string;\n address?: IAddress;\n phone?: string;\n email?: string;\n}\n\ninterface IPostalAddress {\n address?: IAddress;\n}\n\nconst LegalName: React.FC = ({ legalName }) => {\n return legalName ? (\n \n {legalName}\n \n ) : null;\n};\n\nconst OrganizationNumber: React.FC = ({ organizationNumber }) => {\n const t = useTranslation(resources);\n\n return organizationNumber ? (\n <>\n \n {`${t('OrganizationNumber')}:`}\n \n
    \n {organizationNumber}\n
    \n
    \n \n ) : null;\n};\n\nconst PhoneNumber: React.FC = ({ phoneNumber }) => {\n const t = useTranslation(resources);\n\n return phoneNumber ? (\n <>\n {`${t('PhoneNumber')}:`}\n {phoneNumber}\n
    \n
    \n \n ) : null;\n};\n\nconst EmailAddress: React.FC = ({ emailAddress }) => {\n const t = useTranslation(resources);\n\n return emailAddress ? (\n <>\n {`${t('Email')}:`}\n {emailAddress}\n
    \n
    \n \n ) : null;\n};\n\nconst PostalAddress: React.FC = ({ address }) => {\n return address ? (\n <>\n \n
    \n {address.street1}\n
    \n {address.street2 && (\n <>\n {address.street2}\n
    \n \n )}\n {`${address.postalCode} ${address.city}`}\n {address.country && (\n <>\n
    \n {address.country}\n \n )}\n \n ) : null;\n};\n\nconst getCurrentYear = () => new Date().getFullYear();\n\nexport const DebtorAppFooter: React.FC = () => {\n const { organizationInfo } = useContext(AppConfigContext);\n\n return (\n
    \n \n \n

    \n \n

    \n {organizationInfo ? (\n
    \n \n \n \n \n \n \n {organizationInfo.phone && }\n {organizationInfo.email && }\n \n
    \n ) : null}\n
    \n \n
    \n {`Copyright 2015 - ${getCurrentYear()} Ropo`}\n
    \n );\n};\n","import React from 'react';\n\ninterface IFlag {\n locale: string;\n}\n\nexport const Flag: React.FC = ({ locale }) => {\n switch (locale) {\n case 'sv':\n return ;\n case 'fi':\n return ;\n default:\n return ;\n }\n};\n\nconst SvFlag = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nconst FiFlag = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport const EnFlag = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n","/* eslint-disable max-len */\nimport styled from '@colligent/colligent-component-framework';\nimport { Button } from '@colligent/colligent-component-framework/dist/common/components/Button';\nimport { Cover } from '@colligent/colligent-component-framework/dist/components/Cover';\nimport { createEncodedBgSvg } from '@colligent/colligent-component-framework/dist/formatters';\nimport { hasClassInTree } from '@colligent/colligent-component-framework/dist/helpers/dom-helpers';\nimport { LocaleContext } from '@colligent/use-translation';\nimport { lighten } from 'polished';\nimport React, { useContext, useEffect, useState } from 'react';\nimport uniqid from 'uniqid';\nimport { Flag } from './LangFlagIcons';\n\nconst TOPBAR_LANG_CLASS = 'topbar-lang-menu';\n\nconst activeCheckMarkIcon = createEncodedBgSvg(`\n\n \n \n \n \n \n \n \n \n\n`);\n\nconst LangContainer = styled.div<{ isOpen: boolean }>(({ theme, isOpen }) => ({\n alignItems: 'center',\n backgroundColor: isOpen ? lighten(0.05, theme.colors.deepBlue) : theme.colors.deepBlue,\n color: theme.colors.white,\n display: 'inline-flex',\n flexBasis: 'min-content',\n flexFlow: 'row',\n marginLeft: 'auto',\n fontFamily: theme.fontStack.text,\n height: 44,\n justifyContent: 'center',\n minWidth: 55,\n\n ':hover': {\n cursor: 'pointer'\n }\n}));\n\nconst InnerContainer = styled.div<{}>(({ theme }) => ({\n display: 'inline-flex',\n flexDirection: 'column',\n font: theme.fonts.mobile.medium,\n textAlign: 'center',\n justifyContent: 'center',\n height: '100%',\n padding: '0 15px 0 15px',\n zIndex: 100,\n backgroundColor: lighten(0.05, theme.colors.deepBlue)\n}));\n\nconst ActiveLocale = styled('span')<{}>(({ theme }) => ({\n fontFamily: theme.fontStack.textHeavy,\n textTransform: 'capitalize'\n}));\n\nconst List = styled.ul<{ isOpen: boolean }>(({ theme, isOpen }) => ({\n display: 'flex',\n listStyle: 'none',\n position: 'absolute',\n width: 350,\n padding: 0,\n backgroundColor: lighten(0.05, theme.colors.deepBlue),\n zIndex: 101,\n flexDirection: 'column',\n margin: 0,\n maxHeight: isOpen ? 500 : 0,\n font: theme.fonts.desktop.large,\n overflow: 'hidden',\n transition: 'max-height .35s cubic-bezier(.8,.2,.2,.8)',\n right: 0,\n top: 44,\n\n '&>li:last-of-type': {\n marginBottom: 30\n },\n\n [theme.breakpoints.mobileAndLower]: {\n width: '100%'\n }\n}));\n\nconst ListItem = styled.li<{}>(({ theme }) => ({\n font: theme.fonts.desktop.large,\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n margin: '30px auto 0 auto',\n minWidth: 170,\n\n '&.active': {\n backgroundImage: activeCheckMarkIcon,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n backgroundPositionX: 15,\n backgroundPositionY: 8,\n backgroundSize: 25\n },\n\n '& > button:hover': {\n backgroundColor: 'transparent'\n }\n}));\n\nconst MenuLangIcon = styled.span<{}>(() => ({\n minWidth: 20,\n minHeight: 10,\n position: 'absolute',\n right: 15,\n top: 10\n}));\n\ninterface ILocaleProps {\n label: string;\n code: string;\n}\n\ninterface IAvailableLocales {\n [key: string]: ILocaleProps;\n}\n\nexport interface ILangMenuProps {\n readonly menuItems?: IAvailableLocales;\n}\n\nlet isMenuOpen = false;\n\nconst MenuItem: React.FC = ({ label, code }) => {\n const { activeLocale, changeLocale } = useContext(LocaleContext);\n\n const handleOnClick = () => {\n isMenuOpen = true;\n\n if (changeLocale) {\n changeLocale(code);\n }\n };\n\n return (\n \n \n \n );\n};\n\nexport const MenuLanguages: React.FC = ({ menuItems }) => {\n const [isOpen, setIsOpen] = useState(false);\n const { activeLocale } = useContext(LocaleContext);\n\n useEffect(() => {\n const pageClick = (e: any) => {\n const LangIsClicked = hasClassInTree(e.target, TOPBAR_LANG_CLASS);\n const openTheMenu = LangIsClicked && !isOpen;\n setIsOpen(openTheMenu);\n };\n\n document.addEventListener('click', pageClick, false);\n\n return function cleanup() {\n if (isMenuOpen) {\n isMenuOpen = false;\n setIsOpen(isMenuOpen);\n }\n document.removeEventListener('click', pageClick, false);\n };\n });\n\n const handleOnClick = () => {\n setIsOpen(!isOpen);\n };\n\n return (\n \n \n {activeLocale}\n \n \n \n {menuItems &&\n Object.keys(menuItems).map(item => (\n \n ))}\n \n \n \n );\n};\n","import styled from '@colligent/colligent-component-framework';\nimport { Logo, NavBar, NavBarMenu } from '@colligent/colligent-component-framework/dist/components/AppHeader/NavBar';\nimport { TopBar, TopBarProfile } from '@colligent/colligent-component-framework/dist/components/AppHeader/TopBar';\nimport { TopBarLogout } from '@colligent/colligent-component-framework/dist/components/AppHeader/TopBar/TopBarLogout';\nimport { TopBarMenu } from '@colligent/colligent-component-framework/dist/components/AppHeader/TopBar/TopBarMenu';\nimport { Cover } from '@colligent/colligent-component-framework/dist/components/Cover';\nimport { LocaleContext, useTranslation } from '@colligent/use-translation';\nimport React, { useCallback, useContext, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { AppConfigContext, IMenuItem } from '../config';\nimport { AuthenticatedContext } from '../hooks';\nimport { MenuLanguages } from './MenuLanguages';\nimport { resources } from './resources.i18n';\nimport ropoLogo from '../logos/Ropo_logo3_RGB_black_177x36.png';\nimport DebtorData from '../model/DebtorData';\n\nconst Container = styled.header({});\n\nconst useMemoizedMenuItems = (menuItems: IMenuItem[]) => {\n const t = useTranslation(resources);\n const translateLabels = useCallback(\n (items: IMenuItem[]) => {\n return items.map(item => ({\n ...item,\n label: typeof item.translatable === 'undefined' || item.translatable ? t(item.label) : item.label\n }));\n },\n [t]\n );\n\n return translateLabels(menuItems);\n};\n\nconst logoElement = \"Ropo\";\n\nexport const DebtorAppHeader: React.FC = () => {\n const { locales } = useContext(LocaleContext);\n const { authenticated, debtor, setAuthenticated, setDebtor } = useContext(AuthenticatedContext);\n const { topBarMenuItems, navBarMenuItems, topBarProfileMenuItems } = useContext(AppConfigContext);\n const memoizedTopBarMenuItems = useMemoizedMenuItems(topBarMenuItems);\n const memoizedTopBarProfileMenuItems = useMemoizedMenuItems(topBarProfileMenuItems);\n const memoizedNavBarMenuItems = useMemoizedMenuItems(navBarMenuItems);\n const t = useTranslation(resources);\n const [isCoverOpen, setIsCoverOpen] = useState(false);\n\n const location = useLocation();\n\n const handleLogout = () => {\n // An explicit logout action by the user.\n // Therefore its perfectly safe to deauthentiticate the user here.\n setAuthenticated(false);\n setDebtor(new DebtorData());\n window.location.href = '/api/logout';\n };\n\n // Determine if the logout button should be shown based on authenticated state and current URI\n const shouldShowLogoutButton = authenticated || location.pathname === '/debtor-not-found';\n\n return (\n \n \n \n \n {authenticated && debtor && (\n <>\n \n \n )}\n {/* Conditionally render the logout button */}\n {shouldShowLogoutButton && }\n {/* \n \n */}\n \n \n \n {authenticated && (\n \n )}\n \n \n \n );\n};\n","import styled from '@colligent/colligent-component-framework';\nimport React from 'react';\n\nconst Main = styled.main({});\n\nexport const DebtorAppMain: React.FC = ({ children }) => {\n return
    {children}
    ;\n};\n","import React, { useContext } from 'react';\nimport { RouteProps, useHistory, useRouteMatch } from 'react-router-dom';\nimport { AuthenticatedContext } from '../../hooks';\n\ninterface IProtectedRoute extends RouteProps {\n component: React.ComponentType;\n rest?: any;\n}\n\nexport const ProtectedRoute: React.FC = ({ component: Component, ...rest }) => {\n const { authenticated } = useContext(AuthenticatedContext);\n const match = useRouteMatch();\n const history = useHistory();\n console.log('ProtectedRoute: match', match);\n if (!authenticated) {\n history.push(`/login`);\n\n return null;\n }\n\n return ;\n};\n","import { ContentContainer } from './ContentContainer';\nimport { DebtorAppContainer } from './DebtorAppContainer';\nimport { DebtorAppFooter } from './DebtorAppFooter';\nimport { DebtorAppHeader } from './DebtorAppHeader';\nimport { DebtorAppMain } from './DebtorAppMain';\nimport { ProtectedRoute } from './ProtectedRoute';\n\nexport { ContentContainer, DebtorAppContainer, DebtorAppFooter, DebtorAppHeader, DebtorAppMain, ProtectedRoute };\n","/* eslint-disable max-len */\nimport React from 'react';\nimport uniqid from 'uniqid';\n\nexport interface IIconArrow {\n color: string;\n}\n\nexport const IconArrow: React.FC = ({ color }) => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n","/* eslint-disable max-len */\nimport React from 'react';\nimport uniqid from 'uniqid';\n\nexport const IconToast: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n","import { createEncodedBgSvg } from '@colligent/colligent-component-framework/dist/formatters';\nimport React from 'react';\nimport ReactDomServer from 'react-dom/server';\nimport { IconArrow } from '../IconArrow';\nimport { IconCheckMark } from '../IconCheckMark';\nimport { IconExclamationMark } from '../IconExclamationMark';\nimport { IconToast } from '../IconToast';\n\nexport const encodedIconArrow = (color: string) =>\n createEncodedBgSvg(ReactDomServer.renderToString());\n\nexport const encodedIconCheckMark = createEncodedBgSvg(ReactDomServer.renderToString());\n\nexport const encodedIconExclamationMark = createEncodedBgSvg(ReactDomServer.renderToString());\n\nexport const encodedIconToast = createEncodedBgSvg(ReactDomServer.renderToString());\n"],"sourceRoot":""}