{"version":3,"sources":["serviceWorker.ts","browserHistory.ts","shared/components/PageError/index.tsx","shared/constants/authConstants.ts","shared/constants/localStorageVariables.ts","axiosConfig.ts","shared/services/authService.ts","Auth/AuthContext.tsx","Auth/Callback.tsx","shared/models/BBL.ts","Auth/Logout.tsx","Auth/SilentRenew.tsx","App/Header/styles.ts","App/Header/User/index.tsx","shared/store/user/selectors.ts","shared/store/user/actionTypes.ts","App/Header/index.tsx","shared/hooks/useBroadcast.tsx","shared/constants/broadcastChannels.ts","App/Footer/styles.ts","App/Footer/index.tsx","shared/store/bbl/selectors.ts","shared/constants/customtexts.ts","shared/store/customtexts/selectors.ts","Modules/Home/Header/styles.ts","Modules/Home/Header/index.tsx","Modules/Home/ProductCard/ProductCardSkeleton/styles.ts","Modules/Home/ProductCard/ProductCardSkeleton/index.tsx","Modules/Home/ProductCard/styles.ts","Modules/Home/ProductCard/index.tsx","Modules/Home/styles.ts","Modules/Home/index.tsx","Auth/AfterLogout.tsx","shared/components/LoaderWrapper/styles.ts","Auth/Cleanup.tsx","shared/api/bbl.api.ts","Modules/NoAccess/styles.ts","Modules/NoAccess/NoAccessInformation/index.tsx","Modules/NoAccess/NoAccessActions/styles.ts","Modules/NoAccess/NoAccessActions/index.tsx","Modules/NoAccess/index.tsx","shared/utils/urlParams.ts","App/Routes.tsx","App/GlobalStyles.tsx","shared/utils/theme.ts","shared/store/bbl/actionTypes.ts","shared/store/customtexts/actionTypes.ts","App/index.tsx","shared/api/user.api.ts","shared/store/user/sagas.ts","shared/store/user/reducer.ts","shared/store/bbl/sagas.ts","shared/store/bbl/reducer.ts","shared/api/customtext.api.ts","shared/store/customtexts/sagas.ts","shared/store/customtexts/reducer.ts","shared/store/sagas.ts","shared/store/store.ts","index.tsx","shared/constants/styles.ts","shared/services/telemetryService.ts","shared/components/Layout/index.tsx"],"names":["isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","console","log","onUpdate","onSuccess","catch","error","history","createBrowserHistory","basename","Wrapper","styled","div","PageError","level","bblCode","bblidUrl","urls","bblidBaseUrl","appUrl","origin","client","clientConfigs","find","x","BblCode","toLowerCase","IDENTITY_CONFIG","authority","client_id","ClientId","redirect_uri","silent_redirect_uri","post_logout_redirect_uri","response_type","automaticSilentRenew","loadUserInfo","scope","response_mode","revokeAccessTokenOnSignout","client_secret","includeIdTokenInSilentRenew","LOCALSTORAGE_IDENTITY_PREFIX","setAxiosLoggedInDefaults","fromStorage","localStorage","getItem","oidcStorage","JSON","parse","axios","defaults","baseURL","api","url","headers","post","common","subscription","access_token","AuthService","UserManager","signinRedirect","setItem","pathname","search","signinSilent","err","signinSilentCallback","createSigninRequest","signinRedirectCallback","e","redirectUri","replace","getUser","a","getToken","user","parseJwt","token","base64","split","atob","navigateToScreen","isAuthenticated","expires","expires_at","now","Date","getTime","logout","signoutRedirect","id_token_hint","clearStaleState","signoutRedirectCallback","removeItem","baseUrl","cleanup","Object","entries","forEach","key","includes","this","userStore","WebStorageStateStore","prefix","store","Log","logger","ERROR","events","addUserLoaded","href","indexOf","addAccessTokenExpired","addSilentRenewError","AuthContext","React","createContext","undefined","AuthProvider","props","Provider","value","children","useAuthContext","context","useContext","Error","PortalTypesEnum","LoaderWrapper","Callback","authContext","useEffect","Logout","bbl","SilentRenew","header","backgroundStyle","css","Content","styles","maxWidth","RightWrapper","User","onLogout","onGoToProfile","firstname","name","surname","email","trackingName","outline","onClick","USER_FETCH_REQUESTED","USER_FETCH_SUCCESS","USER_FETCH_FAILED","Header","brandingcode","useHistory","useState","top","isTop","data","useSelector","dispatch","useDispatch","val","options","setState","channel","useRef","listeners","BroadcastChannel","current","onmessage","subscribe","listener","close","send","postMessage","callback","push","splice","useBroadcast","sub","isLoggedOut","removeUser","profile","navneregisterid","type","payload","document","addEventListener","pageYOffset","passive","nostyle","height","style","cursor","alt","src","themesUrl","toLocaleLowerCase","minSideUrl","beforeIcon","small","semibold","FooterWrapper","footer","CustomLink","Link","LandingFooter","phone","settings","phoneNumberForGeneralQuestions","emailForGeneralQuestions","currentYear","getFullYear","getFormatedPhone","commonPreemptionInformationUrl","preemptionInformationUrl","becomeAMemberUrl","bblUrl","ifexists","getUrlWithProtocol","shortName","color","customPrivacyStatementUrl","getBbl","getBblSettings","isPortalActive","applications","findIndex","Portal","isMinSideActive","MinSide","isForkjopActive","Forkjop","CUSTOMTEXT_HEADER","CUSTOMTEXT_FORKJOP","CUSTOMTEXT_INGRESS","CUSTOMTEXT_MINSIDE","CUSTOMTEXT_PORTAL","getCustomtextHeader","customtexts","fieldName","text","getCustomtextIngress","getCustomtextPortal","getCustomtextMinside","getCustomtextForkjop","HeaderWrapper","IngressWrapper","HomeHeader","customtextHeader","customtextIngress","width","ProductCardSkeleton","TextWrapper","IconWrapper","ContentWrapper","BorderRadiusStyle","ProductCard","headerIcon","headerText","theme","useTheme","largePadding","shadow","withhover","paragraph","primary","CardsWrapper","Home","preemptionBblCode","customtextForkjop","customtextPortal","customtextMinside","hasPortal","hasMinSide","hasForkjop","bblSettings","size","secondaryDarkText","forkjopUrl","newPortal","portalUrl","AfterLogout","Cleanup","get","getBblApplications","NoAccessInformation","fullName","ButtonWrapper","NoAccessActions","returnUrl","idp","isRequestLoading","isRequestSent","onSendRequest","loading","disabled","highlight","bblidClientUrl","subtle","NoAccess","setIdp","setFullName","requestLoading","setRequestLoading","requestMessage","setRequestMessage","setError","paramname","params","URLSearchParams","getParamBothLowerUppercase","getIdp","res","full_name","brandingCode","success","onClose","bblidApiBaseUrl","finally","ApplicationLoading","Layout","danger","TelemetryProvider","lazy","PrivacyPage","main","Routes","isReady","setIsReady","gtmCodes","gtm","bblPivotalGtmCode","siteName","appName","analyticsSettings","setAnalyticsSettings","gtmId","setTimeout","fallback","instrumentationKey","ai","after","getAppInsights","path","component","render","exact","GlobalStyles","getTheme","code","transformRequest","BBL_FETCH_REQUESTED","BBL_FETCH_SUCCESS","BBL_FETCH_FAILED","CUSTOMTEXTS_FETCH_REQUESTED","CUSTOMTEXTS_FETCH_SUCCESS","CUSTOMTEXTS_FETCH_FAILED","App","setTheme","favicon","querySelector","setFavicon","ApplicationLoaded","defaultTextColor","request","method","getUserRoles","fetchUser","userSaga","all","call","userRoles","put","roles","takeEvery","initialState","reducer","action","fetchBbl","bblSaga","bblApplications","getCustomtext","id","fetchCustomtexts","customtextsSaga","ids","map","response","c","rootSaga","root","fork","rootReducer","combineReducers","UserReducer","BblReducer","CustomtextsReducer","sagaMiddleware","createSagaMiddleware","composeEnhancer","compose","createStore","applyMiddleware","run","apiProxyUrl","ReactDOM","getElementById","URL","process","fetch","contentType","status","ready","unregister","reload","checkValidServiceWorker","reactPlugin","ReactPlugin","appInsights","initialize","browserHistory","ApplicationInsights","disableFetchTracking","enableCorsCorrelation","extensions","extensionConfig","identifier","loadAppInsights","addTelemetryInitializer","envelope","tags","role","fullsize","bp"],"mappings":"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","file":"static/js/main.e6a144a3.chunk.js","sourcesContent":["// 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 https://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.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void\n onUpdate?: (registration: ServiceWorkerRegistration) => void\n}\n\nexport function register(config?: 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 = `${window.location.origin}/sw.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 https://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: string, config?: 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 https://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: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\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 (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\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(\n 'No internet connection found. App is running in offline mode.'\n )\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 { createBrowserHistory } from 'history'\n\nconst history = createBrowserHistory({ basename: '/' })\n\nexport default history\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport { IllustrationError, Header } from '@bbl-digital/snorre'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n padding: 2em 0;\n & > div {\n height: 210px;\n }\n & > h4 {\n margin: 1em 0;\n }\n`\n\nconst PageError: React.FC = () => {\n return (\n \n \n
Det skjedde en feil
\n
\n )\n}\n\nexport default PageError\n","const bblCode = window.config?.bblCode\nconst bblidUrl = window.config?.urls.bblidBaseUrl + 'host/core'\nconst appUrl = window.location.origin\n\nconst client = window.clientConfigs?.find((x) => {\n return x.BblCode.toLowerCase() === bblCode?.toLowerCase()\n})\n\nexport const IDENTITY_CONFIG = {\n authority: bblidUrl,\n client_id: client?.ClientId,\n redirect_uri: appUrl + '/signin-oidc',\n silent_redirect_uri: appUrl + '/silentredirect', // COMMENTED OUT UNTIL WE GOT SUPPORT FOR SILENT REDIRECT\n post_logout_redirect_uri: appUrl + '/afterlogout',\n // audience: process.env.REACT_APP_AUDIENCE,\n response_type: 'code',\n automaticSilentRenew: true,\n loadUserInfo: false,\n scope: 'openid api profile offline_access',\n response_mode: 'query',\n revokeAccessTokenOnSignout: true,\n client_secret: 'xWUSy5y3TRdte9jp',\n includeIdTokenInSilentRenew: true,\n}\n","export const LOCALSTORAGE_IDENTITY_PREFIX = 'ngtlanding.'\nexport const LOCALSTORAGE_IDENTITY_MS = 'ngtms.'\nexport const LOCALSTORAGE_IDENTITY_PORTAL = 'ngtportal.'\nexport const LOCALSTORAGE_IDENTITY_PREEMPTION = 'ngtpreemption.'\n","import axios from 'axios'\nimport { IDENTITY_CONFIG } from 'shared/constants/authConstants'\nimport { LOCALSTORAGE_IDENTITY_PREFIX } from 'shared/constants/localStorageVariables'\n\nexport const setAxiosDefaults = () => {\n axios.defaults.baseURL = window.config.api.apiProxyUrl\n\n axios.defaults.headers.common['bblCode'] = window.config.bblCode\n axios.defaults.headers.common['APIM-BBLCode'] = window.config.bblCode\n}\n\nexport const setAxiosLoggedInDefaults = () => {\n const fromStorage = localStorage.getItem(\n `${LOCALSTORAGE_IDENTITY_PREFIX}user:${IDENTITY_CONFIG.authority}:${IDENTITY_CONFIG.client_id}`\n )\n const oidcStorage = JSON.parse(fromStorage ? fromStorage : '{}')\n\n axios.defaults.baseURL = window.config.api.url\n axios.defaults.headers.post['x-api-version'] = axios.defaults.headers.common[\n 'Ocp-Apim-Subscription-Key'\n ] = window.config.api.subscription\n axios.defaults.headers.common['APIM-BBLCode'] = window.config.bblCode\n axios.defaults.headers.common['Authorization'] =\n 'Bearer ' + oidcStorage.access_token\n}\n","import axios from 'axios'\nimport { setAxiosLoggedInDefaults } from 'axiosConfig'\nimport { UserManager, WebStorageStateStore, Log } from 'oidc-client'\nimport { IDENTITY_CONFIG } from 'shared/constants/authConstants'\nimport {\n LOCALSTORAGE_IDENTITY_PREFIX,\n LOCALSTORAGE_IDENTITY_MS,\n LOCALSTORAGE_IDENTITY_PORTAL,\n LOCALSTORAGE_IDENTITY_PREEMPTION,\n} from 'shared/constants/localStorageVariables'\n\nexport default class AuthService {\n UserManager: UserManager\n\n constructor() {\n this.UserManager = new UserManager({\n ...IDENTITY_CONFIG,\n userStore: new WebStorageStateStore({\n prefix: LOCALSTORAGE_IDENTITY_PREFIX,\n store: window.localStorage,\n }),\n })\n // Logger\n Log.logger = console\n Log.level = Log.ERROR\n\n /**\n * Event user loaded\n */\n this.UserManager.events.addUserLoaded((user) => {\n if (window.location.href.indexOf('signin-oidc') !== -1) {\n this.navigateToScreen()\n }\n })\n\n /**\n * Event token expired\n */\n this.UserManager.events.addAccessTokenExpired(() => {\n this.signinSilent()\n })\n\n /**\n * Event silent renew error\n */\n this.UserManager.events.addSilentRenewError((e) => {\n console.log('addSilentRenewError', e)\n })\n\n /**\n * Init, if not authenticated try signin silent\n */\n if (\n window.location.pathname.indexOf('silentredirect') === -1 &&\n window.location.pathname.indexOf('signin-oidc') === -1 &&\n !this.isAuthenticated()\n ) {\n this.signinSilent()\n }\n }\n\n signinRedirect = () => {\n localStorage.setItem(\n 'redirectUri',\n window.location.pathname + window.location.search\n )\n this.UserManager.signinRedirect({})\n }\n\n signinSilent = () => {\n this.UserManager.signinSilent().catch((err) => {})\n }\n\n signinSilentCallback = () => {\n this.UserManager.signinSilentCallback()\n }\n\n createSigninRequest = () => {\n return this.UserManager.createSigninRequest()\n }\n\n signinRedirectCallback = () => {\n this.UserManager.signinRedirectCallback()\n .then((e) => {\n const redirectUri = localStorage.getItem('redirectUri')\n window.location.replace(redirectUri ? redirectUri : '/')\n })\n .catch(() => {\n const redirectUri = localStorage.getItem('redirectUri')\n window.location.replace(redirectUri ? redirectUri : '/')\n })\n }\n\n getUser = async () => {\n axios.defaults.headers.common['Authorization'] = 'Bearer ' + this.getToken()\n const user = await this.UserManager.getUser()\n if (!user) {\n return await this.UserManager.signinRedirectCallback()\n } else {\n setAxiosLoggedInDefaults()\n }\n return user\n }\n\n parseJwt = (token: string) => {\n const base64Url = token.split('.')[1]\n const base64 = base64Url.replace('-', '+').replace('_', '/')\n return JSON.parse(window.atob(base64))\n }\n\n navigateToScreen = () => {\n window.location.replace('')\n }\n\n isAuthenticated = () => {\n const fromStorage = localStorage.getItem(\n `${LOCALSTORAGE_IDENTITY_PREFIX}user:${IDENTITY_CONFIG.authority}:${IDENTITY_CONFIG.client_id}`\n )\n const oidcStorage = JSON.parse(fromStorage ? fromStorage : '{}')\n const expires = oidcStorage.expires_at * 1000\n const now = new Date().getTime()\n return !!oidcStorage && !!oidcStorage.access_token && expires > now\n }\n\n getToken = () => {\n const fromStorage = localStorage.getItem(\n `${LOCALSTORAGE_IDENTITY_PREFIX}user:${IDENTITY_CONFIG.authority}:${IDENTITY_CONFIG.client_id}`\n )\n const oidcStorage = JSON.parse(fromStorage ? fromStorage : '{}')\n return oidcStorage.access_token\n }\n\n logout = (bblCode: string) => {\n localStorage.setItem('bblCode', bblCode)\n\n this.UserManager.signoutRedirect({\n id_token_hint: localStorage.getItem('id_token'),\n })\n this.UserManager.clearStaleState()\n }\n\n signoutRedirectCallback = (url?: string) => {\n this.UserManager.signoutRedirectCallback().then(() => {\n localStorage.removeItem(\n `${LOCALSTORAGE_IDENTITY_PREFIX}user:${IDENTITY_CONFIG.authority}:${IDENTITY_CONFIG.client_id}`\n )\n if (url) {\n window.location.replace(url)\n } else {\n window.location.replace(window.config.baseUrl + window.config.bblCode)\n }\n })\n this.UserManager.clearStaleState()\n }\n\n cleanup = () => {\n Object.entries(localStorage).forEach(([key]) => {\n if (\n key.includes(LOCALSTORAGE_IDENTITY_PREFIX) ||\n key.includes(LOCALSTORAGE_IDENTITY_MS) ||\n key.includes(LOCALSTORAGE_IDENTITY_PORTAL) ||\n key.includes(LOCALSTORAGE_IDENTITY_PREEMPTION)\n ) {\n localStorage.removeItem(key)\n }\n })\n\n this.UserManager.clearStaleState()\n }\n}\n","import React, { useContext } from 'react'\nimport AuthService from 'shared/services/authService'\n\ntype Service = AuthService\n\nconst AuthContext = React.createContext(undefined)\n\ntype AuthProviderProps = { children: React.ReactNode }\n\nconst AuthProvider: React.FC = (props) => {\n return (\n \n {props.children}\n \n )\n}\n\nfunction useAuthContext() {\n const context = useContext(AuthContext)\n if (context === undefined) {\n throw new Error('useAuthContext must be used within a AuthProvider')\n }\n return context\n}\n\nexport { AuthProvider, useAuthContext }\n","import React, { useEffect } from 'react'\nimport { useAuthContext } from 'Auth/AuthContext'\nimport { AppLoader } from '@bbl-digital/snorre'\nimport styled from '@emotion/styled'\n\nconst LoaderWrapper = styled.div`\n height: calc(98vh - 300px);\n width: 99vw;\n display: flex;\n justify-content: center;\n align-items: center;\n`\n\nconst Callback: React.FC = () => {\n const authContext = useAuthContext()\n useEffect(() => {\n authContext.signinRedirectCallback()\n })\n return (\n \n \n \n )\n}\n\nexport default Callback\n","export interface IBBL {\n name: string\n shortName: string\n phone: string\n email: string\n companyNumber: string\n clientNr: number\n externalPartnerNr: string\n businessAddress: string\n brandingCode: string\n settings: IBBLSettings\n gtmCode: string\n applications: IBBLApplications[]\n}\n\nexport interface IBBLUrls {\n myPage: string\n oldMyPage: string\n financeInfocenter: string\n digitalCourseForResidents: string\n membershipTransfer: string\n newHousingProjects: string\n digitalCourseForBoard: string\n bevarHms: string\n bevarVedlikehold: string\n vedlikeholdSystem: string\n hmsSystem: string\n newPortal: string\n plussplan: string\n}\n\nexport interface IBBLSettings {\n bblUrl: string\n urls: IBBLUrls\n afterLogoutRedirectUrl: string\n preemptionInformationUrl: string\n commonPreemptionInformationUrl: string\n emailForGeneralQuestions: string\n emailForPortalQuestions: string\n phoneNumberForGeneralQuestions: string\n phoneNumberForPortalQuestions: string\n becomeAMemberUrl: string\n customPrivacyStatementUrl: string\n gtmId: string\n}\n\nexport interface IBBLApplications {\n name: PortalTypesEnum\n}\n\n// Model representing TableStorage entity\nexport interface IBBLSummary {\n bblCode: string\n name: string\n url: string\n hasPreemption: Boolean\n brandingCode: string\n shortName: string\n}\n\nexport enum PortalTypesEnum {\n Forkjop = 'Forkjøp',\n Portal = 'Portalen',\n MinSide = 'Min side',\n}\n","import React, { useEffect } from 'react'\nimport { useAuthContext } from 'Auth/AuthContext'\nimport { IBBL } from 'shared/models/BBL'\nimport { AppLoader } from '@bbl-digital/snorre'\nimport styled from '@emotion/styled'\n\nconst LoaderWrapper = styled.div`\n height: calc(98vh - 300px);\n width: 99vw;\n display: flex;\n justify-content: center;\n align-items: center;\n`\n\ninterface IProps {\n bbl: IBBL | undefined\n}\n\nconst Logout: React.FC = ({ bbl }) => {\n const authContext = useAuthContext()\n\n useEffect(() => {\n authContext.signoutRedirectCallback()\n })\n\n return (\n \n \n \n )\n}\n\nexport default Logout\n","import React from 'react'\n\n/**\n *\n * NOT IN USE\n *\n *\n * SEE INDEX.TSX\n *\n */\nconst SilentRenew: React.FC = () => {\n return

Nothing here

\n}\n\nexport default SilentRenew\n","import styled from '@emotion/styled'\nimport { css } from '@emotion/react'\nimport { styles } from 'shared/constants/styles'\n\nexport const Wrapper = styled.header`\n display: flex;\n justify-content: space-between;\n height: 70px;\n position: sticky;\n z-index: 1000;\n top: 0;\n transition: background-color 0.2s ease-in-out;\n`\n\nexport const backgroundStyle = css`\n background-color: white;\n`\n\nexport const Content = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n max-width: ${styles.maxWidth};\n margin: 0 auto;\n padding: 0 1em;\n width: 100%;\n\n @media screen and (max-width: 1170px) {\n padding: 0 1em;\n }\n`\n\nexport const RightWrapper = styled.div`\n display: flex;\n align-items: center;\n & > *:nth-of-type(1) {\n margin-right: 1em;\n }\n`\n","/** @jsxImportSource @emotion/react */\nimport React from 'react'\nimport { UserMenu, UserMenuOption, Button } from '@bbl-digital/snorre'\nimport { IUser } from 'shared/models/User'\n\ninterface IProps {\n user: IUser\n onLogout: () => void\n onGoToProfile: () => void\n}\n\nconst User: React.FC = ({ user, onLogout, onGoToProfile }) => {\n const firstname = user.firstname ? user.firstname + ' ' : ''\n return (\n \n Logg ut\n \n }\n >\n Profil\n \n )\n}\n\nexport default User\n","import { SystemState } from './types'\n\nexport const getUser = (state: SystemState) => state.user\n","export const USER_FETCH_REQUESTED = 'USER_FETCH_REQUESTED'\nexport const USER_FETCH_SUCCESS = 'USER_FETCH_SUCCESS'\nexport const USER_FETCH_FAILED = 'USER_FETCH_FAILED'\n","/** @jsxImportSource @emotion/react */\nimport React, { useEffect, useState } from 'react'\nimport { Text, Button, IconLock, Link } from '@bbl-digital/snorre'\nimport { Wrapper, Content, backgroundStyle, RightWrapper } from './styles'\nimport { useAuthContext } from 'Auth/AuthContext'\nimport User from './User'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { getUser } from 'shared/store/user/selectors'\nimport { USER_FETCH_REQUESTED } from 'shared/store/user/actionTypes'\nimport { useHistory } from 'react-router-dom'\nimport { useBroadcast } from 'shared/hooks/useBroadcast'\nimport { CHANNEL_LOGOUT } from 'shared/constants/broadcastChannels'\n\ninterface IProps {\n brandingcode: string\n}\n\nconst Header: React.FC = ({ brandingcode }) => {\n const history = useHistory()\n const [top, isTop] = useState(true)\n const { data } = useSelector(getUser)\n const dispatch = useDispatch()\n const { send, subscribe } = useBroadcast(CHANNEL_LOGOUT, false, {\n subscribe: true,\n })\n\n const bblCode = window.config.bblCode\n\n const authContext = useAuthContext()\n\n const login = () => {\n authContext.signinRedirect()\n }\n\n const logout = () => {\n authContext.logout(bblCode)\n send(true)\n }\n\n useEffect(() => {\n const sub = subscribe(async (isLoggedOut) => {\n if (isLoggedOut) {\n await authContext.UserManager!.removeUser()\n await authContext.UserManager!.clearStaleState()\n await authContext.UserManager!.signoutRedirect()\n }\n })\n\n return () => sub()\n }, [])\n\n useEffect(() => {\n if (authContext.isAuthenticated()) {\n authContext.getUser().then((user: any) => {\n if (user.profile.navneregisterid) {\n dispatch({\n type: USER_FETCH_REQUESTED,\n payload: user.profile.navneregisterid,\n })\n } else {\n // DO STUFF WHEN USER DOES NOT HAVE AN NAVNEREGISTERID\n\n history.push(\n '/ikketilgang?returnUrl=' + window.location.origin + '/logout'\n )\n\n // window.location.href =\n // window.config.urls.bblidBaseUrl +\n // 'useradmin/profile/noaccess?returnUrl=' +\n // window.location.origin +\n // '/logout'\n }\n })\n }\n }, [authContext, dispatch, history])\n\n useEffect(() => {\n const handleScroll = () => {\n if (window.pageYOffset > 0) {\n isTop(false)\n } else {\n isTop(true)\n }\n }\n\n document.addEventListener('scroll', handleScroll, { passive: true })\n }, [top])\n\n const goToNoAccess = () => {}\n\n const goToProfile = () => {\n window.location.replace(\n `${window.config.urls.minSideUrl}/profil?endreProfil=true&returnUrl=${window.location.href}`\n )\n }\n\n return (\n \n \n \n \n \n {window.location.pathname !== '/ikketilgang' && (\n \n {data && (\n \n )}\n {!authContext.isAuthenticated() && (\n \n )}\n {authContext.isAuthenticated() && !data && (\n \n )}\n \n )}\n \n \n )\n}\n\nexport default Header\n","import { useEffect, useRef, useState } from 'react'\n\n/**\n *\n * Our hook will return an object with three properties:\n * - send: a function that will send a message to all other tabs\n * - state: the current state of the broadcast\n * - subscribe: a function that will subscribe to the broadcast (Only if options.subscribe is true)\n */\nexport type UseBroadcastReturn = {\n send: (val: T) => void\n state: T | undefined\n subscribe: (callback: (e: T) => void) => () => void\n}\n\n/**\n * The options for the useBroadcast hook\n */\nexport type UseBroadcastOptions = {\n subscribe?: boolean\n}\n\n/**\n * @see https://github.com/Romainlg29/use-broadcast/tree/main\n *\n * @param name The name of the broadcast channel\n * @param val The initial value of the broadcast\n * @returns Returns an object with three properties: send, state and subscribe\n */\nexport const useBroadcast = (\n name: string,\n val?: T,\n options?: UseBroadcastOptions\n): UseBroadcastReturn => {\n /**\n * Store the state of the broadcast\n */\n const [state, setState] = useState(val)\n\n /**\n * Store the BroadcastChannel instance\n */\n const channel = useRef(null)\n\n /**\n * Store the listeners\n */\n const listeners = useRef<((e: T) => void)[]>([])\n\n /**\n * This function send the value to all the other tabs\n * @param val The value to send\n */\n const send = (val: T) => {\n if (!channel.current) {\n return\n }\n\n /**\n * Send the value to all the other tabs\n */\n channel.current.postMessage(val)\n\n if (!options?.subscribe) {\n setState(val)\n }\n\n /**\n * Dispatch the event to the listeners\n */\n listeners.current.forEach((listener) => listener(val))\n }\n\n /**\n * This function subscribe to the broadcast\n * @param callback The callback function\n * @returns Returns a function that unsubscribe the callback\n */\n const subscribe = (callback: (e: T) => void) => {\n /**\n * Add the callback to the listeners\n */\n listeners.current.push(callback)\n\n /**\n * Return a function that unsubscribe the callback\n */\n return () =>\n listeners.current.splice(listeners.current.indexOf(callback), 1)\n }\n\n useEffect(() => {\n /**\n * If BroadcastChannel is not supported, we log an error and return\n */\n if (typeof window === 'undefined') {\n console.error('Window is undefined!')\n return\n }\n\n if (!window.BroadcastChannel) {\n console.error('BroadcastChannel is not supported!')\n return\n }\n\n /**\n * If the channel is null, we create a new one\n */\n if (!channel.current) {\n channel.current = new BroadcastChannel(name)\n }\n\n /**\n * Subscribe to the message event\n * @param e The message event\n */\n channel.current.onmessage = (e) => {\n /**\n * Update the state\n */\n if (!options?.subscribe) {\n setState(e.data)\n }\n\n /**\n * Dispatch an event to the listeners\n */\n listeners.current.forEach((listener) => listener(e.data))\n }\n\n /**\n * Cleanup\n */\n return () => {\n if (!channel.current) {\n return\n }\n\n channel.current.close()\n channel.current = null\n }\n }, [name, options])\n\n return { send, state, subscribe }\n}\n","export const CHANNEL_LOGOUT = 'channel-logout'\n","import styled from '@emotion/styled'\nimport Link from '@bbl-digital/snorre/lib/core/Link'\n\nexport const FooterWrapper = styled.footer`\n position: relative;\n margin-top: -20px;\n\n @media screen and (max-width: 770px) {\n margin-top: -10px;\n }\n\n & > div {\n &:nth-of-type(2) {\n padding: 2em 1em;\n width: calc(100% - 2em);\n }\n\n & > svg {\n margin-left: -10px;\n height: 100%;\n margin-bottom: -7px;\n z-index: -1;\n }\n }\n`\n\nexport const CustomLink = styled(Link)`\n background-color: transparent;\n border: none;\n padding: 0;\n color: white;\n font-size: 16px;\n font-weight: normal;\n text-decoration: underline;\n margin-bottom: 6px;\n cursor: pointer;\n font-family: 'Source Sans Pro', sans-serif;\n text-align: left;\n`\n","import React, { Fragment } from 'react'\nimport {\n FooterLink,\n FooterLabel,\n FooterGroup,\n FooterCol,\n Text,\n Footer,\n IllustrationHousesBackgroundWithComposition,\n getFormatedPhone,\n getUrlWithProtocol,\n} from '@bbl-digital/snorre'\nimport { FooterWrapper, CustomLink } from './styles'\nimport { IBBL } from 'shared/models/BBL'\nimport { useHistory } from 'react-router-dom'\n\ninterface IProps {\n bbl?: IBBL\n}\n\nconst LandingFooter: React.FC = ({ bbl }) => {\n const history = useHistory()\n\n const phone = bbl?.settings?.phoneNumberForGeneralQuestions\n const email = bbl?.settings?.emailForGeneralQuestions\n\n const hasAnyUrl = (): boolean => {\n if (!bbl?.settings) return false\n return bbl.settings.commonPreemptionInformationUrl ||\n bbl.settings.preemptionInformationUrl ||\n bbl.settings.becomeAMemberUrl\n ? true\n : false\n }\n\n const goToPrivacy = () => {\n history.push('/personvern')\n }\n\n const currentYear = new Date().getFullYear()\n\n return (\n \n \n
\n {bbl && bbl.settings && (\n \n \n {phone && (\n \n Telefon\n \n {getFormatedPhone(phone)}\n \n \n )}\n {email && (\n \n E-post\n {email}\n \n )}\n \n\n \n {hasAnyUrl() && (\n \n Nyttige lenker\n {bbl.settings.bblUrl && (\n \n {bbl.shortName || bbl.name}\n \n )}\n {bbl.settings.becomeAMemberUrl && (\n \n Bli medlem\n \n )}\n \n )}\n \n\n \n \n BBL Pivotal © {currentYear}\n {bbl.settings.customPrivacyStatementUrl && (\n \n Personvern og informasjonskapsler\n \n )}\n {!bbl.settings.customPrivacyStatementUrl && (\n \n Personvern og informasjonskapsler\n \n )}\n \n \n \n )}\n
\n
\n )\n}\n\nexport default LandingFooter\n","import { PortalTypesEnum } from 'shared/models/BBL'\nimport { SystemState } from './types'\n\nexport const getBbl = (state: SystemState) => state.bbl\n\nexport const getBblSettings = (state: SystemState) => {\n const bbl = getBbl(state)\n return bbl.data?.settings\n}\n\nexport const isPortalActive = (state: SystemState) =>\n state.bbl.data?.applications.findIndex(\n (x) => x.name === PortalTypesEnum.Portal\n ) !== -1\n\nexport const isMinSideActive = (state: SystemState) =>\n state.bbl.data?.applications.findIndex(\n (x) => x.name === PortalTypesEnum.MinSide\n ) !== -1\n\nexport const isForkjopActive = (state: SystemState) =>\n state.bbl.data?.applications.findIndex(\n (x) => x.name === PortalTypesEnum.Forkjop\n ) !== -1\n","export const CUSTOMTEXT_HEADER = 'Landingsside_Overskrift'\nexport const CUSTOMTEXT_FORKJOP = 'Landingsside_Forkjop'\nexport const CUSTOMTEXT_INGRESS = 'Landingsside_Ingress'\nexport const CUSTOMTEXT_MINSIDE = 'Landingsside_MinSide'\nexport const CUSTOMTEXT_PORTAL = 'Landingsside_Styreportalen'\n","import {\n CUSTOMTEXT_FORKJOP,\n CUSTOMTEXT_HEADER,\n CUSTOMTEXT_INGRESS,\n CUSTOMTEXT_MINSIDE,\n CUSTOMTEXT_PORTAL,\n} from 'shared/constants/customtexts'\nimport { SystemState } from './types'\n\nexport const getCustomtexts = (state: SystemState) => state.customtexts\n\nexport const getCustomtextHeader = (state: SystemState) =>\n state.customtexts.data?.find((x) => x.fieldName === CUSTOMTEXT_HEADER)?.text\n\nexport const getCustomtextIngress = (state: SystemState) =>\n state.customtexts.data?.find((x) => x.fieldName === CUSTOMTEXT_INGRESS)?.text\n\nexport const getCustomtextPortal = (state: SystemState) =>\n state.customtexts.data?.find((x) => x.fieldName === CUSTOMTEXT_PORTAL)?.text\n\nexport const getCustomtextMinside = (state: SystemState) =>\n state.customtexts.data?.find((x) => x.fieldName === CUSTOMTEXT_MINSIDE)?.text\n\nexport const getCustomtextForkjop = (state: SystemState) =>\n state.customtexts.data?.find((x) => x.fieldName === CUSTOMTEXT_FORKJOP)?.text\n","import styled from '@emotion/styled'\n\nexport const HeaderWrapper = styled.div`\n h2 {\n margin-bottom: 0.5em;\n }\n span {\n font-size: 20px;\n }\n`\n\nexport const IngressWrapper = styled.div`\n display: flex;\n align-items: center;\n min-height: 50px;\n max-width: 500px;\n flex-wrap: wrap;\n`\n","import { Header, Skeleton, Text } from '@bbl-digital/snorre'\nimport React, { Fragment } from 'react'\nimport { useSelector } from 'react-redux'\nimport {\n getCustomtextHeader,\n getCustomtextIngress,\n} from 'shared/store/customtexts/selectors'\nimport { HeaderWrapper, IngressWrapper } from './styles'\n\nconst HomeHeader: React.FC = () => {\n const customtextHeader = useSelector(getCustomtextHeader)\n const customtextIngress = useSelector(getCustomtextIngress)\n return (\n \n
{customtextHeader || 'Velkommen'}
\n \n {customtextIngress ? (\n {customtextIngress}\n ) : (\n \n \n \n \n )}\n \n
\n )\n}\n\nexport default HomeHeader\n","import styled from '@emotion/styled'\n\nexport const Wrapper = styled.div`\n display: grid;\n grid-template-columns: 1fr;\n grid-row-gap: 0.2em;\n margin-top: 1em;\n`\n","import React from 'react'\nimport { Skeleton } from '@bbl-digital/snorre'\nimport { Wrapper } from './styles'\n\ninterface IProps {}\n\nconst ProductCardSkeleton: React.FC = () => {\n return (\n \n \n \n \n \n )\n}\n\nexport default ProductCardSkeleton\n","import { css } from '@emotion/react'\nimport styled from '@emotion/styled'\n\nexport const TextWrapper = styled.div`\n min-height: 60px;\n margin-top: 0.5em;\n margin-bottom: 1em;\n\n @media screen and (max-width: 768px) {\n display: none;\n margin-top: 0em;\n margin-bottom: 0em;\n }\n`\n\nexport const IconWrapper = styled.div`\n display: flex;\n justify-content: flex-end;\n`\n\nexport const ContentWrapper = styled.div`\n @media screen and (max-width: 768px) {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n`\n\nexport const BorderRadiusStyle = css`\n @media screen and (max-width: 768px) {\n padding: 1.5em 1em;\n border-radius: 15px;\n }\n`\n","import { Card, Header, IconArrowRight, Link, Text } from '@bbl-digital/snorre'\nimport { useTheme } from '@emotion/react'\nimport React from 'react'\nimport ProductCardSkeleton from './ProductCardSkeleton'\nimport {\n BorderRadiusStyle,\n ContentWrapper,\n IconWrapper,\n TextWrapper,\n} from './styles'\n\ninterface IProps {\n headerIcon: React.ReactNode\n headerText: string\n text?: string\n url: string\n}\n\nconst ProductCard: React.FC = ({\n headerIcon,\n headerText,\n text,\n url,\n}) => {\n const theme: any = useTheme()\n\n return (\n \n \n \n
\n {headerIcon}\n {headerText}\n
\n \n {text ? {text} : }\n \n \n \n \n
\n
\n \n )\n}\n\nexport default ProductCard\n","import styled from '@emotion/styled'\n\nexport const Wrapper = styled.div`\n display: grid;\n grid-row-gap: 4em;\n grid-template-columns: 1fr;\n grid-template-rows: min-content min-content;\n max-width: 1170px;\n margin: 0 auto;\n min-height: calc(\n 100vh - 194px - 10vw - 70px\n ); // Minus footer, topbar and illustration\n padding-top: 10vh;\n\n @media screen and (max-width: 568px) {\n grid-row-gap: 2em;\n margin-top: 5vh;\n margin-bottom: 5vh;\n }\n\n @media screen and (max-width: 1170px) {\n padding: 0 1em;\n }\n`\n\nexport const CardsWrapper = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 365px));\n grid-column-gap: 2em;\n grid-row-gap: 2em;\n\n @media screen and (max-width: 768px) {\n grid-row-gap: 1em;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n }\n\n h3 {\n display: flex;\n align-items: center;\n\n svg {\n margin-right: 0.5em;\n }\n }\n`\n","import {\n getUrlWithProtocol,\n IconApartment,\n IconBoard,\n IconUser,\n} from '@bbl-digital/snorre'\nimport { useTheme } from '@emotion/react'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport {\n isForkjopActive,\n isMinSideActive,\n isPortalActive,\n getBblSettings,\n} from 'shared/store/bbl/selectors'\nimport {\n getCustomtextForkjop,\n getCustomtextMinside,\n getCustomtextPortal,\n} from 'shared/store/customtexts/selectors'\nimport HomeHeader from './Header'\nimport ProductCard from './ProductCard'\nimport { CardsWrapper, Wrapper } from './styles'\n\nconst Home: React.FC = () => {\n const theme: any = useTheme()\n\n const preemptionBblCode =\n window.config.bblCode === 'sbbl'\n ? 'sobo'\n : window.config.bblCode === 'moborana'\n ? 'helgelandbbl'\n : window.config.bblCode === 'pbbl'\n ? 'gbbl'\n : window.config.bblCode\n\n const customtextForkjop = useSelector(getCustomtextForkjop)\n const customtextPortal = useSelector(getCustomtextPortal)\n const customtextMinside = useSelector(getCustomtextMinside)\n\n const hasPortal = useSelector(isPortalActive)\n const hasMinSide = useSelector(isMinSideActive)\n const hasForkjop = useSelector(isForkjopActive)\n\n const bblSettings = useSelector(getBblSettings)\n\n return (\n \n \n\n \n {hasForkjop && (\n \n }\n headerText=\"Forkjøp\"\n text={customtextForkjop}\n url={window.config.urls.forkjopUrl + preemptionBblCode}\n />\n )}\n {hasMinSide && (\n \n }\n headerText=\"Min side\"\n text={customtextMinside}\n url={window.config.urls.minSideUrl}\n />\n )}\n {hasPortal && (\n \n }\n headerText=\"Portal\"\n text={customtextPortal}\n url={getUrlWithProtocol(\n bblSettings?.urls.newPortal ||\n window.config.bblCode.toLowerCase() +\n window.config.urls.portalUrl\n )}\n />\n )}\n \n \n )\n}\n\nexport default Home\n","import React, { useEffect } from 'react'\nimport { useAuthContext } from 'Auth/AuthContext'\nimport { AppLoader, getUrlWithProtocol } from '@bbl-digital/snorre'\nimport styled from '@emotion/styled'\nimport { IBBL } from 'shared/models/BBL'\n\nconst LoaderWrapper = styled.div`\n height: 98vh;\n width: 99vw;\n display: flex;\n justify-content: center;\n align-items: center;\n`\n\ninterface IProps {\n bbl: IBBL | undefined\n}\n\nconst AfterLogout: React.FC = ({ bbl }) => {\n const authContext = useAuthContext()\n\n useEffect(() => {\n const url = bbl?.settings?.bblUrl\n ? getUrlWithProtocol(bbl.settings.bblUrl)\n : undefined\n\n authContext.signoutRedirectCallback(url)\n })\n\n return (\n \n \n \n )\n}\n\nexport default AfterLogout\n","import styled from '@emotion/styled'\n\nexport const LoaderWrapper = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: white;\n transition: 0.5s opacity ease-out;\n transition-delay: 0.5s;\n z-index: 9999;\n\n &.overlay-exit-active {\n opacity: 0;\n }\n`\n","import React, { useEffect } from 'react'\nimport { useAuthContext } from 'Auth/AuthContext'\nimport { LoaderWrapper } from 'shared/components/LoaderWrapper/styles'\nimport { AppLoader } from '@bbl-digital/snorre'\n\nconst Cleanup: React.FC = () => {\n const authContext = useAuthContext()\n useEffect(() => {\n authContext.cleanup()\n })\n return (\n \n \n )\n}\n\nexport default Cleanup\n","import axios from 'axios'\n\nexport const getBbl = () => {\n return axios.get(axios.defaults.baseURL + 'bbl/bbl')\n}\n\nexport const getBblSettings = () => {\n return axios.get(axios.defaults.baseURL + 'bbl/bbl/settings')\n}\n\nexport const getBblApplications = () => {\n return axios.get(axios.defaults.baseURL + 'bbl/bbl/applications')\n}\n\nexport const sendRequestToBbl = () => {\n return axios.get(window.config.urls.bblidApiBaseUrl + '/api/user/request')\n}\n","import styled from '@emotion/styled'\n\nexport const Wrapper = styled.div`\n margin: 10vh auto;\n max-width: 450px;\n\n h2 {\n margin-bottom: 1em;\n }\n\n p {\n margin-bottom: 2em;\n }\n\n p + div {\n margin-bottom: 2em;\n }\n\n & > div {\n padding: 3em;\n }\n`\n","import React, { Fragment } from 'react'\nimport { Header, Text } from '@bbl-digital/snorre'\nimport { IBBL } from 'shared/models/BBL'\n\ninterface IProps {\n bbl: IBBL | null\n fullName: string | undefined\n}\n\nconst NoAccessInformation: React.FC = ({ fullName, bbl }) => {\n return (\n \n
Hei {fullName}
\n \n Vi klarte dessverre ikke å automatisk koble din bruker i {bbl?.name}{' '}\n sine systemer.\n \n \n Om du finnes i {bbl?.name} sine systemer kan vårt kundesenter gjerne\n hjelpe deg videre med opprettingen.\n \n \n Trykk på knappen under for å sende en forespørsel med dine\n brukerdetaljer til vårt kundesenter hos {bbl?.name}.\n \n
\n )\n}\n\nexport default NoAccessInformation\n","import styled from '@emotion/styled'\n\nexport const ButtonWrapper = styled.div`\n display: flex;\n flex-direction: column;\n\n button {\n margin-bottom: 1em;\n }\n\n a {\n margin-top: 1em;\n margin-bottom: 2em;\n text-align: center;\n }\n`\n","import React from 'react'\nimport { Text, Button, Link } from '@bbl-digital/snorre'\nimport { ButtonWrapper } from './styles'\nimport { IBBL } from 'shared/models/BBL'\n\ninterface IProps {\n returnUrl: string | undefined\n bbl: IBBL | null\n idp: string | undefined\n isRequestLoading: boolean\n isRequestSent: boolean\n onSendRequest: () => void\n onLogout: () => void\n}\n\nconst NoAccessActions: React.FC = ({\n returnUrl,\n bbl,\n idp,\n isRequestLoading,\n isRequestSent,\n onSendRequest,\n onLogout,\n}) => {\n return (\n \n \n Send forespørsel\n \n {returnUrl && (\n \n )}\n {idp === 'oidc2' && (\n \n Min brukerprofil\n \n )}\n\n \n Du kan ringe oss på {bbl?.phone} for en raskere behandling, men vi\n oppfordrer deg uansett til å trykke på knappen over, slik at vi kan se\n hva du har oppgitt som dine brukerdetaljer.\n \n \n )\n}\n\nexport default NoAccessActions\n","import React, { Fragment, useEffect, useState } from 'react'\nimport { Card, Alert, AppLoader } from '@bbl-digital/snorre'\nimport Layout from 'shared/components/Layout'\nimport { sendRequestToBbl } from 'shared/api/bbl.api'\nimport { Wrapper } from './styles'\nimport { useAuthContext } from 'Auth/AuthContext'\nimport NoAccessInformation from './NoAccessInformation'\nimport NoAccessActions from './NoAccessActions'\nimport { getBbl } from 'shared/store/bbl/selectors'\nimport { useSelector } from 'react-redux'\nimport { LoaderWrapper } from 'shared/components/LoaderWrapper/styles'\nimport axios from 'axios'\nimport { getParamBothLowerUppercase } from 'shared/utils/urlParams'\n\ninterface IProps {}\n\nconst NoAccess: React.FC = () => {\n const authContext = useAuthContext()\n const bbl = useSelector(getBbl)\n const [idp, setIdp] = useState()\n const [fullName, setFullName] = useState()\n const [requestLoading, setRequestLoading] = useState(false)\n const [requestMessage, setRequestMessage] = useState(\n undefined\n )\n const [error, setError] = useState(null)\n const returnUrl = getParamBothLowerUppercase('returnUrl')\n\n useEffect(() => {\n if (!authContext.isAuthenticated()) {\n authContext.signinRedirect()\n return\n }\n\n getUser()\n getIdp()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const getIdp = () => {\n authContext.getUser().then((res) => {\n setIdp(res.profile.idp)\n })\n }\n\n const getUser = () => {\n authContext.getUser().then((res) => {\n setFullName(res.profile.full_name)\n })\n }\n\n const onSendRequest = () => {\n setRequestLoading(true)\n\n sendRequestToBbl()\n .then(() => {\n setRequestMessage('En forespørsel er sendt.')\n })\n .catch(() => {\n setError('En feil skjedde.')\n })\n .finally(() => {\n setRequestLoading(false)\n })\n }\n\n const onLogout = () => {\n authContext.logout(window.config.bblCode)\n }\n\n if (bbl && bbl.data?.brandingCode === 'bate') {\n window.location.href =\n window.config.urls.bblidClientUrl +\n 'ikketilgang?bbl=bate&returnurl=' +\n window.location.origin +\n '/logout'\n\n return null\n }\n\n const Content = (\n \n \n {requestMessage && (\n setRequestMessage(undefined)}>\n {requestMessage}\n \n )}\n \n \n )\n\n const ApplicationLoading = (\n \n \n \n )\n\n return bbl.loading ? (\n ApplicationLoading\n ) : (\n \n \n \n {error ? {error} : Content}\n \n \n \n )\n}\n\nexport default NoAccess\n","export const getParamBothLowerUppercase = (paramname: string) => {\n const search = window.location.search\n const params = new URLSearchParams(search)\n let returnUrlParam = params.get(paramname)\n\n if (returnUrlParam) {\n return returnUrlParam\n } else {\n return params.get(paramname.toLowerCase())\n }\n}\n","import React, { useState, useEffect, Suspense, Fragment } from 'react'\nimport { Router, Switch, Route } from 'react-router-dom'\nimport history from 'browserHistory'\nimport styled from '@emotion/styled'\nimport { AnalyticsProvider } from '@bbld/bbl-analytics'\n\n// import TelemetryProvider from 'shared/tracking/telemetryProvider'\nimport { getAppInsights } from 'shared/services/telemetryService'\nimport PageError from 'shared/components/PageError'\nimport Callback from 'Auth/Callback'\nimport Logout from 'Auth/Logout'\nimport SilentRenew from 'Auth/SilentRenew'\nimport Header from './Header'\nimport LandingFooter from './Footer'\nimport { IBBL } from 'shared/models/BBL'\nimport Home from 'Modules/Home'\nimport AfterLogout from 'Auth/AfterLogout'\nimport Cleanup from 'Auth/Cleanup'\nimport NoAccess from 'Modules/NoAccess'\n\n/** Lazy load modules */\nconst TelemetryProvider = React.lazy(\n () => import('shared/tracking/telemetryProvider')\n)\nconst PrivacyPage = React.lazy(() => import('Modules/PrivacyPage'))\n\nconst Wrapper = styled.main`\n min-height: calc(100vh - 210px);\n`\n\ninterface IProps {\n brandingcode: string\n bbl: IBBL\n}\n\nconst Routes: React.FC = ({ bbl, brandingcode, ...props }) => {\n const [isReady, setIsReady] = useState(false)\n const [analyticsSettings, setAnalyticsSettings] = useState({\n gtmCodes: [window.config.gtm.bblPivotalGtmCode],\n siteName: window.config.appName,\n bblCode: window.config.bblCode,\n })\n\n useEffect(() => {\n console.log('analytics settings')\n if (bbl.settings.gtmId) {\n setAnalyticsSettings({\n ...analyticsSettings,\n gtmCodes: [...analyticsSettings.gtmCodes, 'GTM-' + bbl.settings.gtmId],\n })\n }\n setTimeout(() => {\n setIsReady(true)\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // eslint-disable-next-line\n let appInsights: any | null = null\n\n return (\n \n }>\n {isReady && (\n \n \n {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n appInsights = getAppInsights()\n }}\n >\n
\n \n {/* Auth routes */}\n \n \n \n }\n />\n }\n />\n\n \n \n \n {/* Error routes */}\n \n \n \n \n \n \n )}\n \n \n )\n}\n\nexport default Routes\n","import React from 'react'\nimport { Global, css } from '@emotion/react'\n\nconst GlobalStyles: React.FC = () => (\n \n)\n\nexport default GlobalStyles\n","import axios from 'axios'\nexport const getTheme = async (brandingCode: string) => {\n const code = brandingCode.toLowerCase()\n\n const style: any = await axios.get(\n window.config.urls.themesUrl + code + '/styles.json',\n {\n transformRequest: (data, headers) => {\n delete headers.common['Authorization']\n },\n }\n )\n\n return style.data\n}\n\nexport const setFavicon = (code: string) => {\n const favicon: any = document.querySelector(\"link[rel*='icon']\")\n if (!favicon) return\n favicon.href = `${\n window.config.urls.themesUrl\n }${code.toLocaleLowerCase()}/favicon.ico`\n}\n","export const BBL_FETCH_REQUESTED = 'BBL_FETCH_REQUESTED'\nexport const BBL_FETCH_SUCCESS = 'BBL_FETCH_SUCCESS'\nexport const BBL_FETCH_FAILED = 'BBL_FETCH_FAILED'\n","export const CUSTOMTEXTS_FETCH_REQUESTED = 'CUSTOMTEXTS_FETCH_REQUESTED'\nexport const CUSTOMTEXTS_FETCH_SUCCESS = 'CUSTOMTEXTS_FETCH_SUCCESS'\nexport const CUSTOMTEXTS_FETCH_FAILED = 'CUSTOMTEXTS_FETCH_FAILED'\n","import React, { Fragment, useState, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { AppShell, AppLoader } from '@bbl-digital/snorre'\nimport Routes from './Routes'\nimport GlobalStyles from './GlobalStyles'\nimport { getTheme, setFavicon } from 'shared/utils/theme'\nimport { LoaderWrapper } from 'shared/components/LoaderWrapper/styles'\nimport { getBbl } from 'shared/store/bbl/selectors'\nimport { BBL_FETCH_REQUESTED } from 'shared/store/bbl/actionTypes'\nimport { useAuthContext } from 'Auth/AuthContext'\nimport { CUSTOMTEXTS_FETCH_REQUESTED } from 'shared/store/customtexts/actionTypes'\nimport { IBBL } from 'shared/models/BBL'\n\ninterface IResponse {\n bbl?: IBBL\n error?: any\n}\n\nconst App: React.FC = () => {\n const { data, loading, error } = useSelector(getBbl)\n const dispatch = useDispatch()\n const [theme, setTheme] = useState()\n const authContext = useAuthContext()\n\n useEffect(() => {\n dispatch({ type: BBL_FETCH_REQUESTED })\n dispatch({ type: CUSTOMTEXTS_FETCH_REQUESTED })\n\n if (authContext.isAuthenticated()) {\n authContext.getUser().then((user: any) => {\n dispatch({\n type: BBL_FETCH_REQUESTED,\n payload: user.profile.navneregisterid,\n })\n })\n }\n }, [authContext, dispatch])\n\n useEffect(() => {\n if (data) {\n getTheme(data.brandingCode).then((res: any) => {\n setTheme(res)\n })\n setFavicon(data.brandingCode)\n }\n }, [data])\n\n const ApplicationLoading = (\n \n \n \n )\n const ApplicationLoaded = (\n \n \n {data && data?.brandingCode && (\n \n )}\n \n )\n\n return (\n \n {!loading && theme ? ApplicationLoaded : ApplicationLoading}\n {error ? Noe gikk galt... : null}\n \n )\n}\n\nexport default App\n","import axios from 'axios'\n\nexport const getUser = () => {\n return axios.request({\n method: 'get',\n url: `personv2/Person/`,\n headers: {\n 'x-api-version': '2.0',\n },\n })\n}\n\nexport const getUserRoles = () => {\n return axios.get('/roles/Role')\n}\n","import { all, call, put, takeEvery } from 'redux-saga/effects'\nimport {\n USER_FETCH_SUCCESS,\n USER_FETCH_FAILED,\n USER_FETCH_REQUESTED,\n} from './actionTypes'\nimport { getUser, getUserRoles } from 'shared/api/user.api'\n\nfunction* fetchUser(): any {\n try {\n const [user, userRoles] = yield all([\n call(getUser as any),\n call(getUserRoles as any),\n ])\n yield all([\n put({\n type: USER_FETCH_SUCCESS,\n payload: { ...user.data, roles: { ...userRoles.data } },\n }),\n ])\n } catch (e) {\n yield put({ type: USER_FETCH_FAILED, payload: e })\n }\n}\n\nfunction* userSaga() {\n yield takeEvery(USER_FETCH_REQUESTED, fetchUser)\n}\n\nexport default userSaga\n","import {\n USER_FETCH_REQUESTED,\n USER_FETCH_SUCCESS,\n USER_FETCH_FAILED,\n} from './actionTypes'\nimport { UserActionTypes } from './types'\n\nconst initialState = {\n data: null,\n loading: false,\n error: null,\n}\n\nconst reducer = (state = initialState, action: UserActionTypes) => {\n switch (action.type) {\n case USER_FETCH_REQUESTED:\n return { ...state, loading: true }\n case USER_FETCH_SUCCESS:\n return { ...state, loading: false, data: action.payload }\n case USER_FETCH_FAILED:\n return { ...state, loading: false, error: action.payload }\n default:\n return state\n }\n}\n\nexport default reducer\n","import { all, call, put, takeEvery } from 'redux-saga/effects'\nimport { getBbl, getBblApplications, getBblSettings } from 'shared/api/bbl.api'\nimport {\n BBL_FETCH_REQUESTED,\n BBL_FETCH_FAILED,\n BBL_FETCH_SUCCESS,\n} from './actionTypes'\n\nfunction* fetchBbl(): any {\n try {\n const [bbl, bblSettings, bblApplications] = yield all([\n call(getBbl),\n call(getBblSettings),\n call(getBblApplications),\n ])\n yield put({\n type: BBL_FETCH_SUCCESS,\n payload: {\n ...bbl.data,\n settings: { ...bblSettings.data },\n applications: [...bblApplications.data],\n },\n })\n } catch (e) {\n yield put({ type: BBL_FETCH_FAILED, payload: e })\n }\n}\n\nfunction* bblSaga() {\n yield takeEvery(BBL_FETCH_REQUESTED, fetchBbl)\n}\n\nexport default bblSaga\n","import {\n BBL_FETCH_REQUESTED,\n BBL_FETCH_SUCCESS,\n BBL_FETCH_FAILED,\n} from './actionTypes'\nimport { BblActionTypes } from './types'\n\nconst initialState = {\n data: null,\n loading: false,\n error: null,\n}\n\nconst reducer = (state = initialState, action: BblActionTypes) => {\n switch (action.type) {\n case BBL_FETCH_REQUESTED:\n return { ...state, loading: true }\n case BBL_FETCH_SUCCESS:\n return { ...state, loading: false, data: action.payload }\n case BBL_FETCH_FAILED:\n return { ...state, loading: false, error: action.payload }\n default:\n return state\n }\n}\n\nexport default reducer\n","import axios from 'axios'\n\nexport const getCustomtext = (id: string) => {\n return axios.get(\n axios.defaults.baseURL + 'customtext/bbltexts/Landingsside/' + id\n )\n}\n","import { all, call, put, takeEvery } from 'redux-saga/effects'\nimport { getCustomtext } from 'shared/api/customtext.api'\nimport {\n CUSTOMTEXT_HEADER,\n CUSTOMTEXT_FORKJOP,\n CUSTOMTEXT_INGRESS,\n CUSTOMTEXT_MINSIDE,\n CUSTOMTEXT_PORTAL,\n} from 'shared/constants/customtexts'\nimport { ICustomtext } from 'shared/models/Customtext'\nimport {\n CUSTOMTEXTS_FETCH_FAILED,\n CUSTOMTEXTS_FETCH_REQUESTED,\n CUSTOMTEXTS_FETCH_SUCCESS,\n} from './actionTypes'\n\nfunction* fetchCustomtexts(): any {\n try {\n const ids = [\n CUSTOMTEXT_HEADER,\n CUSTOMTEXT_FORKJOP,\n CUSTOMTEXT_INGRESS,\n CUSTOMTEXT_MINSIDE,\n CUSTOMTEXT_PORTAL,\n ]\n const response = yield all(ids.map((x) => call(getCustomtext, x)))\n const customtexts: ICustomtext[] = response.map((c: any) => c.data)\n\n yield put({\n type: CUSTOMTEXTS_FETCH_SUCCESS,\n payload: customtexts,\n })\n } catch (e) {\n yield put({ type: CUSTOMTEXTS_FETCH_FAILED, payload: e })\n }\n}\n\nfunction* customtextsSaga() {\n yield takeEvery(CUSTOMTEXTS_FETCH_REQUESTED, fetchCustomtexts)\n}\n\nexport default customtextsSaga\n","import {\n CUSTOMTEXTS_FETCH_FAILED,\n CUSTOMTEXTS_FETCH_REQUESTED,\n CUSTOMTEXTS_FETCH_SUCCESS,\n} from './actionTypes'\nimport { CustomtextsActionTypes } from './types'\n\nconst initialState = {\n data: [],\n loading: false,\n error: null,\n}\n\nconst reducer = (state = initialState, action: CustomtextsActionTypes) => {\n switch (action.type) {\n case CUSTOMTEXTS_FETCH_REQUESTED:\n return { ...state, loading: true }\n case CUSTOMTEXTS_FETCH_SUCCESS:\n return { ...state, loading: false, data: action.payload }\n case CUSTOMTEXTS_FETCH_FAILED:\n return { ...state, loading: false, error: action.payload }\n default:\n return state\n }\n}\n\nexport default reducer\n","import { all, fork } from 'redux-saga/effects'\nimport { bblSaga } from './bbl'\nimport { customtextsSaga } from './customtexts'\nimport { userSaga } from './user'\n\nexport const rootSaga = function* root() {\n yield all([fork(userSaga), fork(bblSaga), fork(customtextsSaga)])\n}\n","import { combineReducers, createStore, compose, applyMiddleware } from 'redux'\nimport createSagaMiddleware from 'redux-saga'\nimport { UserReducer } from './user'\nimport { rootSaga } from './sagas'\nimport { BblReducer } from './bbl'\nimport { CustomtextsReducer } from './customtexts'\n\nconst rootReducer = combineReducers({\n user: UserReducer,\n bbl: BblReducer,\n customtexts: CustomtextsReducer,\n})\n\nconst sagaMiddleware = createSagaMiddleware()\n\nconst composeEnhancer =\n (process.env.NODE_ENV !== 'production' &&\n (window as any)['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__']) ||\n compose\n\nconst store = createStore(\n rootReducer,\n {},\n composeEnhancer(applyMiddleware(sagaMiddleware))\n)\n\nsagaMiddleware.run(rootSaga)\n\nexport default store\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport * as serviceWorker from './serviceWorker'\nimport App from 'App'\nimport { AuthProvider } from 'Auth/AuthContext'\nimport { UserManager } from 'oidc-client'\nimport { Provider } from 'react-redux'\nimport store from 'shared/store/store'\nimport { setAxiosDefaults } from 'axiosConfig'\nimport { LOCALSTORAGE_IDENTITY_PREFIX } from 'shared/constants/localStorageVariables'\nimport { IDENTITY_CONFIG } from 'shared/constants/authConstants'\n\nsetAxiosDefaults()\n\nif (window.location.pathname.indexOf('/silentredirect') !== -1) {\n new UserManager({}).signinSilentCallback().then()\n} else if (window.location.pathname.indexOf('/cleanup') !== -1) {\n // Iframe cleanup call\n localStorage.removeItem(\n `${LOCALSTORAGE_IDENTITY_PREFIX}user:${IDENTITY_CONFIG.authority}:${IDENTITY_CONFIG.client_id}`\n )\n new UserManager({}).clearStaleState()\n} else {\n ReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n )\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: https://bit.ly/CRA-PWA\nserviceWorker.register()\n\ndeclare global {\n interface Window {\n clientConfigs: [\n {\n BblCode: string\n ClientId: string\n }\n ]\n config: {\n bblCode: string\n appName: string\n baseUrl: string\n urls: {\n bblidBaseUrl: string\n bblidClientUrl: string\n bblidApiBaseUrl: string\n minSideUrl: string\n forkjopUrl: string\n portalUrl: string\n themesUrl: string\n }\n api: {\n apiProxyUrl: string\n url: string\n subscription: string\n version: string\n }\n gtm: {\n bblPivotalGtmCode: string\n }\n gmaps: {\n googleMapKey: string\n }\n ai: {\n instrumentationKey: string\n role: string\n }\n }\n }\n}\n","export const styles = {\n maxWidth: '1170px',\n}\n","import {\n ApplicationInsights,\n ITelemetryItem,\n} from '@microsoft/applicationinsights-web'\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js'\n\nlet reactPlugin: ReactPlugin = new ReactPlugin()\nlet appInsights: ApplicationInsights | null = null\n\n/**\n * Create the App Insights Telemetry Service\n * @return {{reactPlugin: ReactPlugin, appInsights: Object, initialize: Function}} - Object\n */\nconst createTelemetryService = () => {\n /**\n * Initialize the Application Insights class\n * @param {string} instrumentationKey - Application Insights Instrumentation Key\n * @param {Object} browserHistory - client's browser history, supplied by the withRouter HOC\n * @return {void}\n */\n const initialize = (instrumentationKey: string, browserHistory: History) => {\n if (!browserHistory) {\n throw new Error('Could not initialize Telemetry Service')\n }\n if (!instrumentationKey) {\n throw new Error(\n 'Instrumentation key not provided in ./src/telemetry-provider.jsx'\n )\n }\n\n reactPlugin = new ReactPlugin()\n\n appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: instrumentationKey,\n disableFetchTracking: false,\n enableCorsCorrelation: true,\n extensions: [reactPlugin],\n extensionConfig: {\n [reactPlugin.identifier]: {\n history: browserHistory,\n },\n },\n },\n })\n\n appInsights.loadAppInsights()\n appInsights.addTelemetryInitializer((envelope: ITelemetryItem) => {\n if (!envelope || !envelope.tags) return\n envelope.tags['ai.cloud.role'] = window.config.ai.role\n })\n }\n\n return { reactPlugin, appInsights, initialize }\n}\n\nexport const ai = createTelemetryService()\nexport const getAppInsights = () => appInsights\n","import React from 'react'\nimport styled from '@emotion/styled'\nimport bp from '@bbl-digital/snorre/lib/globals/styles/breakpoints'\nimport { styles } from 'shared/constants/styles'\n\nconst Wrapper = styled.div`\n max-width: ${(props) => (props.fullsize ? 'none' : styles.maxWidth)};\n margin: 0 auto;\n /* padding: ${(props) => (props.fullsize ? '0' : '0 0')}; */\n\n @media screen and (max-width: ${bp.small}) {\n padding: ${(props) => (props.fullsize ? '0' : '1em 0')};\n }\n`\n\ninterface IProps {\n fullsize?: boolean\n}\n\nconst Layout: React.FC = (props) => {\n return {props.children}\n}\n\nexport default Layout\n"],"sourceRoot":""}