{"version":3,"sources":["utils/enum.ts","components/common/DialogBoxAlert.tsx","components/common/VisKommuner.tsx","components/beredskapsomrader/OmradeStatus.tsx","components/common/SearchInput.tsx","components/common/NotificationIcon.tsx","components/prester/contexts/PrestContextProvider.tsx","utils/constants.ts","services/http/HttpConfig.ts","services/http/httpService.ts","components/Pages/Unauthorized.tsx","components/common/contexts/RoleContextProvider.tsx","components/settings/SettingsMenu.tsx","utils/isIOsInStandaloneMode.ts","components/settings/KirkeLogo.tsx","components/common/Drawer.tsx","components/settings/UserInfo.tsx","components/settings/RoleViews.tsx","components/leggTilBruker/role.ts","components/settings/Logout.tsx","components/settings/desktop/DesktopView.tsx","components/settings/mobile/MobileView.tsx","components/settings/Settings.tsx","components/Layout/Header.tsx","utils/roleProvider.ts","components/serviceWorker/AlertContent.tsx","components/serviceWorker/serviceWorkerAlert.tsx","components/common/TableHeader.tsx","components/common/TableBodyWrapper.tsx","components/common/Table.tsx","components/beredskapsomrade/contexts/beredskapsomradeContext.tsx","components/prester/RemovePrestDialogBox.tsx","components/common/SettingsMenu.tsx","components/prester/prestSettingsMenu.tsx","components/beredskapsomrade/ToggleBeredskapDialogBox.tsx","components/prester/PresterTableRow.tsx","components/beredskapsomrade/BeredskapsomradeTabell.tsx","components/leggTilBruker/UserSearchInput.tsx","components/leggTilBruker/UserSearchList.tsx","components/leggTilBruker/AddUserDialogBoxContent.tsx","components/leggTilBruker/AddUserDialogBox.tsx","components/common/Breadcrumb.tsx","components/common/TilbakeButton.tsx","components/common/HideForRole.tsx","components/beredskapsomrade/prestIBeredskap.tsx","components/notifications/ToggleNotification.tsx","components/notifications/NotificationStatus.tsx","components/notifications/useNotification.ts","components/proster/KontaktpersonerIBeredskapsomradet.tsx","components/beredskapsomrade/Beredskapsomrade.tsx","components/beredskapsomrade/getBreadcrumbProps.ts","components/beredskapsomrader/BeredskapsomradeListe.tsx","components/beredskapsomrader/Beredskapsomrader.tsx","components/proster/RemoveProstDialogBox.tsx","components/proster/ProstVarslingerListe.tsx","components/proster/ProstVarslingerDialogBox.tsx","components/proster/ProstSettingsMenu.tsx","components/proster/ProsterListe.tsx","components/proster/Proster.tsx","components/bispedomme/BispedommeStatus.tsx","components/bispedomme/Bispedomme.tsx","components/prester/KontaktListe.tsx","components/prester/PresterIBeredskapsomradetMobil.tsx","components/prester/BeredskapsomradeMedKommunerTittel.tsx","components/prester/PresterIBeredskapsomradet.tsx","components/Layout/Routes.tsx","components/Layout/App.tsx","serviceWorker.ts","store/auth/authReducer.ts","store/account/accountReducer.ts","store/prester/presterReducer.ts","store/bispedommer/bispedommerReducer.ts","store/serviceWorker/serviceWorkerReducer.ts","store/combinedReducers.ts","store/auth/types.ts","store/account/types.ts","store/prester/types.ts","store/serviceWorker/types.ts","store/bispedommer/types.ts","utils/theme.ts","authentication/AuthProvider.tsx","store/auth/authActions.ts","store/account/accountActions.ts","index.tsx","components/customHooks/useLoader.ts","services/varslinger/varslingsService.tsx","components/common/InfoBox.tsx","authentication/authConfig.ts","authentication/authModule.ts","components/common/DialogBox.tsx","components/common/contexts/UserContextProvider.tsx","components/common/Card.tsx","components/common/TelephoneNumber.tsx","components/common/Background.tsx"],"names":["roles","useStyles","makeStyles","root","display","margin","paddingRight","paddingLeft","paddingTop","paddingBottom","content","icon","textAlign","marginRight","DialogBoxAlert","feilmelding","classes","className","color","variant","visKommuner","kommuner","kommuneLimit","type","kommuneTekst","slice","map","kommune","navn","join","length","theme","iconText","marginLeft","OmradeStatus","text","ariaLabel","iconStyle","containerStyle","useTheme","isOnMobileDevice","useMediaQuery","breakpoints","down","noSsr","aria-label","input","spacing","flex","iconButton","padding","alignItems","width","borderColor","palette","common","black","white","title","marginBottom","SearchInput","handleSearch","placeholderText","searchInputTitle","useState","searchText","setSearchText","elevation","component","onSubmit","event","preventDefault","placeholder","onChange","target","value","autoFocus","id","notificationIcon","NotificationIcon","smDown","PrestContext","createContext","PrestContextProvider","children","beredskapsomrader","setBeredskapsomrader","Provider","CUSTOM_ERRORS","Object","freeze","ValidationError","NotFoundError","feilmeldinger","ingenOmraderFunnet","uventetFeil","uventetFeilProvPaNytt","alleredeLagtTil","ingenPrestIBeredskap","ingenProsterLagtTilIBispedommet","ingenPresterLagtTilIOmradet","prestErIkkeLagtTilOmrade","prostErIkkeLagtTilBispedomme","http","404","401","500","sok","finnerIngenPrest","tomtSok","upresistSok","feilmeldingerMedInput","prostErIkkeLagtTilIBispedommet","ikkeRegistertIBispedomme","sjekkEpost","forsattFeil","prostOgPrest","toastVarslinger","varselPaaIBispedommet","varselAvIBispedommet","varselPaaIBeredskapsomradet","varselAvIBeredskapsomradet","HttpConfig","token","baseUrl","headers","this","window","config","apiUrl","Authorization","defaultHttpConfig","axios","interceptors","response","use","error","clientError","status","console","log","convertToProblemDetails","problemDetailsData","errors","errormsg","values","errorMessage","handleError","Error","problemDetails","data","message","name","httpClient","create","httpCall","url","options","a","getTokenSilent","request","httpGet","method","httpPost","body","httpPut","httpDelete","marginTop","errorCodeMessage","Unauthorized","startIcon","onClick","signout","RoleContext","RoleContextProvider","role","setRole","roleList","setRoleList","ROLLE","isIOsInStandaloneMode","windowNavigator","navigator","userAgent","toLowerCase","test","standalone","imageWrapper","KirkeLogo","isOnMobile","src","alt","height","menuButtonInDrawerContainer","justifyContent","menuButtonHeader","cursor","menuButtonInDrawerWrapper","up","Drawer","isOpen","state","setState","toggleDrawer","open","key","Logo","IconButton","Button","size","endIcon","SwipeableDrawer","onOpen","onClose","anchor","Container","userInfo","fontSize","avatar","userInfoWrapper","userTitles","UserInfo","useContext","UserContext","user","userPhoto","email","useSelector","undefined","accountReducer","account","username","Avatar","Typography","telephonenumber","mobilephone","radioButtonGroup","RoleViews","rolle","setRolle","history","useHistory","FormControl","RadioGroup","i","PROST","push","PREST","handleRedirect","FormControlLabel","control","Radio","label","Role","list","listItem","listIcon","minWidth","SettingsMenu","visRoller","visOmrader","menuItems","isVisibleForUser","includes","expandedContent","List","filter","item","ListItem","button","ListItemIcon","ListItemText","primary","LogoutListItem","Logout","settingsMenu","alignSelf","DesktopView","flexDirection","flexGrow","MobileView","Divider","Settings","logo","wrapper","Header","navigateHome","AppBar","position","Toolbar","location","assign","pathname","getRoleByPriority","ADMIN","BEREDSKAPSANSVARLIG","SECURITAS","Alertcontent","handleClose","updateServiceWorker","style","data-testid","snackbar","background","main","ServiceWorkerAlert","dispatch","useDispatch","isServiceWorkerUpdated","serviceWorkerReducer","serviceWorkerUpdated","serviceWorkerRegistration","payload","Snackbar","anchorOrigin","vertical","horizontal","action","AlertContent","registrationWaiting","waiting","postMessage","addEventListener","e","reload","fontWeight","TableHeader","columns","TableHead","TableRow","header","Hidden","hideOnMobile","TableCell","path","TableBodyWrapper","TableBody","Table","BeredskapsomradeContext","BeredskapsomradeProvider","beredskapsomrade","bispedommeNavn","kommuneNr","varsel","prester","setData","updateIBeredskap","prestId","iBeredskap","oppdatertePrester","prest","previousState","removePrest","p","customToast","success","leggTilPrest","getPrestIBeredskap","RemovePrestDialogBox","omradeId","setOpen","loading","setLoading","setError","handleRemovePrest","DialogBox","handleClick","buttonText","cancelButtonText","anchorEl","setAnchorEl","aria-controls","aria-haspopup","currentTarget","keepMounted","Boolean","MenuItem","menuItemText","PrestSettingsMenu","beredskapsomrade_id","useParams","chip","dialogContent","ToggleBeredskapDialogBox","successText","warningText","handleToggleBeredskap","beredskapsomradeId","parseInt","notificationIsSent","warning","Checkbox","disabled","checked","statusColumn","moreOptions","PresterTableRow","hover","TelephoneNumber","telefonnummer","Chip","float","fontStyle","BeredskapsomradeTabell","sortAsc","setSortAsc","handleSort","sortedPrester","sort","b","localeCompare","reverse","TableSortLabel","active","direction","UserSearchInput","searchResultsUser","searchResults","count","limit","secondary","dark","borderRadius","UserSearchList","selectedId","handleItemClick","handleChangeRadio","selected","textDecoration","limitText","AddUserDialogBoxContent","clearSelected","setSearchResults","toUpperCase","substring","result","users","LinearProgress","AddUserDialogBox","leggTil","initialState","azureAdId","mobilePhone","setSelected","setSelectedId","area","handleLeggTil","areapath","disableButton","toString","link","Breadcrumb","paths","pathName","handleKeyPress","Breadcrumbs","Link","tabIndex","onKeyPress","tilbake","TilbakeButton","linkTo","to","HideForRole","currentUserRole","condition","flexWrap","PrestIBeredskap","formControll","ToggleNotification","notification","Switch","labelPlacement","varsling","NotificationStatus","useNotification","initialValue","setNotification","loadingNotification","setLoadingNotification","useEffect","putVarselParameters","putUrl","putBody","handleToggleNotification","toastText","userId","bispedommeId","topWrapper","mainTitle","statusDiv","presterHeader","Beredskapsomrade","bispedomme_id","useLoader","then","res","prestIBeredskap","breadcrumbProps","getBreadcrumbPropsByRole","Background","Card","InfoBox","container","nameWrapper","flexFlow","nextIcon","errorIcon","fill","errorContent","maxWidth","warningIcon","warningContent","successIcon","successContent","prestIBerdskapMobil","BeredskapsomradeListe","beredskapsInfo","handleClickListItem","nameOfPrestIBeredskap","currentBeredskapInfo","find","info","presterIBeredskap","antallPresterIBeredskap","disableGutters","divider","allignItems","beredskapsOmraderText","statusOversiktText","Beredskapsomrader","currentPath","useLocation","RemoveProstDialogBox","prost","removeProst","handleRemoveProst","toggleSwitch","ProstVarslingerListe","beredskapsomradeName","index","newData","handleToggle","ProstVarslingerDialogBox","handleUpdateVarsler","BispedommeId","ProstSettingsMenu","openRemoveProst","setOpenRemoveProst","openVarslinger","setOpenVarslinger","ProsterListe","proster","sortedProster","Proster","setProster","prostId","okicon","warningicon","BispedommeStatus","antallOmrader","antallOmraderMedUgyldigStatus","omrade","Bispedomme","bispedomme","presterIBeredskapError","flexstyle","colortext","invchip","telefonnr","Kontaktliste","kontaktpersoner","tittel","erPrest","sortedKontakter","kontaktperson","href","number","PresterIBeredskapsomradetMobil","personer","x","BeredskapsomradeMedKommunerTittel","PresterIBeredskapsomradet","beredans","beredansMobile","KontaktpersonerIBeredskapsomradet","beredansListe","roleId","beredskapsansvarlig","prosteListe","SecuritasPage","lazy","BeredskapsansvarligPage","PrestPage","NotFound","ProstPage","Routes","from","exact","getPaths","fallback","App","tokenModel","JSON","parse","atob","split","getToken","UserContextProvider","isLocalhost","hostname","match","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","catch","authenticated","bispedommer","serviceWorkerInitialized","rootReducer","combineReducers","authReducer","presterReducer","bispedommerReducer","store","createStore","composeWithDevTools","applyMiddleware","thunk","Kirketheme","createMuiTheme","typography","fontFamily","AuthProvider","handleRedirectPromise","login","authenticateFail","ReactDOM","render","StrictMode","ThemeProvider","CssBaseline","document","getElementById","URL","process","origin","fetch","contentType","get","indexOf","ready","unregister","checkValidServiceWorker","loadingFunction","deps","defaultProps","hideProgressBar","closeOnClick","pauseOnHover","SnackbarLayout","getIcon","toast","autoClose","closeButton","msalConfig","auth","clientId","authority","redirectUri","pwaRedirectUrl","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","containsPii","LogLevel","Info","Verbose","debug","Warning","warn","msalInstance","PublicClientApplication","loginRequest","scopes","apiScope","logout","loginRedirect","getAccount","acquireTokenSilent","accessToken","InteractionRequiredAuthError","acquireTokenRedirect","currentAccounts","getAllAccounts","right","top","DialogTitle","other","aria-labelledby","fullWidth","setUser","setPhoto","userPhotoResponse","userResponse","paper","numberlink","telephoneNumber","replace","cardWrapper","lg","sm","md"],"mappings":"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","file":"static/js/main.153c4530.chunk.js","sourcesContent":["export enum roles {\r\n    ADMIN = \"Admin\",\r\n    PREST = \"Prest\",\r\n    PROST = \"Prost\",\r\n    BEREDSKAPSANSVARLIG = \"Beredskapsansvarlig\",\r\n    SECURITAS = \"Securitas\",\r\n    UNKNOW = \"Unknown\",\r\n}\r\n","import React from \"react\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\r\nimport Container from \"@material-ui/core/Container\";\r\n\r\ninterface Props {\r\n    feilmelding: string;\r\n}\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        display: \"flex\",\r\n        margin: \"auto\",\r\n        paddingRight: \"1.5rem\",\r\n        paddingLeft: \"1.5rem\",\r\n        paddingTop: \"1rem\",\r\n        paddingBottom: \"1rem\",\r\n    },\r\n    content: {\r\n        paddingRight: \"1.5rem\",\r\n        paddingLeft: \"1.5rem\",\r\n        display: \"flex\",\r\n    },\r\n    icon: {\r\n        textAlign: \"center\",\r\n        marginRight: 8,\r\n    },\r\n}));\r\nconst DialogBoxAlert: React.FC<Props> = ({ feilmelding }) => {\r\n    const classes = useStyles();\r\n    return (\r\n        <div className={classes.root}>\r\n            <Container className={classes.content}>\r\n                <ErrorIcon className={classes.icon} color=\"error\" />\r\n                <Typography variant=\"body2\">{feilmelding}</Typography>\r\n            </Container>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default DialogBoxAlert;\r\n","import React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { Variant } from \"@material-ui/core/styles/createTypography\";\r\n\r\ninterface Kommune {\r\n    navn: string;\r\n}\r\n\r\nexport const visKommuner = (\r\n    kommuner: Array<Kommune>,\r\n    kommuneLimit = 3,\r\n    type: Variant = \"subtitle1\"\r\n) => {\r\n    let kommuneTekst = kommuner\r\n        .slice(0, kommuneLimit)\r\n        .map((kommune) => kommune.navn)\r\n        .join(\", \");\r\n\r\n    if (kommuner.length > kommuneLimit) {\r\n        kommuneTekst += \" ...\";\r\n    }\r\n    return <Typography variant={type}>{kommuneTekst}</Typography>;\r\n};\r\n","import React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport { Container } from \"@material-ui/core\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    iconText: {\r\n        marginLeft: \"0.2rem\",\r\n        marginRight: \"0.2rem\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    text: string;\r\n    ariaLabel: string;\r\n    iconStyle: string;\r\n    containerStyle: string;\r\n}\r\n\r\nconst OmradeStatus: React.FC<Props> = ({ text, ariaLabel, iconStyle, containerStyle }) => {\r\n    const classes = useStyles();\r\n\r\n    const theme = useTheme();\r\n    const isOnMobileDevice = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n    return (\r\n        <>\r\n            {isOnMobileDevice ? (\r\n                <ErrorIcon className={iconStyle} aria-label={ariaLabel} />\r\n            ) : (\r\n                <Container className={containerStyle}>\r\n                    <ErrorIcon className={iconStyle} aria-label={ariaLabel} />\r\n                    <Typography\r\n                        variant=\"subtitle1\"\r\n                        className={classes.iconText}\r\n                    >\r\n                        {text}\r\n                    </Typography>\r\n                </Container>\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nexport default OmradeStatus;\r\n","import React, { useState } from \"react\";\r\nimport InputBase from \"@material-ui/core/InputBase\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport SearchIcon from \"@material-ui/icons/Search\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    input: {\r\n        marginLeft: theme.spacing(1),\r\n        flex: 1,\r\n    },\r\n    iconButton: {\r\n        padding: 10,\r\n    },\r\n    root: {\r\n        padding: \"2px 4px\",\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n        width: \"100%\",\r\n        borderColor:\r\n            theme.palette.type === \"light\"\r\n                ? theme.palette.common.black\r\n                : theme.palette.common.white,\r\n        margin: \"auto\",\r\n    },\r\n    title: {\r\n        marginBottom: \"1.3rem\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    handleSearch: (searchText: string) => void;\r\n    placeholderText: string;\r\n    searchInputTitle?: string;\r\n}\r\n\r\nconst SearchInput: React.FC<Props> = ({\r\n    handleSearch,\r\n    placeholderText,\r\n    searchInputTitle,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    const [searchText, setSearchText] = useState(\"\");\r\n\r\n    const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        setSearchText(event.target.value);\r\n    };\r\n\r\n    const handleSubmit = (event: React.FormEvent<HTMLDivElement>) => {\r\n        event.preventDefault();\r\n        handleSearch(searchText);\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {searchInputTitle && (\r\n                <Typography variant=\"h6\" className={classes.title}>\r\n                    {searchInputTitle}\r\n                </Typography>\r\n            )}\r\n            <Paper\r\n                elevation={0}\r\n                variant=\"outlined\"\r\n                component=\"form\"\r\n                className={classes.root}\r\n                onSubmit={handleSubmit}\r\n            >\r\n                <InputBase\r\n                    className={classes.input}\r\n                    placeholder={placeholderText}\r\n                    onChange={handleChange}\r\n                    value={searchText}\r\n                    autoFocus\r\n                />\r\n                <IconButton\r\n                    id=\"searchButton\"\r\n                    type=\"submit\"\r\n                    className={classes.iconButton}\r\n                    aria-label=\"search\"\r\n                >\r\n                    <SearchIcon />\r\n                </IconButton>\r\n            </Paper>\r\n        </>\r\n    );\r\n};\r\nexport default SearchInput;\r\n","import React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport NotificationsActiveIcon from \"@material-ui/icons/NotificationsActive\";\r\nimport Hidden from \"@material-ui/core/Hidden\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    notificationIcon: {\r\n        marginRight: \"0.1rem\",\r\n        marginLeft: \"2rem\", \r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            marginLeft: 0,\r\n        },\r\n    },\r\n    iconText: {\r\n        marginLeft: \"0.25rem\",\r\n        marginRight: \"auto\",\r\n        display: \"flex\",\r\n        alignItems: \"flex-start\",\r\n    },\r\n}));\r\n\r\nconst NotificationIcon: React.FC = () => {\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <>\r\n                <NotificationsActiveIcon\r\n                    className={classes.notificationIcon}\r\n                    color=\"disabled\"\r\n                    aria-label=\"Varslig er slått på.\"\r\n                />\r\n         <Hidden smDown>\r\n                <Typography variant=\"subtitle1\" className={classes.iconText}>\r\n                    Varsel på\r\n                </Typography>\r\n          </Hidden>\r\n        </>\r\n    );\r\n};\r\nexport default NotificationIcon;\r\n","import React, { useState, createContext } from \"react\";\r\nimport { Beredskapsomrade } from \"../../prestSokeResultater/types\";\r\n\r\nexport type PrestContextType = {\r\n    beredskapsomrader: Beredskapsomrade[];\r\n    setBeredskapsomrader: (res: any) => void;\r\n};\r\n\r\nexport const PrestContext = createContext<PrestContextType | {}>({});\r\n\r\ninterface Props {\r\n    children: React.ReactNode;\r\n}\r\n\r\nexport const PrestContextProvider: React.FC<Props> = ({ children }) => {\r\n    const [beredskapsomrader, setBeredskapsomrader] = useState<\r\n        Beredskapsomrade[]\r\n    >([]);\r\n    return (\r\n        <PrestContext.Provider\r\n            value={{\r\n                beredskapsomrader,\r\n                setBeredskapsomrader,\r\n            }}\r\n        >\r\n            {children}\r\n        </PrestContext.Provider>\r\n    );\r\n};\r\n","export const CUSTOM_ERRORS = Object.freeze({\r\n    ValidationError: \"ValidationError\",\r\n    NotFoundError: \"NotFoundError\"\r\n});\r\n\r\nexport const feilmeldinger = {\r\n    ingenOmraderFunnet:\r\n        \"Ingen områder samsvarte med søket ditt på stedsnavn/adresse.\",\r\n    uventetFeil: \"Det har oppstått en uventet feil.\",\r\n    uventetFeilProvPaNytt: \"Det har oppstått en uventet feil. Prøv på nytt\",\r\n    alleredeLagtTil:\r\n        \"har allerede blitt lagt til i beredskapsområdet, og legges ikke til på nytt.\",\r\n    ingenPrestIBeredskap: \"Det er ingen prest i beredskap i dette området.\",\r\n    ingenProsterLagtTilIBispedommet:\r\n        \"Det er ingen proster lagt til i bispedømmet.\",\r\n    ingenPresterLagtTilIOmradet: \"Det er ingen prester lagt til i området.\",\r\n    prestErIkkeLagtTilOmrade: \"Du er ikke lagt til i noen beredskapsområder. Hvis du mener dette er feil, kontakt din leder.\",\r\n    prostErIkkeLagtTilBispedomme: \"Du er ikke lagt til i noen bispedommer. Hvis du mener dette er feil, kontakt din leder.\",\r\n    http: {\r\n        404: \"Denne siden eksisterer ikke. Sjekk om du har skrevet inn riktig addresse i addressefeltet.\",\r\n        401: `Du har ikke tilgang til denne tjenesten. Hvis du mener det er feil, prøv å refresh siden eller lukk nettleseren og prøv igjen`,\r\n        500: \"Det har oppstått en uventet feil\",\r\n    },\r\n    sok: {\r\n        finnerIngenPrest:\r\n            \"Det finnes ingen prest med dette navnet. Søk på nytt.\",\r\n        tomtSok: \"Søket kan ikke være tomt. Skriv inn navnet på en prest.\",\r\n        upresistSok:\r\n            \"Søket ditt er for upresist og gir for mange treff. Vennligst oppgi en mer nøyaktig adresse.\",\r\n    },\r\n};\r\n\r\n\r\nexport const feilmeldingerMedInput = (input:string) => {\r\n    return {\r\n    prostErIkkeLagtTilIBispedommet:  {\r\n        ikkeRegistertIBispedomme: `Du har logget inn med ${input}. Denne e-posten er ikke registrert i noen av bispedømmene i løsningen. `,\r\n        sjekkEpost: `Sjekk at du har brukt riktig e-post og prøv igjen.`,\r\n        forsattFeil: `Hvis du mener noe fortsatt er feil, kontakt din leder for å løse problemet. `,\r\n        prostOgPrest: ` Du kan forsatt oppdatere din egen beredskapsstatus, ved å gå til menyen oppe til venstre og endre visning til \"Prest\".`,\r\n    },\r\n    prestErIkkeLagtTilOmrade:  `Du har logget inn med ${input}. Denne e-posten er ikke registrert i noen av beredskapsområdene i løsningen. \\\r\n                                Sjekk at du har brukt riktig e-post og prøv igjen. \\\r\n                                Hvis du mener noe fortsatt er feil, kontakt din leder for å løse problemet. `,\r\n    }\r\n}\r\n\r\nexport const toastVarslinger = {\r\n    varselPaaIBispedommet: `Du får nå varsel fra dette bispedømmet.`,\r\n    varselAvIBispedommet:  `Du får ikke varsel fra dette bispedømmet.`,\r\n    varselPaaIBeredskapsomradet: `Du får nå varsel fra dette beredskapsområdet.`,\r\n    varselAvIBeredskapsomradet:  `Du får ikke varsel fra dette beredskapsområdet.`,\r\n    uventetFeil: \"Det har oppstått en uventet feil.\",\r\n};\r\n","export class HttpConfig {\r\n    baseUrl: string;\r\n    headers: {};\r\n\r\n    constructor(token: string) {\r\n        this.baseUrl = window.config.apiUrl;\r\n\r\n        this.headers = {\r\n            \"Content-Type\": \"application/json\",\r\n            Authorization: `bearer ${token}`,\r\n        };\r\n    }\r\n}\r\n\r\nexport const baseUrl = window.config.apiUrl;\r\n\r\nexport const defaultHttpConfig = {\r\n    baseUrl,\r\n    headers: {\r\n        \"Content-Type\": \"application/json\",\r\n    },\r\n};\r\n","import axios, { AxiosError, AxiosResponse, AxiosRequestConfig } from \"axios\";\r\nimport { getTokenSilent } from \"../../authentication/authModule\";\r\nimport { HttpConfig, baseUrl, defaultHttpConfig } from \"./HttpConfig\";\r\nimport { CUSTOM_ERRORS, feilmeldinger } from \"../../utils/constants\";\r\n\r\naxios.interceptors.response.use(\r\n    (response: AxiosResponse): AxiosResponse => {\r\n        return response;\r\n    },\r\n    (error) => {\r\n        const clientError =\r\n            error.response &&\r\n            error.response.status >= 400 &&\r\n            error.response.status < 500;\r\n\r\n        if (error.response.status === 403) {\r\n            console.log(\"Forbidden\");\r\n        }\r\n        if (error.response.status === 401) {\r\n            console.log(\"Unauthorized\");\r\n        }\r\n\r\n        if (clientError) {\r\n            console.log(\"Client error\");\r\n        }\r\n    }\r\n);\r\n\r\ninterface ProblemDetails {\r\n    type: string;\r\n    title: string;\r\n    status: number;\r\n    errors: { [key: string]: string[] };\r\n    errorMessage: string;\r\n}\r\n\r\nconst convertToProblemDetails = (\r\n    problemDetailsData: ProblemDetails\r\n): ProblemDetails => {\r\n    const { errors } = problemDetailsData;\r\n\r\n    var errormsg = Object.values(errors)[0][0];\r\n\r\n    return {\r\n        type: problemDetailsData.type,\r\n        title: problemDetailsData.title,\r\n        status: problemDetailsData.status,\r\n        errors: errors,\r\n        errorMessage: errormsg,\r\n    };\r\n};\r\n\r\nconst handleError = (error: AxiosError) => {\r\n    if (error.response) {\r\n        if (error.response.status === 400) {\r\n            const problemDetails = convertToProblemDetails(error.response.data);\r\n            throw new ValidationError(problemDetails.errorMessage);\r\n        }\r\n        else if (error.response.status === 404) {\r\n            const problemDetails = convertToProblemDetails(error.response.data);\r\n            throw new NotFoundError(problemDetails.errorMessage);\r\n        }\r\n        } else {\r\n            throw new Error(feilmeldinger.uventetFeil);\r\n        }\r\n};\r\n\r\nclass ValidationError extends Error {\r\n    constructor(message: string) {\r\n        super(message);\r\n        this.name = CUSTOM_ERRORS.ValidationError;\r\n    }\r\n}\r\n\r\nexport class NotFoundError extends Error {\r\n    constructor(message: string) {\r\n        super(message);\r\n        this.name = CUSTOM_ERRORS.NotFoundError;\r\n    }\r\n}\r\n\r\n\r\nexport const httpClient = (config: HttpConfig = defaultHttpConfig) =>\r\n    axios.create(config);\r\n\r\nexport const httpCall = async (\r\n    url: string,\r\n    options: AxiosRequestConfig\r\n): Promise<any> => {\r\n    const token = await getTokenSilent();\r\n    const config = new HttpConfig(token);\r\n\r\n    try {\r\n        const response = await httpClient(config).request({\r\n            url: baseUrl + url,\r\n            ...options,\r\n        });\r\n        return response.data;\r\n    } catch (e) {\r\n        return handleError(e);\r\n    }\r\n};\r\n\r\nexport const httpGet = async (url: string): Promise<any> => {\r\n    return httpCall(url, { method: \"get\" });\r\n};\r\n\r\nexport const httpPost = async (url: string, body: Object): Promise<any> => {\r\n    return httpCall(url, { data: body, method: \"post\" });\r\n};\r\n\r\nexport const httpPut = async (url: string, body: Object): Promise<any> => {\r\n    return httpCall(url, { data: body, method: \"put\" });\r\n};\r\n\r\nexport const httpDelete = async (url: string): Promise<any> => {\r\n    return httpCall(url, { method: \"delete\" });\r\n};\r\n","import React from \"react\";\r\nimport InfoBox from \"../common/InfoBox\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\nimport { signout } from \"../../authentication/authModule\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport { Theme } from \"@material-ui/core/styles/createMuiTheme\";\r\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\r\nimport ExitToAppIcon from \"@material-ui/icons/ExitToApp\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\ninterface Props {\r\n    errorMessage?: string;\r\n}\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    root: {\r\n        marginTop: \"2rem\",\r\n        textAlign: \"center\",\r\n    },\r\n    errorCodeMessage: {\r\n        margin: \"1rem\",\r\n    },\r\n}));\r\nconst Unauthorized: React.FC<Props> = ({ errorMessage }) => {\r\n    const classes = useStyles();\r\n    return (\r\n        <Container className={classes.root}>\r\n            <InfoBox\r\n                message={feilmeldinger.http[401]}\r\n                icon={<ErrorOutlineIcon />}\r\n            >\r\n                <Typography\r\n                    variant=\"body1\"\r\n                    className={classes.errorCodeMessage}\r\n                >\r\n                    Feil av type: 401.\r\n                </Typography>\r\n                <Button startIcon={<ExitToAppIcon />} onClick={signout}>\r\n                    Logg ut\r\n                </Button>\r\n            </InfoBox>\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default Unauthorized;\r\n","import React, { useState, createContext } from \"react\";\r\nimport { RoleType } from \"../../../utils/types\";\r\n\r\nexport type RoleContextType = {\r\n    role: RoleType;\r\n    roleList: RoleType[];\r\n    setRole: (role: RoleType) => void;\r\n    setRoleList: (roleList: RoleType[]) => void;\r\n};\r\ninterface Props {\r\n    children: React.ReactNode;\r\n}\r\nexport const RoleContext = createContext<RoleContextType | {}>({});\r\n\r\nexport const RoleContextProvider: React.FC<Props> = ({ children }) => {\r\n    const [role, setRole] = useState<RoleType | \"Unknown\">();\r\n    const [roleList, setRoleList] = useState<RoleType[]>([]);\r\n\r\n    return (\r\n        <RoleContext.Provider value={{ setRole, role, roleList, setRoleList }}>\r\n            {children}\r\n        </RoleContext.Provider>\r\n    );\r\n};\r\n\r\nexport default RoleContext;\r\n","import React, { useState, useContext } from \"react\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport List from \"@material-ui/core/List\";\r\nimport SwapHorizIcon from \"@material-ui/icons/SwapHoriz\";\r\nimport ArrowDownIcon from \"@material-ui/icons/KeyboardArrowDownRounded\";\r\nimport ArrowUpIcon from \"@material-ui/icons/KeyboardArrowUpRounded\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport {\r\n    RoleContext,\r\n    RoleContextType,\r\n} from \"../common/contexts/RoleContextProvider\";\r\nimport { roles } from \"../../utils/enum\";\r\nimport RoleViews from \"./RoleViews\";\r\n\r\nexport enum ROLLE {\r\n    prest = 0,\r\n    prostOgBeredskapsansvarlig = 1,\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    list: {\r\n        marginTop: \"2rem\",\r\n        paddingBottom: \"0rem\",\r\n    },\r\n    listItem: {\r\n        paddingLeft: \"2rem\",\r\n    },\r\n    listIcon: {\r\n        minWidth: \"2.5rem\",\r\n    },\r\n}));\r\n\r\nconst SettingsMenu: React.FC = () => {\r\n    const [state, setState] = useState({\r\n        visRoller: false,\r\n        visOmrader: false,\r\n    });\r\n    const { roleList } = useContext(RoleContext) as RoleContextType;\r\n\r\n    const visRoller = () => {\r\n        setState({\r\n            ...state,\r\n            visRoller: !state.visRoller,\r\n        });\r\n    };\r\n\r\n    const menuItems = [\r\n        {\r\n            icon: <SwapHorizIcon />,\r\n            label: \"Endre visning\",\r\n            isVisibleForUser:\r\n                roleList.includes(roles.PREST) &&\r\n                roleList.includes(roles.PROST),\r\n            content: (\r\n                <IconButton onClick={visRoller}>\r\n                    {state.visRoller ? (\r\n                        <ArrowUpIcon id=\"arrowUp\" />\r\n                    ) : (\r\n                        <ArrowDownIcon id=\"arrowDown\" />\r\n                    )}\r\n                </IconButton>\r\n            ),\r\n            expandedContent: <>{state.visRoller && <RoleViews />}</>,\r\n            onClick: () => visRoller(),\r\n        },\r\n    ];\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <List className={classes.list}>\r\n            {menuItems\r\n                .filter((i) => i.isVisibleForUser)\r\n                .map((item, i) => (\r\n                    <div key={i}>\r\n                        <ListItem\r\n                            className={classes.listItem}\r\n                            onClick={item.onClick}\r\n                            button\r\n                        >\r\n                            <ListItemIcon className={classes.listIcon}>\r\n                                {item.icon}\r\n                            </ListItemIcon>\r\n                            <ListItemText primary={item.label} />\r\n                            {item.content || null}\r\n                        </ListItem>\r\n                        {item.expandedContent || null}\r\n                    </div>\r\n                ))}\r\n        </List>\r\n    );\r\n};\r\n\r\nexport default SettingsMenu;\r\n","export const isIOsInStandaloneMode = () => {\r\n    const windowNavigator: any = window.navigator;\r\n\r\n    const userAgent = windowNavigator.userAgent.toLowerCase();\r\n\r\n    if (/iphone|ipad|ipod/.test(userAgent)) {\r\n        return \"standalone\" in windowNavigator && windowNavigator.standalone;\r\n    }\r\n    return false;\r\n};\r\n","import React from \"react\";\r\nimport { makeStyles, Theme, useTheme } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    imageWrapper: {\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            paddingTop: \"2rem\",\r\n            paddingLeft: \"2rem\",\r\n            paddingBottom: \"2rem\",\r\n        },\r\n        paddingTop: \"1rem\",\r\n        paddingLeft: \"2rem\",\r\n    },\r\n}));\r\n\r\nconst KirkeLogo: React.FC = () => {\r\n    const classes = useStyles();\r\n    const theme = useTheme();\r\n    const isOnMobile = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n\r\n    return (\r\n        <div className={classes.imageWrapper}>\r\n            <img\r\n                src=\"/images/logo-kirken.svg\"\r\n                alt=\"kirke logo\"\r\n                width={isOnMobile ? \"70%\" : \"60%\"}\r\n                height=\"auto\"\r\n            />\r\n        </div>\r\n    );\r\n};\r\nexport default KirkeLogo;\r\n","import React, { useState } from \"react\";\r\nimport SwipeableDrawer from \"@material-ui/core/SwipeableDrawer\";\r\nimport MenuIcon from \"@material-ui/icons/Menu\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport ChevronLeftIcon from \"@material-ui/icons/ChevronLeft\";\r\nimport { makeStyles, Theme, useTheme } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport KirkeLogo from \"../settings/KirkeLogo\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    menuButtonInDrawerContainer: {\r\n        display: \"flex\",\r\n\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            justifyContent: \"flex-end\",\r\n        },\r\n        justifyContent: \"space-between\",\r\n        alignItems: \"flex-start\",\r\n        marginTop: \"0.5rem\",\r\n    },\r\n    menuButtonHeader: {\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n        \"&:hover\": {\r\n            cursor: \"pointer\",\r\n        },\r\n    },\r\n    menuButtonInDrawerWrapper: {\r\n        [theme.breakpoints.up(\"lg\")]: {\r\n            marginRight: \"2rem\",\r\n        },\r\n        \"&:hover\": {\r\n            cursor: \"pointer\",\r\n        },\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    children: React.ReactNode;\r\n}\r\n\r\nconst Drawer: React.FC<Props> = ({ children }) => {\r\n    const [state, setState] = useState({\r\n        isOpen: false,\r\n    });\r\n\r\n    const handleClickOpen = () => {\r\n        setState({ ...state, isOpen: !state.isOpen });\r\n    };\r\n\r\n    const toggleDrawer = (open: boolean) => (\r\n        event: React.KeyboardEvent | React.MouseEvent\r\n    ) => {\r\n        if (\r\n            event &&\r\n            event.type === \"keydown\" &&\r\n            ((event as React.KeyboardEvent).key === \"Tab\" ||\r\n                (event as React.KeyboardEvent).key === \"Shift\")\r\n        ) {\r\n            return;\r\n        }\r\n\r\n        setState({ ...state, isOpen: open });\r\n    };\r\n    const classes = useStyles();\r\n    const theme = useTheme();\r\n    const isOnMobileDevice = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n\r\n    const Logo = () => {\r\n        return isOnMobileDevice ? <></> : <KirkeLogo />;\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <div className={classes.menuButtonHeader} onClick={handleClickOpen}>\r\n                {isOnMobileDevice ? (\r\n                    <IconButton>\r\n                        <MenuIcon />\r\n                    </IconButton>\r\n                ) : (\r\n                    <Button size=\"large\" endIcon={<MenuIcon />} variant=\"text\">\r\n                        Meny\r\n                    </Button>\r\n                )}\r\n            </div>\r\n            <SwipeableDrawer\r\n                open={state.isOpen}\r\n                onOpen={toggleDrawer(true)}\r\n                onClose={toggleDrawer(false)}\r\n                anchor={isOnMobileDevice ? \"left\" : \"top\"}\r\n            >\r\n                <Container className={classes.menuButtonInDrawerContainer}>\r\n                    <Logo />\r\n                    <div\r\n                        className={classes.menuButtonInDrawerWrapper}\r\n                        onClick={toggleDrawer(false)}\r\n                    >\r\n                        <IconButton>\r\n                            {isOnMobileDevice ? (\r\n                                <ChevronLeftIcon />\r\n                            ) : (\r\n                                <CloseIcon />\r\n                            )}\r\n                        </IconButton>\r\n                    </div>\r\n                </Container>\r\n                {children}\r\n            </SwipeableDrawer>\r\n        </>\r\n    );\r\n};\r\n\r\nexport default Drawer;\r\n","import React, { useContext } from \"react\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport Avatar from \"@material-ui/core/Avatar\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { RootState } from \"../../store/combinedReducers\";\r\nimport Telephonenumber from \"../common/TelephoneNumber\";\r\nimport {\r\n    RoleContext,\r\n    RoleContextType,\r\n} from \"../common/contexts/RoleContextProvider\";\r\nimport UserContext, {\r\n    UserContextType,\r\n} from \"../common/contexts/UserContextProvider\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    userInfo: {\r\n        padding: \"2rem 2rem 2rem 2rem\",\r\n    },\r\n    name: {\r\n        marginBottom: \"1rem\",\r\n        marginTop: \"1rem\",\r\n    },\r\n    body: {\r\n        marginBottom: \"0.5rem\",\r\n        fontSize: \"1rem\",\r\n    },\r\n    avatar: {\r\n        marginBottom: \"0.5rem\",\r\n        width: theme.spacing(7),\r\n        height: theme.spacing(7),\r\n    },\r\n    userInfoWrapper: {\r\n        display: \"flex\",\r\n    },\r\n    userTitles: {\r\n        marginRight: \"1rem\",\r\n    },\r\n}));\r\nconst UserInfo: React.FC = () => {\r\n    const classes = useStyles();\r\n    const { role } = useContext(RoleContext) as RoleContextType;\r\n    const { user, userPhoto } = useContext(UserContext) as UserContextType;\r\n\r\n    const email = useSelector((state: RootState) => {\r\n        if (state.accountReducer.account !== undefined) {\r\n            return state.accountReducer.account.username;\r\n        } else {\r\n            return \"\";\r\n        }\r\n    });\r\n\r\n    return (\r\n        <div className={classes.userInfo}>\r\n            <Avatar\r\n                className={classes.avatar}\r\n                src={`data:image/jpeg;base64, ${userPhoto}`}\r\n            />\r\n            <Typography variant=\"h5\" className={classes.name}>\r\n                {user?.name}\r\n            </Typography>\r\n            <div className={classes.userInfoWrapper}>\r\n                <div className={classes.userTitles}>\r\n                    <Typography className={classes.body}>Din rolle:</Typography>\r\n                    <Typography className={classes.body}>E-post:</Typography>\r\n                    <Typography className={classes.body}>Telefon:</Typography>\r\n                </div>\r\n                <div>\r\n                    <Typography className={classes.body}>{role}</Typography>\r\n                    <Typography className={classes.body}>{email}</Typography>\r\n                    <Typography className={classes.body}>\r\n                        <Telephonenumber telephonenumber={user?.mobilephone} />\r\n                    </Typography>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\nexport default UserInfo;\r\n","import React, { useContext, useState } from \"react\";\r\nimport Radio from \"@material-ui/core/Radio\";\r\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport {\r\n    RoleContext,\r\n    RoleContextType,\r\n} from \"../common/contexts/RoleContextProvider\";\r\nimport { roles } from \"../../utils/enum\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    radioButtonGroup: {\r\n        marginLeft: \"4.3rem\",\r\n    },\r\n}));\r\n\r\nconst RoleViews: React.FC = () => {\r\n    const [rolle, setRolle] = useState(\"prest\");\r\n\r\n    const classes = useStyles();\r\n    const history = useHistory();\r\n    const { roleList, setRole } = useContext(RoleContext) as RoleContextType;\r\n    const handleChangeRadio = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        setRolle(event.target.value);\r\n    };\r\n    const handleRedirect = (role: any) => {\r\n        if (role === roles.PROST) {\r\n            setRole(roles.PROST);\r\n            history.push(\"/bispedommer\");\r\n        }\r\n\r\n        if (role === roles.PREST) {\r\n            setRole(roles.PREST);\r\n            history.push(\"/prest\");\r\n        }\r\n    };\r\n    return (\r\n        <FormControl>\r\n            <RadioGroup\r\n                className={classes.radioButtonGroup}\r\n                aria-label=\"rolle\"\r\n                name=\"rolle\"\r\n                value={rolle}\r\n                onChange={handleChangeRadio}\r\n            >\r\n                {roleList.map((role, i) => (\r\n                    <div onClick={() => handleRedirect(role)} key={i}>\r\n                        <FormControlLabel\r\n                            control={<Radio color=\"primary\" />}\r\n                            label={role}\r\n                            value={role}\r\n                        />\r\n                    </div>\r\n                ))}\r\n            </RadioGroup>\r\n        </FormControl>\r\n    );\r\n};\r\n\r\nexport default RoleViews;\r\n","export enum Role {\r\n    PREST = \"prest\",\r\n    PROST = \"prost\"\r\n}\r\n","import React from \"react\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport ExitToAppIcon from \"@material-ui/icons/ExitToApp\";\r\nimport { signout } from \"../../authentication/authModule\";\r\nimport List from \"@material-ui/core/List\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    listItem: {\r\n        paddingLeft: \"2rem\",\r\n        marginBottom: \"1rem\",\r\n    },\r\n    listIcon: {\r\n        minWidth: \"2.5rem\",\r\n    },\r\n}));\r\n\r\nexport const LogoutListItem: React.FC = () => {\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <ListItem button className={classes.listItem} onClick={signout}>\r\n            <ListItemIcon className={classes.listIcon}>\r\n                <ExitToAppIcon />\r\n            </ListItemIcon>\r\n            <ListItemText primary={\"Logg ut\"} />\r\n        </ListItem>\r\n    );\r\n};\r\nconst Logout: React.FC = () => {\r\n    return (\r\n        <List>\r\n            <LogoutListItem />\r\n        </List>\r\n    );\r\n};\r\nexport default Logout;\r\n","import React from \"react\";\r\nimport UserInfo from \"../UserInfo\";\r\nimport SettingsMenu from \"../SettingsMenu\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport Logout from \"../Logout\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        height: \"100%\",\r\n        display: \"flex\",\r\n        justifyContent: \"space-between\",\r\n    },\r\n    settingsMenu: {\r\n        alignSelf: \"center\",\r\n        paddingRight: \"2rem\",\r\n    },\r\n}));\r\n\r\nconst DesktopView: React.FC = () => {\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <Container className={classes.root}>\r\n            <UserInfo />\r\n            <div className={classes.settingsMenu}>\r\n                <SettingsMenu />\r\n                <Logout />\r\n            </div>\r\n        </Container>\r\n    );\r\n};\r\n\r\nexport default DesktopView;\r\n","import React from \"react\";\r\nimport UserInfo from \"../UserInfo\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport SettingsMenu from \"../SettingsMenu\";\r\nimport Logout from \"../Logout\";\r\nimport KirkeLogo from \"../KirkeLogo\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        height: \"100%\",\r\n        display: \"flex\",\r\n        flexDirection: \"column\",\r\n    },\r\n    content: {\r\n        flexGrow: 1,\r\n    },\r\n    list: {\r\n        width: \"18rem\",\r\n    },\r\n}));\r\n\r\nconst MobileView: React.FC = () => {\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <div role=\"presentation\" className={classes.root}>\r\n            <div className={classes.content}>\r\n                <UserInfo />\r\n                <br></br>\r\n                <Divider />\r\n\r\n                <SettingsMenu />\r\n            </div>\r\n            <Logout />\r\n            <Divider />\r\n            <KirkeLogo />\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default MobileView;\r\n","import React from \"react\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\nimport DesktopView from \"./desktop/DesktopView\";\r\nimport MobileView from \"./mobile/MobileView\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\n\r\nconst Settings: React.FC = () => {\r\n    const theme = useTheme();\r\n    const isOnMobileDevice = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n\r\n    return <>{isOnMobileDevice ? <MobileView /> : <DesktopView />}</>;\r\n};\r\n\r\nexport default Settings;\r\n","import React from \"react\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport SyncRoundedIcon from \"@material-ui/icons/SyncRounded\";\r\nimport { isIOsInStandaloneMode } from \"../../utils/isIOsInStandaloneMode\";\r\nimport Drawer from \"../common/Drawer\";\r\nimport Settings from \"../settings/Settings\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport { makeStyles, Theme, useTheme } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    root: {\r\n        flexGrow: 1,\r\n    },\r\n    logo: {\r\n        cursor: \"pointer\",\r\n        paddingLeft: \"1rem\",\r\n    },\r\n    wrapper: {\r\n        display: \"flex\",\r\n        justifyContent: \"space-between\",\r\n    },\r\n}));\r\n\r\nconst Header: React.FC = () => {\r\n    const classes = useStyles();\r\n\r\n    const refreshPage = () => {\r\n        window.location.assign(window.location.pathname);\r\n    };\r\n    const theme = useTheme();\r\n    const isOnMobile = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n    const history = useHistory();\r\n\r\n    const navigateHome = () => {\r\n        history.push(\"/\");\r\n    };\r\n\r\n    const Logo: React.FC = () => {\r\n        if (isOnMobile || isIOsInStandaloneMode()) {\r\n            return <></>;\r\n        }\r\n        return (\r\n            <img\r\n                className={classes.logo}\r\n                src=\"/images/logo-kirken.svg\"\r\n                alt=\"kirke logo\"\r\n                width=\"180px\"\r\n                height=\"auto\"\r\n                onClick={navigateHome}\r\n            />\r\n        );\r\n    };\r\n\r\n    return (\r\n        <AppBar\r\n            elevation={0}\r\n            position=\"static\"\r\n            color=\"inherit\"\r\n            className={classes.root}\r\n        >\r\n            <Container>\r\n                <Toolbar className={classes.wrapper}>\r\n                    <Logo />\r\n                    {isIOsInStandaloneMode() && (\r\n                        <Button\r\n                            endIcon={<SyncRoundedIcon />}\r\n                            onClick={refreshPage}\r\n                        >\r\n                            Oppdater status\r\n                        </Button>\r\n                    )}\r\n                    <Drawer>\r\n                        <Settings />\r\n                    </Drawer>\r\n                </Toolbar>\r\n            </Container>\r\n        </AppBar>\r\n    );\r\n};\r\n\r\nexport default Header;\r\n","import { TokenType } from \"../utils/types\";\r\nimport { roles } from \"./enum\";\r\n\r\nexport const getRoleByPriority = (token: TokenType) => {\r\n    if (token.roles.includes(roles.ADMIN)) {\r\n        return roles.ADMIN;\r\n    }\r\n    if (token.roles.includes(roles.BEREDSKAPSANSVARLIG)) {\r\n        return roles.BEREDSKAPSANSVARLIG;\r\n    }\r\n    if (token.roles.includes(roles.PROST)) {\r\n        return roles.PROST;\r\n    }\r\n    if (token.roles.includes(roles.PREST)) {\r\n        return roles.PREST;\r\n    }\r\n    if (token.roles.includes(roles.SECURITAS)) {\r\n        return roles.SECURITAS;\r\n    }\r\n    return \"Unknown\";\r\n};\r\n","import React from \"react\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    button: {\r\n        marginRight: \"1rem\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    handleClose: () => void;\r\n    updateServiceWorker: () => void;\r\n}\r\nconst Alertcontent: React.FC<Props> = ({\r\n    handleClose,\r\n    updateServiceWorker,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <div>\r\n            <Button\r\n                size=\"small\"\r\n                className={classes.button}\r\n                style={{ color: \"#A4C6FF\" }}\r\n                onClick={updateServiceWorker}\r\n            >\r\n                Oppdater\r\n            </Button>\r\n            <IconButton\r\n                data-testid=\"closeButton\"\r\n                size=\"small\"\r\n                color=\"inherit\"\r\n                aria-label=\"lukk\"\r\n                onClick={handleClose}\r\n            >\r\n                <CloseIcon fontSize=\"small\" />\r\n            </IconButton>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default Alertcontent;\r\n","import React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { RootState } from \"../../store/combinedReducers\";\r\nimport Snackbar from \"@material-ui/core/Snackbar\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport AlertContent from \"./AlertContent\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    snackbar: {\r\n        background: theme.palette.primary.main,\r\n    },\r\n}));\r\n\r\nconst ServiceWorkerAlert = () => {\r\n    const classes = useStyles();\r\n    const dispatch = useDispatch();\r\n\r\n    const isServiceWorkerUpdated = useSelector(\r\n        (state: RootState) => state.serviceWorkerReducer.serviceWorkerUpdated\r\n    );\r\n\r\n    const serviceWorkerRegistration = useSelector(\r\n        (state: RootState) =>\r\n            state.serviceWorkerReducer.serviceWorkerRegistration\r\n    );\r\n\r\n    const updateServiceWorker = () => {\r\n        const registrationWaiting = serviceWorkerRegistration.waiting;\r\n        if (registrationWaiting) {\r\n            registrationWaiting.postMessage({ type: \"SKIP_WAITING\" });\r\n\r\n            registrationWaiting.addEventListener(\"statechange\", (e: any) => {\r\n                if (e.target.state === \"activated\") {\r\n                    window.location.reload();\r\n                }\r\n            });\r\n        } else {\r\n            window.location.reload();\r\n        }\r\n    };\r\n\r\n    const handleClose = () => {\r\n        dispatch({ type: \"SW_UPDATE\", payload: {} });\r\n    };\r\n\r\n    return (\r\n        <div>\r\n            {isServiceWorkerUpdated && (\r\n                <Snackbar\r\n                    className={classes.snackbar}\r\n                    message=\"En ny oppdatering er tilgjengelig. Du blir ikke logget ut.\"\r\n                    anchorOrigin={{ vertical: \"top\", horizontal: \"center\" }}\r\n                    open={isServiceWorkerUpdated}\r\n                    onClose={handleClose}\r\n                    action={\r\n                        <AlertContent\r\n                            handleClose={handleClose}\r\n                            updateServiceWorker={updateServiceWorker}\r\n                        />\r\n                    }\r\n                />\r\n            )}\r\n        </div>\r\n    );\r\n};\r\nexport default ServiceWorkerAlert;\r\n","import React from \"react\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { Column } from \"./types\";\r\nimport Hidden from \"@material-ui/core/Hidden\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        fontWeight: 700,\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    columns: Column[];\r\n}\r\n\r\nconst TableHeader: React.FC<Props> = ({ columns }) => {\r\n    const classes = useStyles();\r\n    return (\r\n        <TableHead>\r\n            <TableRow>\r\n                {columns.map((header, i) => (\r\n                    <Hidden key={i} smDown={header.hideOnMobile}>\r\n                        <TableCell key={header.path} className={classes.root}>\r\n                            {header.content && header.content()}\r\n                            {header.label}\r\n                        </TableCell>\r\n                    </Hidden>\r\n                ))}\r\n            </TableRow>\r\n        </TableHead>\r\n    );\r\n};\r\n\r\nexport default TableHeader;\r\n","import React from \"react\";\r\nimport TableBodyMUI from \"@material-ui/core/TableBody\";\r\n\r\ninterface Props {\r\n    data: Array<any>;\r\n    children: (item: any, key: number) => React.ReactNode;\r\n}\r\n\r\nconst TableBodyWrapper: React.FC<Props> = ({ data, children }) => {\r\n    return (\r\n        <TableBodyMUI>\r\n            {data.map((item: any, key: number) => children(item, key))}\r\n        </TableBodyMUI>\r\n    );\r\n};\r\n\r\nexport default TableBodyWrapper;\r\n","import React from \"react\";\r\nimport TableMUI from \"@material-ui/core/Table\";\r\nimport TableHeader from \"./TableHeader\";\r\nimport { Column } from \"./types\";\r\nimport TableBodyWrapper from \"../common/TableBodyWrapper\";\r\n\r\ninterface Props {\r\n    columns: Column[];\r\n    data: Array<any>;\r\n    children: (item: any, key: number) => React.ReactNode;\r\n}\r\n\r\nconst Table: React.FC<Props> = ({ columns, data, children }) => {\r\n    return (\r\n        <TableMUI>\r\n            <TableHeader columns={columns} />\r\n            <TableBodyWrapper data={data}>\r\n                {(item: any, key: number) => children(item, key)}\r\n            </TableBodyWrapper>\r\n        </TableMUI>\r\n    );\r\n};\r\n\r\nexport default Table;\r\n","import React, { useState, createContext } from \"react\";\r\nimport { Prest } from \"../../../store/prester/types\";\r\nimport { customToast } from \"../../../services/varslinger/varslingsService\";\r\n\r\nexport type BeredskapsContextType = {\r\n    data: any;\r\n    updateIBeredskap: (prestId: number, iBeredskap: boolean) => void;\r\n    removePrest: (prestId: number) => void;\r\n    setData: (res: any) => void;\r\n    leggTilPrest: (prest: Prest) => void;\r\n    getPrestIBeredskap: () => Prest[];\r\n};\r\n\r\nexport const BeredskapsomradeContext = createContext<\r\n    BeredskapsContextType | {}\r\n>({});\r\n\r\ninterface Props {\r\n    children: React.ReactNode;\r\n}\r\n\r\nexport const BeredskapsomradeProvider: React.FC<Props> = ({ children }) => {\r\n    const [data, setData] = useState({\r\n        beredskapsomrade: {\r\n            id: 0,\r\n            bispedommeNavn: \"\",\r\n            navn: \"\",\r\n            kommuner: [\r\n                {\r\n                    navn: \"\",\r\n                    kommuneNr: \"\",\r\n                },\r\n            ],\r\n            varsel: undefined,\r\n        },\r\n        prester: [] as Prest[],\r\n    });\r\n\r\n    const removePrest = (prestId: number) => {\r\n        setData((previousState) => ({\r\n            ...previousState,\r\n            prester: previousState.prester.filter(\r\n                (p: Prest) => p.id !== prestId\r\n            ),\r\n        }));\r\n        customToast.success(\"Prest ble fjernet fra området.\");\r\n    };\r\n\r\n    const leggTilPrest = (prest: Prest) => {\r\n        setData((previousState) => ({\r\n            ...previousState,\r\n            prester: [...previousState.prester, prest],\r\n        }));\r\n        customToast.success(\"Prest ble lagt til i området.\");\r\n    };\r\n\r\n    const updateIBeredskap = (prestId: number, iBeredskap: boolean) => {\r\n        const oppdatertePrester = data.prester.map((prest) =>\r\n            prest.id === prestId ? { ...prest, iBeredskap } : prest\r\n        );\r\n        setData((previousState) => ({\r\n            ...previousState,\r\n            prester: oppdatertePrester,\r\n        }));\r\n    };\r\n\r\n    const getPrestIBeredskap = () => {\r\n        return data.prester.filter((p) => p.iBeredskap);\r\n    };\r\n\r\n    return (\r\n        <BeredskapsomradeContext.Provider\r\n            value={{\r\n                data,\r\n                setData,\r\n                updateIBeredskap,\r\n                removePrest,\r\n                leggTilPrest,\r\n                getPrestIBeredskap,\r\n            }}\r\n        >\r\n            {children}\r\n        </BeredskapsomradeContext.Provider>\r\n    );\r\n};\r\n","import React, { useContext, useState } from \"react\";\r\nimport DialogBox from \"../common/DialogBox\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport { Prest } from \"../../store/prester/types\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { httpDelete } from \"../../services/http/httpService\";\r\nimport {\r\n    BeredskapsomradeContext,\r\n    BeredskapsContextType,\r\n} from \"../beredskapsomrade/contexts/beredskapsomradeContext\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\n\r\ninterface Props {\r\n    omradeId: string;\r\n    open: boolean;\r\n    setOpen: (open: boolean) => void;\r\n    prest: Prest;\r\n}\r\n\r\nconst RemovePrestDialogBox: React.FC<Props> = ({\r\n    omradeId,\r\n    open,\r\n    setOpen,\r\n    prest,\r\n}) => {\r\n    const [loading, setLoading] = useState(false);\r\n    const [error, setError] = useState(null);\r\n\r\n    const { removePrest } = useContext(\r\n        BeredskapsomradeContext\r\n    ) as BeredskapsContextType;\r\n\r\n    const handleClose = () => {\r\n        setOpen(false);\r\n        setError(null);\r\n    };\r\n\r\n    const handleRemovePrest = async () => {\r\n        setLoading(true);\r\n        try {\r\n            await httpDelete(\r\n                `api/Beredskapsomrader/${omradeId}/prest/${prest.id}`\r\n            );\r\n\r\n            removePrest(prest.id);\r\n            setError(null);\r\n            setOpen(false);\r\n        } catch (e) {\r\n            setError(e);\r\n        } finally {\r\n            setLoading(false);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <DialogBox\r\n                handleClick={handleRemovePrest}\r\n                title=\"\"\r\n                buttonText={prest.iBeredskap ? \"\" : \"Fjern\"}\r\n                cancelButtonText={prest.iBeredskap ? \"OK\" : \"Avbryt\"}\r\n                open={open}\r\n                handleClose={handleClose}\r\n                loading={loading}\r\n                error={error ? feilmeldinger.uventetFeilProvPaNytt : \"\"}\r\n            >\r\n                <Container>\r\n                    {prest.iBeredskap ? (\r\n                        <Typography variant=\"h6\">\r\n                            Du kan ikke fjerne en prest som er i aktiv\r\n                            beredskap. Sett {prest.navn} av beredskap først, og\r\n                            så kan du slette presten fra beredskapsområdet.\r\n                        </Typography>\r\n                    ) : (\r\n                        <Typography variant=\"h6\">\r\n                            Er du sikker på at du vil fjerne {prest.navn} fra\r\n                            beredskapsområdet?\r\n                        </Typography>\r\n                    )}\r\n                </Container>\r\n            </DialogBox>\r\n        </>\r\n    );\r\n};\r\nexport default RemovePrestDialogBox;\r\n","import React, { useState } from \"react\";\r\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\r\nimport { IconButton, Menu, MenuItem } from \"@material-ui/core\";\r\n\r\ninterface Props {\r\n    menuItems: MenuItem[];\r\n}\r\n\r\nexport type MenuItem = {\r\n    menuItemText: string;\r\n    setOpen: (open: boolean) => void;\r\n};\r\n\r\nconst SettingsMenu: React.FC<Props> = ({ menuItems }) => {\r\n    const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\r\n    const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n        setAnchorEl(event.currentTarget);\r\n    };\r\n\r\n    const handleClose = () => {\r\n        setAnchorEl(null);\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <IconButton\r\n                aria-label=\"settings\"\r\n                aria-controls=\"settings-menu\"\r\n                aria-haspopup=\"true\"\r\n                onClick={handleClick}\r\n            >\r\n                <MoreVertIcon />\r\n            </IconButton>\r\n\r\n            <Menu\r\n                id=\"settings-menu\"\r\n                anchorEl={anchorEl}\r\n                keepMounted\r\n                open={Boolean(anchorEl)}\r\n                onClose={handleClose}\r\n            >\r\n                {menuItems.map((item, i) => (\r\n                    <MenuItem\r\n                        onClick={() => {\r\n                            handleClose();\r\n                            item.setOpen(true);\r\n                        }}\r\n                        key={i}\r\n                    >\r\n                        {item.menuItemText}\r\n                    </MenuItem>\r\n                ))}\r\n            </Menu>\r\n        </>\r\n    );\r\n};\r\n\r\nexport default SettingsMenu;\r\n","import React, { useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { Prest } from \"../../store/prester/types\";\r\nimport RemovePrestDialogBox from \"./RemovePrestDialogBox\";\r\nimport SettingsMenu from \"../common/SettingsMenu\";\r\n\r\ninterface Props {\r\n    prest: Prest;\r\n}\r\n\r\ninterface ParamTypes {\r\n    beredskapsomrade_id: string;\r\n}\r\n\r\nconst PrestSettingsMenu: React.FC<Props> = ({ prest }) => {\r\n    const { beredskapsomrade_id } = useParams<ParamTypes>();\r\n    const [open, setOpen] = useState(false);\r\n\r\n    return (\r\n        <>\r\n            <SettingsMenu\r\n                menuItems={[\r\n                    {\r\n                        menuItemText: \"Fjern prest fra området\",\r\n                        setOpen: setOpen,\r\n                    },\r\n                ]}\r\n            />\r\n\r\n            <RemovePrestDialogBox\r\n                omradeId={beredskapsomrade_id}\r\n                open={open}\r\n                setOpen={setOpen}\r\n                prest={prest}\r\n            />\r\n        </>\r\n    );\r\n};\r\n\r\nexport default PrestSettingsMenu;\r\n","import React, { useState, useContext } from \"react\";\r\nimport DialogBox from \"../common/DialogBox\";\r\nimport { httpPut } from \"../../services/http/httpService\";\r\nimport {\r\n    BeredskapsomradeContext,\r\n    BeredskapsContextType,\r\n} from \"../beredskapsomrade/contexts/beredskapsomradeContext\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { Prest } from \"../../store/prester/types\";\r\nimport { customToast } from \"../../services/varslinger/varslingsService\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    chip: {\r\n        background: \"#F4D150\",\r\n        color: theme.palette.common.black,\r\n    },\r\n    dialogContent: {\r\n        marginTop: \"16px\",\r\n        marginBottom: \"16px\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    prest: Prest;\r\n}\r\n\r\ninterface ParamTypes {\r\n    beredskapsomrade_id: string;\r\n}\r\n\r\nconst ToggleBeredskapDialogBox: React.FC<Props> = ({ prest }) => {\r\n    const [open, setOpen] = useState<boolean>(false);\r\n    const [loading, setLoading] = useState(false);\r\n\r\n    const { iBeredskap } = prest;\r\n    const { updateIBeredskap } = useContext(\r\n        BeredskapsomradeContext\r\n    ) as BeredskapsContextType;\r\n    const classes = useStyles();\r\n\r\n    const { beredskapsomrade_id } = useParams<ParamTypes>();\r\n\r\n    const handleClose = () => {\r\n        setOpen(false);\r\n    };\r\n\r\n    const successText = iBeredskap\r\n        ? \"Prest er satt av beredskap, og har fått beskjed på SMS\"\r\n        : \"Prest er satt i beredskap, og har fått beskjed på SMS\";\r\n    const warningText = iBeredskap\r\n        ? \"Prest er satt av beredskap, men har ikke har fått beskjed på SMS\"\r\n        : \"Prest er satt i beredskap, men har ikke har fått beskjed på SMS\";\r\n\r\n    const handleToggleBeredskap = async () => {\r\n        setLoading(true);\r\n\r\n        try {\r\n            const response = await httpPut(\r\n                `api/Beredskapsomrader/${beredskapsomrade_id}/prest`,\r\n                {\r\n                    prestId: prest.id,\r\n                    beredskapsomradeId: parseInt(beredskapsomrade_id),\r\n                    iBeredskap: !iBeredskap,\r\n                }\r\n            );\r\n\r\n            updateIBeredskap(prest.id, response.iBeredskap);\r\n\r\n            response.notificationIsSent\r\n                ? customToast.success(successText)\r\n                : customToast.warning(warningText);\r\n        } catch (e) {\r\n            customToast.error(feilmeldinger.uventetFeil);\r\n        } finally {\r\n            setLoading(false);\r\n            setOpen(false);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <Checkbox\r\n                id=\"toggleBeredskap\"\r\n                disabled={loading}\r\n                color=\"primary\"\r\n                checked={iBeredskap}\r\n                onChange={() => setOpen(true)}\r\n                value={iBeredskap}\r\n            />\r\n            <DialogBox\r\n                open={open}\r\n                handleClick={handleToggleBeredskap}\r\n                title=\"\"\r\n                buttonText=\"Ja\"\r\n                loading={loading}\r\n                handleClose={handleClose}\r\n            >\r\n                <Typography variant=\"h6\" className={classes.dialogContent}>\r\n                    {`Er du sikker på at du vil sette ${prest.navn} ${\r\n                        iBeredskap ? \"av\" : \"i\"\r\n                    } beredskap?`}\r\n                </Typography>\r\n            </DialogBox>\r\n        </>\r\n    );\r\n};\r\nexport default ToggleBeredskapDialogBox;\r\n","import React, { useContext } from \"react\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport Hidden from \"@material-ui/core/Hidden\";\r\nimport { Prest } from \"../../store/prester/types\";\r\nimport PrestSettingsMenu from \"./prestSettingsMenu\";\r\nimport {\r\n    RoleContext,\r\n    RoleContextType,\r\n} from \"../common/contexts/RoleContextProvider\";\r\nimport { roles } from \"../../utils/enum\";\r\nimport TelephoneNumber from \"../common/TelephoneNumber\";\r\nimport ToggleBeredskapDialogBox from \"../beredskapsomrade/ToggleBeredskapDialogBox\";\r\n\r\ninterface Props {\r\n    prest: Prest;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    chip: {\r\n        background: \"#43a047\",\r\n        color: theme.palette.common.black,\r\n    },\r\n    statusColumn: {\r\n        width: 327,\r\n    },\r\n    errorMessage: {\r\n        color: theme.palette.error.main,\r\n    },\r\n    moreOptions: {\r\n        textAlign: \"end\",\r\n    },\r\n}));\r\n\r\nconst PresterTableRow: React.FC<Props> = ({ prest }) => {\r\n    const { iBeredskap } = prest;\r\n    const { role } = useContext(RoleContext) as RoleContextType;\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <TableRow hover>\r\n            <TableCell>{prest.navn}</TableCell>\r\n            <Hidden smDown>\r\n                <TableCell>\r\n                    <TelephoneNumber telephonenumber={prest.telefonnummer} />\r\n                </TableCell>\r\n            </Hidden>\r\n            <TableCell>\r\n                <ToggleBeredskapDialogBox prest={prest} />\r\n            </TableCell>\r\n            <Hidden smDown>\r\n                <TableCell className={classes.statusColumn}>\r\n                    {iBeredskap && (\r\n                        <Chip label=\"I BEREDSKAP\" className={classes.chip} />\r\n                    )}\r\n                </TableCell>\r\n            </Hidden>\r\n            {role !== roles.PROST && (\r\n                <TableCell className={classes.moreOptions}>\r\n                    <PrestSettingsMenu prest={prest} />\r\n                </TableCell>\r\n            )}\r\n        </TableRow>\r\n    );\r\n};\r\n\r\nexport default PresterTableRow;\r\n","import React, { useContext, useState } from \"react\";\r\nimport Tabell from \"../common/Table\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { Prest } from \"../../store/prester/types\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\nimport {\r\n    RoleContext,\r\n    RoleContextType,\r\n} from \"../common/contexts/RoleContextProvider\";\r\nimport { roles } from \"../../utils/enum\";\r\nimport PresterTableRow from \"../prester/PresterTableRow\";\r\nimport TableSortLabel from \"@material-ui/core/TableSortLabel\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    icon: {\r\n        float: \"right\",\r\n    },\r\n    message: {\r\n        marginBottom: \"1rem\",\r\n        marginTop: \"1rem\",\r\n        fontStyle: \"italic\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    prester: Prest[];\r\n}\r\n\r\nconst BeredskapsomradeTabell: React.FC<Props> = ({ prester }) => {\r\n    const classes = useStyles();\r\n    const { role } = useContext(RoleContext) as RoleContextType;\r\n\r\n    const [sortAsc, setSortAsc] = useState(true);\r\n    const handleSort = () => {\r\n        setSortAsc(!sortAsc);\r\n    };\r\n\r\n    const sortedPrester = sortAsc\r\n        ? [...prester].sort((a, b) => a.navn.localeCompare(b.navn))\r\n        : [...prester].sort((a, b) => a.navn.localeCompare(b.navn)).reverse();\r\n\r\n    const columns = [\r\n        {\r\n            path: \"navn\",\r\n            label: \"Prest\",\r\n            content: () => (\r\n                <TableSortLabel\r\n                    active={true}\r\n                    direction={sortAsc ? \"asc\" : \"desc\"}\r\n                    onClick={handleSort}\r\n                />\r\n            ),\r\n        },\r\n        {\r\n            path: \"telefonnummer\",\r\n            label: \"Telefonnummer\",\r\n            hideOnMobile: true,\r\n        },\r\n        {\r\n            path: \"\",\r\n            label: \"Beredskap\",\r\n        },\r\n        {\r\n            path: \"status\",\r\n            label: \"Status\",\r\n            hideOnMobile: true,\r\n        },\r\n    ];\r\n\r\n    if (role === roles.ADMIN || role === roles.BEREDSKAPSANSVARLIG) {\r\n        columns.push({\r\n            path: \"\",\r\n            label: \"\",\r\n        });\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {prester.length > 0 ? (\r\n                <Tabell columns={columns} data={sortedPrester}>\r\n                    {(item: any, key: number) => (\r\n                        <PresterTableRow prest={item} key={key} />\r\n                    )}\r\n                </Tabell>\r\n            ) : (\r\n                <p className={classes.message}>\r\n                    {feilmeldinger.ingenPresterLagtTilIOmradet}\r\n                </p>\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nexport default BeredskapsomradeTabell;\r\n","import React from \"react\";\r\nimport SearchInput from \"../common/SearchInput\";\r\nimport { Role } from \"./role\";\r\nimport DialogBoxAlert from \"../common/DialogBoxAlert\";\r\nimport { User, UserSearchResponse } from \"../types\";\r\n\r\ninterface Props {\r\n    role: Role;\r\n    handleSearch: (searchText: string) => void;\r\n    searchResultsUser: User[] | undefined;\r\n    error: Error | undefined;\r\n    loading: boolean;\r\n    searchResults: UserSearchResponse | undefined;\r\n}\r\n\r\nconst UserSearchInput: React.FC<Props> = ({\r\n    role,\r\n    handleSearch,\r\n    searchResultsUser,\r\n    error,\r\n    loading,\r\n    searchResults,\r\n}) => {\r\n    return (\r\n        <>\r\n            <SearchInput\r\n                handleSearch={handleSearch}\r\n                placeholderText={`Søk etter ${role} (fornavn etternavn)`}\r\n            />\r\n\r\n            {searchResultsUser?.length === 0 && !error && !loading && (\r\n                <DialogBoxAlert\r\n                    feilmelding={`Det finnes ingen ${role} med dette navnet. Søk på nytt.`}\r\n                />\r\n            )}\r\n\r\n            {error && (\r\n                <DialogBoxAlert\r\n                    feilmelding={`Søket kan ikke være tomt. Skriv inn navnet på en ${role}.`}\r\n                />\r\n            )}\r\n\r\n            {searchResults &&\r\n                searchResults.count > searchResults.limit &&\r\n                !error &&\r\n                !loading && (\r\n                    <p>\r\n                        Resultatet viser de {searchResults.limit} første {role}\r\n                        ene fra søket. Hvis du ikke finner {role}en du leter\r\n                        etter må du presisere søket.\r\n                    </p>\r\n                )}\r\n        </>\r\n    );\r\n};\r\nexport default UserSearchInput;\r\n","import React from \"react\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport Radio from \"@material-ui/core/Radio\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { User } from \"../types\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    navn: {\r\n        margin: \"0\",\r\n    },\r\n    listItem: {\r\n        justifyContent: \"space-between\",\r\n        alignItems: \"center\",\r\n        background: theme.palette.secondary.main,\r\n        marginBottom: \"0.5rem\",\r\n        \"&:hover\": {\r\n            background: theme.palette.secondary.dark,\r\n        },\r\n        borderRadius: \"10px\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    selectedId: string;\r\n    searchResultsUser: User[] | undefined;\r\n    handleItemClick: (id: number, item: any) => void;\r\n    handleChangeRadio: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n}\r\n\r\nconst UserSearchList: React.FC<Props> = ({\r\n    selectedId,\r\n    searchResultsUser,\r\n    handleItemClick,\r\n    handleChangeRadio,\r\n}) => {\r\n    const classes = useStyles();\r\n    return (\r\n        <List>\r\n            {searchResultsUser?.map((user, i) => (\r\n                <div key={i}>\r\n                    <ListItem\r\n                        alignItems=\"flex-start\"\r\n                        button\r\n                        selected={selectedId === `${i}`}\r\n                        className={classes.listItem}\r\n                        onClick={() => handleItemClick(i, user)}\r\n                    >\r\n                        <div>\r\n                            <Typography className={classes.navn}>\r\n                                {user.name}\r\n                            </Typography>\r\n                            <small>{user.email}</small>\r\n                        </div>\r\n                        <Radio\r\n                            color=\"primary\"\r\n                            checked={selectedId === `${i}`}\r\n                            onChange={handleChangeRadio}\r\n                            value={i}\r\n                            name=\"radio-button\"\r\n                        />\r\n                    </ListItem>\r\n                </div>\r\n            ))}\r\n        </List>\r\n    );\r\n};\r\nexport default UserSearchList;\r\n","import React, { useState } from \"react\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { httpGet } from \"../../services/http/httpService\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport UserSearchInput from \"./UserSearchInput\";\r\nimport UserSearchList from \"./UserSearchList\";\r\nimport { Role } from \"./role\";\r\nimport { User, UserSearchResponse } from \"../types\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    root: {\r\n        padding: \"2px 4px\",\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n        width: \"100%\",\r\n        borderColor: theme.palette.common.black,\r\n        margin: \"auto\",\r\n    },\r\n    input: {\r\n        marginLeft: theme.spacing(1),\r\n        flex: 1,\r\n    },\r\n    iconButton: {\r\n        padding: 10,\r\n    },\r\n    selected: {\r\n        textDecoration: \"underline\",\r\n    },\r\n\r\n    limitText: {\r\n        marginTop: \"1rem\",\r\n        marginBottom: \"1rem\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    role: Role;\r\n    selectedId: string;\r\n    selected: User;\r\n    handleChangeRadio: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n    handleItemClick: (id: number, item: any) => void;\r\n    clearSelected: () => void;\r\n}\r\n\r\nconst AddUserDialogBoxContent: React.FC<Props> = ({\r\n    role,\r\n    selectedId,\r\n    selected,\r\n    handleChangeRadio,\r\n    handleItemClick,\r\n    clearSelected,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    const [searchResults, setSearchResults] = useState<UserSearchResponse>();\r\n    const [loading, setLoading] = useState(false);\r\n    const [error, setError] = useState();\r\n\r\n    const responseLimit = 5;\r\n\r\n    const handleSearch = async (searchText: string) => {\r\n        setSearchResults(undefined);\r\n        setError(undefined);\r\n        clearSelected();\r\n        setLoading(true);\r\n        try {\r\n            const result = await httpGet(\r\n                `api/Users/search?SearchText=${searchText}&Limit=${responseLimit}&Role=${\r\n                    role[0].toUpperCase() + role.substring(1)\r\n                }`\r\n            );\r\n            setSearchResults(result);\r\n        } catch (e) {\r\n            setError(e);\r\n        } finally {\r\n            setLoading(false);\r\n        }\r\n    };\r\n    return (\r\n        <div>\r\n            <UserSearchInput\r\n                role={role}\r\n                handleSearch={handleSearch}\r\n                searchResultsUser={searchResults?.users}\r\n                error={error}\r\n                loading={loading}\r\n                searchResults={searchResults}\r\n            />\r\n\r\n            {loading ? (\r\n                <LinearProgress />\r\n            ) : (\r\n                <UserSearchList\r\n                    selectedId={selectedId}\r\n                    searchResultsUser={searchResults?.users}\r\n                    handleItemClick={handleItemClick}\r\n                    handleChangeRadio={handleChangeRadio}\r\n                />\r\n            )}\r\n\r\n            {selected.name && (\r\n                <Typography variant=\"subtitle1\" id=\"selected\">\r\n                    <span className={classes.selected}>{selected.name}</span>\r\n                    <span>{\" legges til i listen.\"}</span>\r\n                </Typography>\r\n            )}\r\n        </div>\r\n    );\r\n};\r\nexport default AddUserDialogBoxContent;\r\n","import React, { useState } from \"react\";\r\nimport DialogBox from \"../common/DialogBox\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport AddUserDialogBoxContent from \"./AddUserDialogBoxContent\";\r\nimport { httpPost } from \"../../services/http/httpService\";\r\nimport { Role } from \"./role\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    button: {\r\n        marginTop: \"1rem\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    omradeId: string;\r\n    leggTil: (data: any) => void;\r\n    role: Role;\r\n}\r\n\r\nconst AddUserDialogBox: React.FC<Props> = ({ omradeId, leggTil, role }) => {\r\n    const classes = useStyles();\r\n    const initialState = {\r\n        id: 0,\r\n        azureAdId: \"\",\r\n        name: \"\",\r\n        mobilePhone: \"\",\r\n        email: \"\",\r\n    };\r\n    const [open, setOpen] = useState(false);\r\n    const [loading, setLoading] = useState(false);\r\n    const [error, setError] = useState(null);\r\n    const [selected, setSelected] = useState(initialState);\r\n    const [selectedId, setSelectedId] = useState(\"\");\r\n\r\n    const handleChangeRadio = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n        setSelectedId(event.target.value);\r\n        setError(null);\r\n    };\r\n    const handleItemClick = (id: number, item: any) => {\r\n        setSelectedId(id.toString());\r\n        setSelected(item);\r\n    };\r\n\r\n    const clearSelected = () => {\r\n        setSelected(initialState);\r\n        setSelectedId(\"\");\r\n        setError(null);\r\n    };\r\n\r\n    const handleClose = () => {\r\n        setOpen(false);\r\n        setSelected(initialState);\r\n        setSelectedId(\"\");\r\n        setError(null);\r\n    };\r\n\r\n    const handleOpen = () => {\r\n        setOpen(true);\r\n    };\r\n\r\n    const area = role === Role.PREST ? \"beredskapsområdet\" : \"bispedømmet\";\r\n\r\n    const handleLeggTil = async () => {\r\n        setLoading(true);\r\n        const areapath =\r\n            role === Role.PREST ? \"Beredskapsomrader\" : \"Bispedommer\";\r\n        try {\r\n            const result = await httpPost(\r\n                `api/${areapath}/${omradeId}/${role}`,\r\n                {\r\n                    azureAdId: selected.azureAdId,\r\n                    id: parseInt(omradeId),\r\n                }\r\n            );\r\n            leggTil(result);\r\n            clearSelected();\r\n            setOpen(false);\r\n        } catch (e) {\r\n            setError(e);\r\n        } finally {\r\n            setLoading(false);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <Button\r\n                startIcon={<AddIcon />}\r\n                variant=\"contained\"\r\n                color=\"secondary\"\r\n                className={classes.button}\r\n                onClick={handleOpen}\r\n            >\r\n                Legg Til {role}\r\n            </Button>\r\n            <DialogBox\r\n                handleClick={handleLeggTil}\r\n                title={`Legg til ${role} i ${area}`}\r\n                buttonText=\"Legg til\"\r\n                open={open}\r\n                handleClose={handleClose}\r\n                loading={loading}\r\n                disableButton={!selectedId}\r\n                error={\r\n                    error\r\n                        ? `${selected.name} har allerede blitt lagt til i ${area}, og legges ikke til på nytt.`\r\n                        : \"\"\r\n                }\r\n            >\r\n                <Container>\r\n                    <AddUserDialogBoxContent\r\n                        role={role}\r\n                        handleChangeRadio={handleChangeRadio}\r\n                        selectedId={selectedId}\r\n                        handleItemClick={handleItemClick}\r\n                        selected={selected}\r\n                        clearSelected={clearSelected}\r\n                    />\r\n                </Container>\r\n            </DialogBox>\r\n        </>\r\n    );\r\n};\r\nexport default AddUserDialogBox;\r\n","import React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        marginBottom: \"1rem\",\r\n    },\r\n    link: {\r\n        \"&:hover\": {\r\n            cursor: \"pointer\",\r\n        },\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    root: { name: string; url: string };\r\n    paths: { name: string; url: string }[];\r\n}\r\n\r\nconst Breadcrumb: React.FC<Props> = ({ root, paths }) => {\r\n    const classes = useStyles();\r\n\r\n    const history = useHistory();\r\n\r\n    const handleClick = (pathName: string) => {\r\n        history.push(pathName);\r\n    };\r\n\r\n    const handleKeyPress = (e: React.KeyboardEvent, path: string) => {\r\n        if (e.key === \"Enter\") {\r\n            handleClick(path);\r\n        }\r\n    };\r\n    return (\r\n        <Breadcrumbs aria-label=\"breadcrumb\" className={classes.root}>\r\n            <Link\r\n                color=\"inherit\"\r\n                tabIndex={0}\r\n                onKeyPress={(e: React.KeyboardEvent) =>\r\n                    handleKeyPress(e, root.url)\r\n                }\r\n                className={classes.link}\r\n                onClick={() => handleClick(root.url)}\r\n            >\r\n                {root.name}\r\n            </Link>\r\n            {paths.map((path, i) => {\r\n                const isLastPath = i === paths.length - 1;\r\n\r\n                return isLastPath ? (\r\n                    <Typography color=\"textPrimary\" key={i}>\r\n                        {path.name}\r\n                    </Typography>\r\n                ) : (\r\n                    <Link\r\n                        className={classes.link}\r\n                        key={i}\r\n                        tabIndex={0}\r\n                        color=\"inherit\"\r\n                        onClick={() => handleClick(path.url)}\r\n                        onKeyPress={(e: React.KeyboardEvent) =>\r\n                            handleKeyPress(e, path.url)\r\n                        }\r\n                    >\r\n                        {path.name}\r\n                    </Link>\r\n                );\r\n            })}\r\n        </Breadcrumbs>\r\n    );\r\n};\r\n\r\nexport default Breadcrumb;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    buttonText: {\r\n        \"&:hover\": {\r\n            textDecoration: \"underline\",\r\n        },\r\n    },\r\n    tilbake: {\r\n        marginBottom: \"2rem\",\r\n    },\r\n    link: { textDecoration: \"none\" },\r\n}));\r\n\r\ninterface Props {\r\n    linkTo: string;\r\n}\r\n\r\nconst TilbakeButton: React.FC<Props> = ({ linkTo }) => {\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <div className={classes.tilbake}>\r\n            <Link to={linkTo} className={classes.link}>\r\n                <Button startIcon={<ArrowBackIcon />}>\r\n                    <div className={classes.buttonText}>Tilbake</div>\r\n                </Button>\r\n            </Link>\r\n        </div>\r\n    );\r\n};\r\nexport default TilbakeButton;\r\n","import React, { useContext } from \"react\";\r\nimport { RoleType } from \"../../utils/types\";\r\nimport {\r\n    RoleContextType,\r\n    RoleContext,\r\n} from \"../common/contexts/RoleContextProvider\";\r\n\r\ninterface Props {\r\n    role?: RoleType;\r\n    roles?: RoleType[];\r\n    children: React.ReactNode;\r\n}\r\n\r\nconst HideForRole: React.FC<Props> = ({ role, roles, children }) => {\r\n    const { role: currentUserRole } = useContext(\r\n        RoleContext\r\n    ) as RoleContextType;\r\n\r\n    var condition = false;\r\n    if (role) {\r\n        condition = currentUserRole !== role;\r\n    } else if (roles) {\r\n        condition = !roles.includes(currentUserRole);\r\n    }\r\n\r\n    return <>{condition && children}</>;\r\n};\r\nexport default HideForRole;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { Prest } from \"../../store/prester/types\";\r\nimport TelephoneNumber from \"../common/TelephoneNumber\";\r\nimport { Theme } from \"@material-ui/core/styles/createMuiTheme\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    background: {\r\n        padding: \"2rem\",\r\n        background: \"#F2F2F2\",\r\n        borderRadius: \"4px\",\r\n        marginBottom: \"1rem\",\r\n    },\r\n    wrapper: {\r\n        display: \"flex\",\r\n        flexWrap: \"wrap\",\r\n        justifyContent: \"space-between\",\r\n        [theme.breakpoints.up(\"lg\")]: {\r\n            width: \"60%\",\r\n        },\r\n    },\r\n    body: {\r\n        marginBottom: \"0.5rem\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            marginTop: \"1rem\",\r\n        },\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    prest: Prest;\r\n}\r\n\r\nconst PrestIBeredskap: React.FC<Props> = ({ prest }) => {\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <div className={classes.background}>\r\n            <div className={classes.wrapper}>\r\n                <div>\r\n                    <Typography className={classes.body}>\r\n                        Prest i beredskap:\r\n                    </Typography>\r\n                    <Typography variant=\"h5\" className={classes.body}>\r\n                        {prest?.navn}\r\n                    </Typography>\r\n                </div>\r\n                <div>\r\n                    <Typography className={classes.body}>\r\n                        Telefonnummer til prest:\r\n                    </Typography>\r\n                    <Typography variant=\"h5\">\r\n                        <TelephoneNumber\r\n                            telephonenumber={prest?.telefonnummer}\r\n                        />\r\n                    </Typography>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\nexport default PrestIBeredskap;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Switch from \"@material-ui/core/Switch\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    formControll: {\r\n        \"& .MuiFormControlLabel-label\": {\r\n            fontSize: \"14px\",\r\n        },\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    notification: boolean;\r\n    loading: boolean;\r\n    handleClick: () => void;\r\n}\r\n\r\nconst ToggleNotification: React.FC<Props> = ({\r\n    notification,\r\n    loading,\r\n    handleClick,\r\n}) => {\r\n    const classes = useStyles();\r\n    return (\r\n        <FormControlLabel\r\n            control={\r\n                <Switch\r\n                    disabled={loading}\r\n                    color=\"primary\"\r\n                    checked={notification}\r\n                    onChange={handleClick}\r\n                    value={notification}\r\n                />\r\n            }\r\n            className={classes.formControll}\r\n            label={notification ? \"VARSLING PÅ\" : \"VARSLING AV\"}\r\n            labelPlacement={\"start\"}\r\n        />\r\n    );\r\n};\r\nexport default ToggleNotification;\r\n","import React, { useContext } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport NotificationsActiveIcon from \"@material-ui/icons/NotificationsActive\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport {\r\n    RoleContextType,\r\n    RoleContext,\r\n} from \"../common/contexts/RoleContextProvider\";\r\nimport { roles } from \"../../utils/enum\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    varsling: {\r\n        display: \"flex\"\r\n    },\r\n    notificationIcon: {\r\n        marginRight: \"0.5rem\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    notification: boolean;\r\n}\r\n\r\nconst NotificationStatus: React.FC<Props> = ({ notification }) => {\r\n    const classes = useStyles();\r\n\r\n    const { role: currentUserRole } = useContext(\r\n        RoleContext\r\n    ) as RoleContextType;\r\n\r\n    let text = \"\";\r\n    if (\r\n        currentUserRole === roles.BEREDSKAPSANSVARLIG ||\r\n        currentUserRole === roles.ADMIN\r\n    ) {\r\n        text = \"Du får varsel for dette bispedømmet.\";\r\n    } else if (currentUserRole === roles.PROST) {\r\n        text = \"Du får varsel for dette beredskapsområdet.\";\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {notification ? (\r\n                <div className={classes.varsling}>\r\n                    <NotificationsActiveIcon\r\n                        className={classes.notificationIcon}\r\n                        color=\"disabled\"\r\n                        aria-label=\"varsel ikon\"\r\n                    />\r\n                    <Typography>{text}</Typography>\r\n                </div>\r\n            ) : (\r\n                <></>\r\n            )}\r\n        </>\r\n    );\r\n};\r\nexport default NotificationStatus;\r\n","import { useState, useEffect } from \"react\";\r\nimport { httpPut } from \"../../services/http/httpService\";\r\nimport { customToast } from \"../../services/varslinger/varslingsService\";\r\nimport { feilmeldinger, toastVarslinger } from \"../../utils/constants\";\r\nimport { roles } from \"../../utils/enum\";\r\nimport { RoleType } from \"../../utils/types\";\r\nimport { UserType } from \"../common/contexts/UserContextProvider\";\r\n\r\nexport interface Notification<T> {\r\n    notification: boolean;\r\n    loadingNotification: boolean;\r\n    handleToggleNotification: () => void;\r\n}\r\n\r\nexport function useNotification<T>(\r\n    omradeId: string,\r\n    user: UserType,\r\n    role: RoleType,\r\n    initialValue: boolean | undefined\r\n): Notification<T> {\r\n    const [notification, setNotification] = useState(false);\r\n    const [loadingNotification, setLoadingNotification] = useState(false);\r\n\r\n    useEffect(() => {\r\n        if (typeof initialValue === \"boolean\") {\r\n            setNotification(initialValue);\r\n        }\r\n    }, [initialValue]);\r\n\r\n    const { putUrl, putBody } = putVarselParameters(\r\n        role,\r\n        omradeId,\r\n        user,\r\n        notification\r\n    );\r\n\r\n    const handleToggleNotification = async () => {\r\n        setLoadingNotification(true);\r\n        try {\r\n            const response = await httpPut(putUrl, putBody);\r\n            setNotification(response.varsel);\r\n            customToast.success(toastText(role, response.varsel));\r\n        } catch (e) {\r\n            customToast.error(feilmeldinger.uventetFeil);\r\n        } finally {\r\n            setLoadingNotification(false);\r\n        }\r\n    };\r\n\r\n    return {\r\n        notification,\r\n        loadingNotification,\r\n        handleToggleNotification,\r\n    };\r\n}\r\n\r\nconst putVarselParameters = (\r\n    role: RoleType,\r\n    omradeId: string,\r\n    user: UserType,\r\n    notification: boolean\r\n) => {\r\n    let putUrl = \"\";\r\n    let putBody = {};\r\n    if (role === roles.BEREDSKAPSANSVARLIG || role === roles.ADMIN) {\r\n        putUrl = `api/Bispedommer/${omradeId}/varsel`;\r\n        putBody = {\r\n            userId: user.id,\r\n            bispedommeId: omradeId,\r\n            varsel: !notification,\r\n        };\r\n    } else if (role === roles.PROST) {\r\n        putUrl = `api/Beredskapsomrader/${omradeId}/varsel`;\r\n        putBody = {\r\n            userId: user.id,\r\n            beredskapsomradeId: omradeId,\r\n            varsel: !notification,\r\n        };\r\n    }\r\n    return { putUrl, putBody };\r\n};\r\n\r\nconst toastText = (role: RoleType, notification: any) => {\r\n    if (role === roles.BEREDSKAPSANSVARLIG || role === roles.ADMIN) {\r\n        return notification\r\n            ? toastVarslinger.varselPaaIBispedommet\r\n            : toastVarslinger.varselAvIBispedommet;\r\n    } else if (role === roles.PROST) {\r\n        return notification\r\n            ? toastVarslinger.varselPaaIBeredskapsomradet\r\n            : toastVarslinger.varselAvIBeredskapsomradet;\r\n    }\r\n    return toastVarslinger.uventetFeil;\r\n};\r\n","import React from \"react\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport Card from \"../common/Card\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useLoader } from \"../customHooks/useLoader\";\r\nimport { httpGet } from \"../../services/http/httpService\";\r\nimport InfoBox from \"../common/InfoBox\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\nimport TilbakeButton from \"../common/TilbakeButton\";\r\nimport Background from \"../common/Background\";\r\nimport Kontaktliste from \"../prester/KontaktListe\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport BeredskapsomradeMedKommunerTittel from \"../prester/BeredskapsomradeMedKommunerTittel\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    mainTitle: {\r\n        marginBottom: \"1rem\",\r\n    },\r\n    beredans: {\r\n        marginTop: \"5rem\",\r\n    },\r\n    beredansMobile: {\r\n        marginTop: \"2rem\",\r\n        fontWeight: \"bold\",\r\n    },\r\n}));\r\n\r\ninterface ParamTypes {\r\n    beredskapsomrade_id: string;\r\n}\r\n\r\nexport enum ROLLE {\r\n    prost = 2,\r\n    beredskapsansvarlig = 3,\r\n}\r\n\r\nconst KontaktpersonerIBeredskapsomradet: React.FC = () => {\r\n    const classes = useStyles();\r\n    const theme = useTheme();\r\n    const isOnMobileDevice = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n\r\n    const { beredskapsomrade_id } = useParams<ParamTypes>();\r\n    const { data, loading, error } = useLoader(() =>\r\n        httpGet(`api/Beredskapsomrader/${beredskapsomrade_id}/kontaktpersoner`)\r\n    );\r\n\r\n    const beredansListe = (response: any) =>\r\n        response.kontaktpersoner.filter(\r\n            (e: any) => e.roleId === ROLLE.beredskapsansvarlig\r\n        );\r\n    const prosteListe = (response: any) =>\r\n        response.kontaktpersoner.filter((e: any) => e.roleId === ROLLE.prost);\r\n\r\n    return (\r\n        <Background>\r\n            <Card padding=\"1.5rem\">\r\n                <TilbakeButton linkTo={\"/prest\"} />\r\n                {loading && <LinearProgress />}\r\n                {error && (\r\n                    <InfoBox\r\n                        message={feilmeldinger.uventetFeil}\r\n                        icon={<ErrorOutlineIcon />}\r\n                    />\r\n                )}\r\n\r\n                {!isOnMobileDevice && data && (\r\n                    <>\r\n                        <BeredskapsomradeMedKommunerTittel\r\n                            beredskapsomrade={data.beredskapsomrade}\r\n                            kommuner={data.beredskapsomrade.kommuner}\r\n                        />\r\n                        <Kontaktliste\r\n                            kontaktpersoner={prosteListe(data)}\r\n                            tittel=\"Prost og prostesaksbehandler\"\r\n                        />\r\n                        <Kontaktliste\r\n                            kontaktpersoner={beredansListe(data)}\r\n                            tittel=\"Beredskapsansvarlig\"\r\n                        />\r\n                    </>\r\n                )}\r\n                {isOnMobileDevice && data && (\r\n                    <>\r\n                        <Typography variant=\"h4\" className={classes.mainTitle}>\r\n                            {data.beredskapsomrade.navn}\r\n                        </Typography>\r\n                        <Kontaktliste\r\n                            kontaktpersoner={prosteListe(data)}\r\n                            tittel=\"Prost og prostesaksbehandler:\"\r\n                        />\r\n\r\n                        <Kontaktliste\r\n                            kontaktpersoner={beredansListe(data)}\r\n                            tittel=\"Beredskapsansvarlig:\"\r\n                        />\r\n                    </>\r\n                )}\r\n            </Card>\r\n        </Background>\r\n    );\r\n};\r\nexport default KontaktpersonerIBeredskapsomradet;\r\n","import React, { useContext } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport Card from \"../common/Card\";\r\nimport BeredskapsomradeTabell from \"./BeredskapsomradeTabell\";\r\nimport AddUserDialogBox from \"../leggTilBruker/AddUserDialogBox\";\r\nimport { visKommuner } from \"../common/VisKommuner\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useLoader } from \"../customHooks/useLoader\";\r\nimport { httpGet } from \"../../services/http/httpService\";\r\nimport Breadcrumb from \"../common/Breadcrumb\";\r\nimport InfoBox from \"../common/InfoBox\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport { Role } from \"../leggTilBruker/role\";\r\nimport {\r\n    RoleContext,\r\n    RoleContextType,\r\n} from \"../common/contexts/RoleContextProvider\";\r\nimport {\r\n    BeredskapsomradeContext,\r\n    BeredskapsContextType,\r\n} from \"../beredskapsomrade/contexts/beredskapsomradeContext\";\r\nimport { roles } from \"../../utils/enum\";\r\nimport TilbakeButton from \"../common/TilbakeButton\";\r\nimport Background from \"../common/Background\";\r\nimport HideForRole from \"../common/HideForRole\";\r\nimport PrestIBeredskap from \"./prestIBeredskap\";\r\nimport { Theme } from \"@material-ui/core/styles/createMuiTheme\";\r\nimport { getBreadcrumbPropsByRole } from \"./getBreadcrumbProps\";\r\nimport ToggleNotification from \"../notifications/ToggleNotification\";\r\nimport NotificationStatus from \"../notifications/NotificationStatus\";\r\nimport { useNotification } from \"../notifications/useNotification\";\r\nimport UserContext, {\r\n    UserContextType,\r\n} from \"../common/contexts/UserContextProvider\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    topWrapper: {\r\n        display: \"flex\",\r\n        justifyContent: \"space-between\",\r\n        alignItems: \"baseline\",\r\n    },\r\n    mainTitle: {\r\n        marginBottom: \"1rem\",\r\n    },\r\n    statusDiv: {\r\n        marginTop: \"2rem\",\r\n        marginBottom: \"3rem\",\r\n    },\r\n    button: {\r\n        marginTop: \"1rem\",\r\n    },\r\n\r\n    link: { textDecoration: \"none\" },\r\n    kommuner: {\r\n        marginBottom: \"3rem\",\r\n    },\r\n    presterHeader: {\r\n        marginTop: \"4rem\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            marginTop: \"2rem\",\r\n        },\r\n        marginBottom: \"1rem\",\r\n    },\r\n}));\r\n\r\ninterface ParamTypes {\r\n    beredskapsomrade_id: string;\r\n    bispedomme_id: string;\r\n}\r\n\r\nconst Beredskapsomrade: React.FC = () => {\r\n    const classes = useStyles();\r\n\r\n    const { user } = useContext(UserContext) as UserContextType;\r\n    const { role } = useContext(RoleContext) as RoleContextType;\r\n\r\n    const { data, setData, leggTilPrest, getPrestIBeredskap } = useContext(\r\n        BeredskapsomradeContext\r\n    ) as BeredskapsContextType;\r\n\r\n    const { beredskapsomrade_id, bispedomme_id } = useParams<ParamTypes>();\r\n    const { loading, error } = useLoader(() =>\r\n        httpGet(`api/Beredskapsomrader/${beredskapsomrade_id}`).then(\r\n            (res) => res && setData(res)\r\n        )\r\n    );\r\n\r\n    const {\r\n        notification,\r\n        loadingNotification,\r\n        handleToggleNotification,\r\n    } = useNotification(\r\n        beredskapsomrade_id,\r\n        user,\r\n        role,\r\n        data?.beredskapsomrade.varsel\r\n    );\r\n\r\n    var prestIBeredskap = getPrestIBeredskap();\r\n    var breadcrumbProps = getBreadcrumbPropsByRole(\r\n        role,\r\n        data.beredskapsomrade,\r\n        bispedomme_id,\r\n        beredskapsomrade_id\r\n    );\r\n    return (\r\n        <Background>\r\n            <Breadcrumb\r\n                root={breadcrumbProps.root}\r\n                paths={breadcrumbProps.paths}\r\n            />\r\n\r\n            <Card padding=\"1.5rem\">\r\n                <div className={classes.topWrapper}>\r\n                    <TilbakeButton linkTo={`/bispedommer/${bispedomme_id}`} />\r\n\r\n                    <HideForRole\r\n                        roles={[roles.ADMIN, roles.BEREDSKAPSANSVARLIG]}\r\n                    >\r\n                        {/* Hide for berans aswell */}\r\n                        {!loading && (\r\n                            <ToggleNotification\r\n                                loading={loadingNotification}\r\n                                notification={notification}\r\n                                handleClick={handleToggleNotification}\r\n                            />\r\n                        )}\r\n                    </HideForRole>\r\n                </div>\r\n                {loading && <LinearProgress />}\r\n                {error ? (\r\n                    <InfoBox\r\n                        message={error.message}\r\n                        icon={<ErrorOutlineIcon />}\r\n                    />\r\n                ) : (\r\n                    <>\r\n                        <Typography variant=\"h4\" className={classes.mainTitle}>\r\n                            {data.beredskapsomrade.navn}\r\n                        </Typography>\r\n                        <div className={classes.kommuner}>\r\n                            {visKommuner(\r\n                                data.beredskapsomrade.kommuner,\r\n                                data.beredskapsomrade.kommuner.length\r\n                            )}\r\n                        </div>\r\n\r\n                        <div className={classes.statusDiv}>\r\n                            <NotificationStatus notification={notification} />\r\n                        </div>\r\n\r\n                        {prestIBeredskap.map((prest) => (\r\n                            <PrestIBeredskap prest={prest}></PrestIBeredskap>\r\n                        ))}\r\n\r\n                        <Typography\r\n                            className={classes.presterHeader}\r\n                            variant=\"h6\"\r\n                        >\r\n                            Prester i beredskapsområdet:\r\n                        </Typography>\r\n\r\n                        <BeredskapsomradeTabell prester={data.prester} />\r\n\r\n                        <HideForRole role={roles.PROST}>\r\n                            <AddUserDialogBox\r\n                                omradeId={beredskapsomrade_id}\r\n                                leggTil={leggTilPrest}\r\n                                role={Role.PREST}\r\n                            />\r\n                        </HideForRole>\r\n                    </>\r\n                )}\r\n            </Card>\r\n        </Background>\r\n    );\r\n};\r\nexport default Beredskapsomrade;\r\n","import { roles } from \"../../utils/enum\";\r\nimport { Beredskapsomrade } from \"../prestSokeResultater/types\";\r\n\r\nexport const getBreadcrumbPropsByRole = ( role: string, beredskapsomrade: Beredskapsomrade, bispedommeId: string, beredskapsomradeId: string) => {\r\n    if (role === roles.PROST) {\r\n        return {\r\n            root: {\r\n                name: beredskapsomrade.bispedommeNavn,\r\n                url: `/bispedommer/${bispedommeId}`,\r\n            },\r\n            paths: [\r\n                {\r\n                    name: beredskapsomrade.navn,\r\n                    url: `/bispedommer/${bispedommeId}/beredskapsomrade/${beredskapsomradeId}`,\r\n                },\r\n            ],\r\n        };\r\n    } else {\r\n        return {\r\n            root: { name: \"Bispedømmer\", url: \"/bispedommer\" },\r\n            paths: [\r\n                {\r\n                    name: beredskapsomrade.bispedommeNavn,\r\n                    url: `/bispedommer/${bispedommeId}`,\r\n                },\r\n                {\r\n                    name: beredskapsomrade.navn,\r\n                    url: `/bispedommer/${bispedommeId}/beredskapsomrader/${beredskapsomradeId}`,\r\n                },\r\n            ],\r\n        };\r\n    }\r\n};\r\n","import React from \"react\";\r\nimport ListMUI from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport NavigateNextIcon from \"@material-ui/icons/NavigateNext\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport NotificationIcon from \"../common/NotificationIcon\";\r\nimport { PresterIBeredskap, Beredskapsomrade } from \"../types\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport OmradeStatus from \"./OmradeStatus\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    container: {\r\n        display: \"inline-flex\",\r\n    },\r\n    nameWrapper: {\r\n        display: \"flex\",\r\n        flexDirection: \"column\",\r\n        flexFlow: \"wrap\",\r\n        width: \"50%\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            width: \"90%\",\r\n        },\r\n    },\r\n    nextIcon: {\r\n        marginTop: \"0.5rem\",\r\n        marginBottom: \"0.5rem\",\r\n        marginLeft: \"0.5rem\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            marginLeft: \"0\",\r\n        },\r\n    },\r\n    header: {\r\n        marginTop: \"0.5rem\",\r\n        marginBottom: \"0.5rem\",\r\n        marginLeft: \"0.5rem\",\r\n    },\r\n    errorIcon: {\r\n        fill: \"#D90011\",\r\n        marginRight: \"0.2rem\",\r\n        marginBottom: \"0.1rem\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            marginLeft: \"0\",\r\n            marginRight: \"1rem\"\r\n        },\r\n    },\r\n    errorContent: {\r\n        fill: \"#D90011\",\r\n        background:\r\n            \"linear-gradient(0deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.9)), #D90011;\",\r\n        display: \"flex\",\r\n        borderRadius: \"0.25rem\",\r\n        maxWidth: 280,\r\n        padding: \"0.5rem\",\r\n        marginLeft: 0,\r\n    },\r\n    warningIcon: {\r\n        fill: \"#F4D150\",\r\n        marginRight: \"0.2rem\",\r\n        marginBottom: \"0.1rem\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            marginLeft: \"0\",\r\n            marginRight: \"1rem\"\r\n        },\r\n    },\r\n    warningContent: {\r\n        fill: \"#F4D150\",\r\n        background:\r\n            \"linear-gradient(0deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.9)), #F4D150;\",\r\n        display: \"flex\",\r\n        borderRadius: \"0.25rem\",\r\n        maxWidth: 280,\r\n        padding: \"0.5rem\",\r\n        marginLeft: 0,\r\n    },\r\n    successIcon: {\r\n        marginRight: \"0.2rem\",\r\n        fill: \"#06893A\",\r\n        marginBottom: \"0.1rem\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            fontSize: \"large\",\r\n            marginBottom: \"auto\",\r\n            marginRight: \"0.5rem\",\r\n        },\r\n    },\r\n    successContent: {\r\n        marginLeft: 0,\r\n        fill: \"#F4D150\",\r\n        display: \"flex\",\r\n        borderRadius: \"0.25rem\",\r\n        maxWidth: 280,\r\n        padding: \"0.5rem\",\r\n    },\r\n    prestIBerdskapMobil: {\r\n        marginLeft: \"0.5rem\",\r\n    },\r\n    iconText: {\r\n        marginLeft: \"0.2rem\",\r\n        marginRight: \"0.2rem\",\r\n    },\r\n    placeholder: {\r\n        marginLeft: \"2rem\",\r\n        marginRight: \"auto\",\r\n        width: \"8%\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    beredskapsomrader: Beredskapsomrade[];\r\n    beredskapsInfo: PresterIBeredskap[];\r\n    handleClickListItem: (listItem: Beredskapsomrade) => void;\r\n}\r\n\r\nconst BeredskapsomradeListe: React.FC<Props> = ({\r\n    beredskapsomrader,\r\n    beredskapsInfo,\r\n    handleClickListItem,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    const theme = useTheme();\r\n    const isOnMobileDevice = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n\r\n    const nameOfPrestIBeredskap = (id: number) => {\r\n        if (beredskapsInfo) {\r\n            const currentBeredskapInfo = beredskapsInfo.find(\r\n                (info) => info.beredskapsomradeId === id\r\n            );\r\n            if (currentBeredskapInfo && currentBeredskapInfo.presterIBeredskap.length > 0) {\r\n                return currentBeredskapInfo.presterIBeredskap[0].name;\r\n            }\r\n        }\r\n        return \"\";\r\n    };\r\n\r\n    const antallPresterIBeredskap = (id: number) => {\r\n        if (beredskapsInfo) {\r\n            const currentBeredskapInfo = beredskapsInfo.find(\r\n                (info) => info.beredskapsomradeId === id\r\n            );\r\n            if (currentBeredskapInfo) {\r\n                return currentBeredskapInfo.antallPresterIBeredskap;\r\n            }\r\n        }\r\n        return -1;\r\n    };\r\n\r\n    return (\r\n        <ListMUI>\r\n            {beredskapsomrader.map((area) => (\r\n                <ListItem\r\n                    disableGutters\r\n                    divider\r\n                    button\r\n                    key={area.id}\r\n                    onClick={() => handleClickListItem(area)}\r\n                    className={classes.container}\r\n                >\r\n                    <NavigateNextIcon className={classes.nextIcon} />\r\n                    <div className={classes.nameWrapper}>\r\n                        <Typography className={classes.header} variant={\"h6\"}>\r\n                            {area.navn}\r\n                        </Typography>\r\n                        {isOnMobileDevice &&\r\n                            antallPresterIBeredskap(area.id) === 1 && (\r\n                                <Typography\r\n                                    variant=\"subtitle1\"\r\n                                    className={classes.prestIBerdskapMobil}\r\n                                >\r\n                                    <CheckCircleIcon\r\n                                        className={classes.successIcon}\r\n                                    />\r\n                                    {nameOfPrestIBeredskap(area.id)}\r\n                                </Typography>\r\n                            )}\r\n                    </div>\r\n\r\n                    {antallPresterIBeredskap(area.id) > 1 && (\r\n                        <OmradeStatus\r\n                            text=\"For mange prester i beredskap\"\r\n                            ariaLabel=\"Beredskapsområdet har for mange prester i beredskap.\"\r\n                            iconStyle={classes.warningIcon}\r\n                            containerStyle={classes.warningContent}\r\n                        />\r\n                    )}\r\n\r\n                    {antallPresterIBeredskap(area.id) === 0 && (\r\n                        <OmradeStatus\r\n                            text=\"Mangler prest i beredskap\"\r\n                            ariaLabel=\"Beredskapsområdet mangler prest i beredskap.\"\r\n                            iconStyle={classes.errorIcon}\r\n                            containerStyle={classes.errorContent}\r\n                        />\r\n                    )}\r\n\r\n                    {!isOnMobileDevice &&\r\n                        antallPresterIBeredskap(area.id) === 1 && (\r\n                            <>\r\n                                <Container className={classes.successContent}>\r\n                                    <CheckCircleIcon\r\n                                        className={classes.successIcon}\r\n                                    />\r\n                                    <Typography\r\n                                        variant=\"subtitle1\"\r\n                                        className={classes.iconText}\r\n                                    >\r\n                                        {nameOfPrestIBeredskap(area.id)}\r\n                                    </Typography>\r\n                                </Container>\r\n                            </>\r\n                        )}\r\n\r\n                    {area.varsel ? (\r\n                        <NotificationIcon />\r\n                    ) : (\r\n                        <div className={classes.placeholder} />\r\n                    )}\r\n                </ListItem>\r\n            ))}\r\n        </ListMUI>\r\n    );\r\n};\r\nexport default BeredskapsomradeListe;\r\n","import React from \"react\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport BeredskapsomradeListe from \"./BeredskapsomradeListe\";\r\nimport { Beredskapsomrade, PresterIBeredskap } from \"../types\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { Hidden } from \"@material-ui/core\";\r\n\r\n\r\ninterface Props {\r\n    beredskapsomrader: Beredskapsomrade[];\r\n    presterIBeredskap: PresterIBeredskap[];\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    container: {\r\n        display: \"flex\",\r\n        allignItems: \"flex-start\",\r\n    },\r\n    beredskapsOmraderText: {\r\n        marginLeft: \"0.2rem\",\r\n        marginRight: \"auto\",\r\n        width: \"21%\",\r\n    },\r\n    placeholder: {\r\n        marginLeft: \"0.6rem\",\r\n        marginRight: \"auto\",\r\n    },\r\n    statusOversiktText: {\r\n        marginRight: \"auto\",\r\n        marginLeft: \"1rem\",\r\n    },\r\n}));\r\n\r\nconst Beredskapsomrader: React.FC<Props> = ({\r\n    beredskapsomrader,\r\n    presterIBeredskap,\r\n}) => {\r\n    const history = useHistory();\r\n    const currentPath = useLocation().pathname;\r\n\r\n    const handleClickListItem = (beredskapsomrade: Beredskapsomrade) => {\r\n        history.push(`${currentPath}/beredskapsomrader/${beredskapsomrade.id}`);\r\n    };\r\n    const classes = useStyles();\r\n    return (\r\n        <>\r\n             <div className={classes.container}>\r\n                <Typography\r\n                    variant=\"h5\"\r\n                    className={classes.beredskapsOmraderText}\r\n                >\r\n                    Beredskapsområder\r\n                </Typography>\r\n\r\n                <Hidden smDown>\r\n                    <Typography\r\n                        variant=\"h5\"\r\n                        className={classes.statusOversiktText}\r\n                    >\r\n                        Prest i beredskap\r\n                    </Typography>\r\n                </Hidden>\r\n            </div>\r\n            <BeredskapsomradeListe\r\n                beredskapsomrader={beredskapsomrader}\r\n                beredskapsInfo={presterIBeredskap}\r\n                handleClickListItem={handleClickListItem}\r\n            />\r\n        </>\r\n    );\r\n};\r\nexport default Beredskapsomrader;\r\n","import React, { useState } from \"react\";\r\nimport DialogBox from \"../common/DialogBox\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { httpDelete } from \"../../services/http/httpService\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\nimport { User } from \"../types\";\r\n\r\ninterface Props {\r\n    omradeId: string;\r\n    open: boolean;\r\n    setOpen: (open: boolean) => void;\r\n    prost: User;\r\n    removeProst: (id: number) => void;\r\n}\r\n\r\nconst RemoveProstDialogBox: React.FC<Props> = ({\r\n    omradeId,\r\n    open,\r\n    setOpen,\r\n    prost,\r\n    removeProst,\r\n}) => {\r\n    const [loading, setLoading] = useState(false);\r\n    const [error, setError] = useState(null);\r\n\r\n    const handleClose = () => {\r\n        setOpen(false);\r\n        setError(null);\r\n    };\r\n\r\n    const handleRemoveProst = async () => {\r\n        setLoading(true);\r\n        try {\r\n            await httpDelete(`api/Bispedommer/${omradeId}/prost/${prost.id}`);\r\n            removeProst(prost.id);\r\n            setError(null);\r\n            setOpen(false);\r\n        } catch (e) {\r\n            setError(e);\r\n        } finally {\r\n            setLoading(false);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <DialogBox\r\n                handleClick={handleRemoveProst}\r\n                title=\"\"\r\n                buttonText=\"Fjern\"\r\n                open={open}\r\n                handleClose={handleClose}\r\n                loading={loading}\r\n                error={error ? feilmeldinger.uventetFeilProvPaNytt : \"\"}\r\n            >\r\n                <Container>\r\n                    <Typography variant=\"h6\">\r\n                        Er du sikker på at du vil fjerne {prost.name} fra\r\n                        bispedømmet?\r\n                    </Typography>\r\n                </Container>\r\n            </DialogBox>\r\n        </>\r\n    );\r\n};\r\nexport default RemoveProstDialogBox;\r\n","import React from \"react\";\r\nimport ListMUI from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport Switch from \"@material-ui/core/Switch\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport { User } from \"../types\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { useLoader } from \"../customHooks/useLoader\";\r\nimport { httpGet } from \"../../services/http/httpService\";\r\nimport { LinearProgress } from \"@material-ui/core\";\r\nimport InfoBox from \"../common/InfoBox\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    header: {\r\n        marginTop: \"0.5rem\",\r\n        marginBottom: \"0.5rem\",\r\n        marginLeft: \"0.5rem\",\r\n    },\r\n    toggleSwitch: {\r\n        marginLeft: \"auto\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    prost: User;\r\n    bispedommeId: string;\r\n    data: ProstVarselResponse[] | null;\r\n    setData: (curr: any) => void;\r\n}\r\n\r\nexport type ProstVarselResponse = {\r\n    userId: number;\r\n    beredskapsomradeId: number;\r\n    beredskapsomradeName: string;\r\n    varsel: boolean;\r\n};\r\n\r\nconst ProstVarslingerListe: React.FC<Props> = ({\r\n    bispedommeId,\r\n    prost,\r\n    data,\r\n    setData,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    const theme = useTheme();\r\n    const isOnMobileDevice = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n    const label = (varsel: boolean) => {\r\n        if (isOnMobileDevice) {\r\n            return \"\";\r\n        }\r\n        return varsel ? \"Varsling på\" : \"Varsling av\";\r\n    };\r\n\r\n    const { loading, error } = useLoader(() =>\r\n        httpGet(\r\n            `api/Bispedommer/${bispedommeId}/proster/${prost.id}/varsel`\r\n        ).then((res) => {\r\n            setData(res);\r\n        })\r\n    );\r\n\r\n    const handleToggle = (index: number) => {\r\n        if (data && index < data.length) {\r\n            const newData = [...data];\r\n            newData[index].varsel = !data[index].varsel;\r\n            setData(newData);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {loading && <LinearProgress />}\r\n            {error ? (\r\n                <InfoBox\r\n                    message={feilmeldinger.uventetFeilProvPaNytt}\r\n                    icon={<ErrorOutlineIcon />}\r\n                />\r\n            ) : (\r\n                <ListMUI>\r\n                    {data?.map((area, i) => (\r\n                        <ListItem disableGutters divider key={i}>\r\n                            <Typography className={classes.header}>\r\n                                {area.beredskapsomradeName}\r\n                            </Typography>\r\n\r\n                            <FormControlLabel\r\n                                control={\r\n                                    <Switch\r\n                                        disabled={loading}\r\n                                        color=\"primary\"\r\n                                        checked={area.varsel}\r\n                                        onChange={() => handleToggle(i)}\r\n                                        value={area.varsel}\r\n                                    />\r\n                                }\r\n                                className={classes.toggleSwitch}\r\n                                label={label(area.varsel)}\r\n                                labelPlacement={\"start\"}\r\n                            />\r\n                        </ListItem>\r\n                    ))}\r\n                </ListMUI>\r\n            )}\r\n        </>\r\n    );\r\n};\r\nexport default ProstVarslingerListe;\r\n","import React, { useState } from \"react\";\r\nimport DialogBox from \"../common/DialogBox\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport { httpPut } from \"../../services/http/httpService\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\nimport { User } from \"../types\";\r\nimport ProstVarslingerListe, {\r\n    ProstVarselResponse,\r\n} from \"./ProstVarslingerListe\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { customToast } from \"../../services/varslinger/varslingsService\";\r\n\r\ninterface Props {\r\n    bispedommeId: string;\r\n    open: boolean;\r\n    setOpen: (open: boolean) => void;\r\n    prost: User;\r\n}\r\n\r\nconst ProstVarslingerDialogBox: React.FC<Props> = ({\r\n    bispedommeId,\r\n    open,\r\n    setOpen,\r\n    prost,\r\n}) => {\r\n    const [loading, setLoading] = useState(false);\r\n    const [error, setError] = useState(null);\r\n    const [data, setData] = useState<ProstVarselResponse[] | null>(null);\r\n\r\n    const handleClose = () => {\r\n        setOpen(false);\r\n        setError(null);\r\n    };\r\n\r\n    const handleUpdateVarsler = async () => {\r\n        setLoading(true);\r\n        try {\r\n            await httpPut(\r\n                `api/Bispedommer/${bispedommeId}/proster/${prost.id}/varsel`,\r\n               {\r\n                   data:data,\r\n                   userId: prost.id,\r\n                   BispedommeId: bispedommeId\r\n               }\r\n            );\r\n            \r\n            setError(null);\r\n            setOpen(false);\r\n            customToast.success(`Varslinger er endret for ${prost.name}`);\r\n        } catch (e) {\r\n            setError(e);\r\n        } finally {\r\n            setLoading(false);\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <DialogBox\r\n                handleClick={handleUpdateVarsler}\r\n                title={\"\"}\r\n                buttonText=\"Bekreft\"\r\n                cancelButtonText=\"Nei, avbryt\"\r\n                open={open}\r\n                handleClose={handleClose}\r\n                loading={loading}\r\n                error={error ? feilmeldinger.uventetFeilProvPaNytt : \"\"}\r\n            >\r\n                <Container>\r\n                    <Typography variant=\"h6\">\r\n                        Administrer varslinger for {prost.name}\r\n                    </Typography>\r\n                    <ProstVarslingerListe\r\n                        data={data}\r\n                        setData={setData}\r\n                        bispedommeId={bispedommeId}\r\n                        prost={prost}\r\n                    />\r\n                </Container>\r\n            </DialogBox>\r\n        </>\r\n    );\r\n};\r\nexport default ProstVarslingerDialogBox;\r\n","import React, { useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport RemoveProstDialogBox from \"./RemoveProstDialogBox\";\r\nimport { User } from \"../types\";\r\nimport SettingsMenu from \"../common/SettingsMenu\";\r\nimport ProstVarslingerDialogBox from \"./ProstVarslingerDialogBox\";\r\n\r\ninterface Props {\r\n    prost: User;\r\n    removeProst: (id: number) => void;\r\n}\r\n\r\ninterface ParamTypes {\r\n    bispedomme_id: string;\r\n}\r\n\r\nconst ProstSettingsMenu: React.FC<Props> = ({ prost, removeProst }) => {\r\n    const { bispedomme_id } = useParams<ParamTypes>();\r\n    const [openRemoveProst, setOpenRemoveProst] = useState(false);\r\n    const [openVarslinger, setOpenVarslinger] = useState(false);\r\n\r\n    const menuItems = [\r\n        {\r\n            menuItemText: \"Fjern prost fra bispedømmet\",\r\n            setOpen: setOpenRemoveProst,\r\n        },\r\n        { menuItemText: \"Administer varslinger\", setOpen: setOpenVarslinger },\r\n    ];\r\n    return (\r\n        <>\r\n            <SettingsMenu menuItems={menuItems} />\r\n\r\n            <RemoveProstDialogBox\r\n                omradeId={bispedomme_id}\r\n                open={openRemoveProst}\r\n                setOpen={setOpenRemoveProst}\r\n                prost={prost}\r\n                removeProst={removeProst}\r\n            />\r\n            <ProstVarslingerDialogBox\r\n                bispedommeId={bispedomme_id}\r\n                open={openVarslinger}\r\n                setOpen={setOpenVarslinger}\r\n                prost={prost}\r\n            />\r\n        </>\r\n    );\r\n};\r\n\r\nexport default ProstSettingsMenu;\r\n","import React from \"react\";\r\nimport ListMUI from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport ProstSettingsMenu from \"./ProstSettingsMenu\";\r\nimport { User } from \"../types\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    header: {\r\n        marginTop: \"0.5rem\",\r\n        marginBottom: \"0.5rem\",\r\n        marginLeft: \"0.5rem\",\r\n        width: \"98%\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    proster: User[];\r\n    removeProst: (id: number) => void;\r\n}\r\n\r\nconst ProsterListe: React.FC<Props> = ({ proster, removeProst }) => {\r\n    const classes = useStyles();\r\n    const sortedProster = [...proster].sort((a, b) =>\r\n        a.name.localeCompare(b.name)\r\n    );\r\n    return (\r\n        <ListMUI>\r\n            {sortedProster?.map((prost, i) => (\r\n                <ListItem disableGutters divider key={i}>\r\n                    <Typography className={classes.header} variant={\"h6\"}>\r\n                        {prost.name}\r\n                    </Typography>\r\n                    <ProstSettingsMenu\r\n                        prost={prost}\r\n                        removeProst={removeProst}\r\n                    />\r\n                </ListItem>\r\n            ))}\r\n        </ListMUI>\r\n    );\r\n};\r\nexport default ProsterListe;\r\n","import React, { useState } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { useLoader } from \"../customHooks/useLoader\";\r\nimport { httpGet } from \"../../services/http/httpService\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport InfoBox from \"../common/InfoBox\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport { User } from \"../types\";\r\nimport { Role } from \"../leggTilBruker/role\";\r\nimport ProsterListe from \"./ProsterListe\";\r\nimport { customToast } from \"../../services/varslinger/varslingsService\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\nimport AddUserDialogBox from \"../leggTilBruker/AddUserDialogBox\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    header: {\r\n        marginTop: \"3rem\",\r\n    },\r\n    message: {\r\n        marginBottom: \"1rem\",\r\n        marginTop: \"1rem\",\r\n        fontStyle: \"italic\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    bispedomme_id: string;\r\n}\r\n\r\nconst Proster: React.FC<Props> = ({ bispedomme_id }) => {\r\n    const [proster, setProster] = useState<User[]>([]);\r\n\r\n    const { loading, error } = useLoader(() =>\r\n        httpGet(`api/Bispedommer/${bispedomme_id}/proster`).then(\r\n            (res) => res && setProster(res)\r\n        )\r\n    );\r\n\r\n    const leggTilProst = (prost: User) => {\r\n        setProster((previousState) => [...previousState, prost]);\r\n        customToast.success(\"Prost ble lagt til i bispedømmet.\");\r\n    };\r\n\r\n    const removeProst = (prostId: number) => {\r\n        setProster(proster.filter((p: User) => p.id !== prostId));\r\n        customToast.success(\"Prost ble fjernet fra området.\");\r\n    };\r\n\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <>\r\n            <Typography className={classes.header} variant=\"h5\">\r\n                Proster i bispedømmet\r\n            </Typography>\r\n            {loading && <LinearProgress />}\r\n            {error ? (\r\n                <InfoBox\r\n                    message={feilmeldinger.uventetFeil}\r\n                    icon={<ErrorOutlineIcon />}\r\n                />\r\n            ) : (\r\n                <>\r\n                    <ProsterListe proster={proster} removeProst={removeProst} />\r\n                    {proster?.length === 0 && (\r\n                        <p className={classes.message}>\r\n                            {feilmeldinger.ingenProsterLagtTilIBispedommet}\r\n                        </p>\r\n                    )}\r\n                </>\r\n            )}\r\n            <AddUserDialogBox\r\n                omradeId={bispedomme_id}\r\n                leggTil={leggTilProst}\r\n                role={Role.PROST}\r\n            />\r\n        </>\r\n    );\r\n};\r\nexport default Proster;\r\n","import React from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport { PresterIBeredskap } from \"../types\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    root: {\r\n        marginTop: \"1rem\",\r\n    },\r\n    errorContent: {\r\n        display: \"flex\",\r\n        alignItems: \"flex-start\",\r\n        borderRadius: \"0.25rem\",\r\n        maxWidth: 390,\r\n        padding: \"0.5rem\",\r\n        margin: 0,\r\n        background:\r\n            \"linear-gradient(0deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.9)), #FF9100;\",\r\n    },\r\n    content: {\r\n        display: \"flex\",\r\n        padding: 0,\r\n    },\r\n    okicon: {\r\n        marginRight: \"0.5rem\",\r\n        fill: \"green\",\r\n    },\r\n    warningicon: {\r\n        marginRight: \"0.5rem\",\r\n        fill: \"#F4D150\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    beredskapsInfo: PresterIBeredskap[];\r\n    error: Error | undefined;\r\n}\r\n\r\nconst BispedommeStatus: React.FC<Props> = ({ beredskapsInfo, error }) => {\r\n    const antallOmrader = beredskapsInfo?.length;\r\n\r\n    const antallOmraderMedUgyldigStatus = beredskapsInfo?.filter(\r\n        (omrade) => omrade.antallPresterIBeredskap !== 1\r\n    ).length;\r\n\r\n    const classes = useStyles();\r\n    return (\r\n        <div className={classes.root}>\r\n            {beredskapsInfo && (\r\n                <>\r\n                    {antallOmraderMedUgyldigStatus > 0 ? (\r\n                        <Container className={classes.errorContent}>\r\n                            <ErrorIcon className={classes.warningicon} />\r\n                            <Typography>\r\n                                Det er avvik i {antallOmraderMedUgyldigStatus}{\" \"}\r\n                                av {antallOmrader} beredskapsområder.\r\n                            </Typography>\r\n                        </Container>\r\n                    ) : (\r\n                        <Container className={classes.content}>\r\n                            <CheckCircleIcon className={classes.okicon} />\r\n                            <Typography>\r\n                                Alle områder har prest i beredskap.\r\n                            </Typography>\r\n                        </Container>\r\n                    )}\r\n                </>\r\n            )}\r\n            {error && (\r\n                <Container className={classes.errorContent}>\r\n                    <ErrorIcon className={classes.warningicon} />\r\n                    <Typography>{feilmeldinger.uventetFeil}</Typography>\r\n                </Container>\r\n            )}\r\n        </div>\r\n    );\r\n};\r\nexport default BispedommeStatus;\r\n","import React, { useContext } from \"react\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport Card from \"../common/Card\";\r\nimport Breadcrumb from \"../common/Breadcrumb\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useLoader } from \"../customHooks/useLoader\";\r\nimport { httpGet } from \"../../services/http/httpService\";\r\nimport Beredskapsomrader from \"../beredskapsomrader/Beredskapsomrader\";\r\nimport InfoBox from \"../common/InfoBox\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport Proster from \"../proster/Proster\";\r\nimport BispedommeStatus from \"./BispedommeStatus\";\r\nimport { roles } from \"../../utils/enum\";\r\nimport ToggleNotification from \"../notifications/ToggleNotification\";\r\nimport TilbakeButton from \"../common/TilbakeButton\";\r\nimport Background from \"../common/Background\";\r\nimport HideForRole from \"../common/HideForRole\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport UserContext, {\r\n    UserContextType,\r\n} from \"../common/contexts/UserContextProvider\";\r\nimport NotificationStatus from \"../notifications/NotificationStatus\";\r\nimport { useNotification } from \"../notifications/useNotification\";\r\nimport {\r\n    RoleContext,\r\n    RoleContextType,\r\n} from \"../common/contexts/RoleContextProvider\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    topWrapper: {\r\n        display: \"flex\",\r\n        justifyContent: \"space-between\",\r\n        alignItems: \"baseline\",\r\n    },\r\n    statusDiv: {\r\n        marginTop: \"2rem\",\r\n        marginBottom: \"3rem\",\r\n    },\r\n}));\r\n\r\ninterface ParamTypes {\r\n    bispedomme_id: string;\r\n}\r\n\r\nconst Bispedomme: React.FC = () => {\r\n    const { bispedomme_id } = useParams<ParamTypes>();\r\n\r\n    const {\r\n        data: bispedomme,\r\n        loading,\r\n        error,\r\n    } = useLoader(() => {\r\n        return httpGet(`api/Bispedommer/${bispedomme_id}`);\r\n    });\r\n\r\n    const { data: presterIBeredskap, error: presterIBeredskapError } =\r\n        useLoader(() => {\r\n            return httpGet(\r\n                `api/Bispedommer/${bispedomme_id}/presterIBeredskap`\r\n            );\r\n        });\r\n    const { user } = useContext(UserContext) as UserContextType;\r\n    const { role } = useContext(RoleContext) as RoleContextType;\r\n\r\n    const { notification, loadingNotification, handleToggleNotification } =\r\n        useNotification(bispedomme_id, user, role, bispedomme?.varsel);\r\n\r\n    const classes = useStyles();\r\n    return (\r\n        <Background>\r\n            <HideForRole role={roles.PROST}>\r\n                <Breadcrumb\r\n                    root={{ name: \"Bispedømmer\", url: \"/bispedommer\" }}\r\n                    paths={[\r\n                        {\r\n                            name: bispedomme?.navn,\r\n                            url: `bispedommer/${bispedomme_id}`,\r\n                        },\r\n                    ]}\r\n                />\r\n            </HideForRole>\r\n\r\n            <Card padding=\"1.5rem\">\r\n                {loading && <LinearProgress />}\r\n                {error && (\r\n                    <InfoBox\r\n                        message={error.message}\r\n                        icon={<ErrorOutlineIcon />}\r\n                    />\r\n                )}\r\n\r\n                {bispedomme && (\r\n                    <>\r\n                        <HideForRole role={roles.PROST}>\r\n                            <div className={classes.topWrapper}>\r\n                                <TilbakeButton linkTo={\"/bispedommer\"} />\r\n\r\n                                {!loading && (\r\n                                    <ToggleNotification\r\n                                        loading={loadingNotification}\r\n                                        notification={notification}\r\n                                        handleClick={handleToggleNotification}\r\n                                    />\r\n                                )}\r\n                            </div>\r\n                        </HideForRole>\r\n\r\n                        <Typography variant=\"h4\">\r\n                            {bispedomme.navn} bispedømme\r\n                        </Typography>\r\n\r\n                        <div className={classes.statusDiv}>\r\n                            <NotificationStatus notification={notification} />\r\n\r\n                            <BispedommeStatus\r\n                                beredskapsInfo={presterIBeredskap}\r\n                                error={presterIBeredskapError}\r\n                            />\r\n                        </div>\r\n\r\n                        <Beredskapsomrader\r\n                            beredskapsomrader={bispedomme.beredskapsomrader}\r\n                            presterIBeredskap={presterIBeredskap}\r\n                        />\r\n\r\n                        <HideForRole role={roles.PROST}>\r\n                            <Proster bispedomme_id={bispedomme_id} />\r\n                        </HideForRole>\r\n\r\n                        <br />\r\n                    </>\r\n                )}\r\n            </Card>\r\n        </Background>\r\n    );\r\n};\r\nexport default Bispedomme;\r\n","import React from \"react\";\r\nimport ListMUI from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport { Kontaktinfo } from \"../../store/prester/types\";\r\nimport TelephoneNumber from \"../common/TelephoneNumber\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    header: {\r\n        marginTop: \"2rem\",\r\n        marginBottom: \"0.5rem\",\r\n        marginLeft: \"0.5rem\",\r\n        width: \"50%\",\r\n        fontWeight: \"bold\",\r\n    },\r\n    info: {\r\n        marginTop: \"0.5rem\",\r\n        marginBottom: \"0.5rem\",\r\n        marginLeft: \"0.5rem\",\r\n        width: \"50%\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            width: \"100%\",\r\n        },\r\n    },\r\n    flexstyle: {\r\n        display: \"flex\",\r\n        flexDirection: \"column\",\r\n        alignItems: \"center\",\r\n    },\r\n    colortext: {\r\n        color: \"black\",\r\n        marginLeft: \"1rem\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            marginLeft: \"0\",\r\n        },\r\n    },\r\n    successIcon: {\r\n        marginRight: \"0.2rem\",\r\n        fill: \"#06893A\",\r\n        marginBottom: \"0.1rem\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            display: \"flex\",\r\n            marginLeft: \"auto\",\r\n            marginRight: \"0.5rem\",\r\n            marginBottom: \"1.5rem\",\r\n            flexDirection: \"row\",\r\n            alignItems: \"space-between\",\r\n            justifyContent: \"space-between\",\r\n        },\r\n        display: \"inline-flex\",\r\n    },\r\n    successContent: {\r\n        marginLeft: 0,\r\n        fill: \"#06893A\",\r\n        display: \"flex\",\r\n        borderRadius: \"0.25rem\",\r\n        maxWidth: 280,\r\n        padding: \"0.5rem\",\r\n    },\r\n    chip: {\r\n        background: \"#06893A\",\r\n        color: theme.palette.common.white,\r\n        marginLeft: \"-0.5rem\",\r\n    },\r\n    invchip: {\r\n        background: \"white\",\r\n        color: theme.palette.common.white,\r\n    },\r\n    container: {\r\n        display: \"inline-flex\",\r\n    },\r\n    telefonnr: {\r\n        marginTop: \"0.5rem\",\r\n        marginBottom: \"0.5rem\",\r\n        marginLeft: \"0.5rem\",\r\n        width: \"50%\",\r\n        [theme.breakpoints.down(\"sm\")]: {\r\n            width: \"100%\",\r\n            display: \"flex\",\r\n            flexDirection: \"row\",\r\n            alignItems: \"flex-start\",\r\n            justifyContent: \"flex-start\",\r\n        },\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    kontaktpersoner: Kontaktinfo[];\r\n    tittel: string;\r\n}\r\n\r\nconst Kontaktliste: React.FC<Props> = ({ kontaktpersoner, tittel }) => {\r\n    const classes = useStyles();\r\n    const theme = useTheme();\r\n    const erPrest = tittel === \"Prest\";\r\n    const isOnMobileDevice = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n    const sortedKontakter = [...kontaktpersoner].sort((a, b) =>\r\n        a.navn.localeCompare(b.navn)\r\n    );\r\n    const getNumber = (number: string) => \"tel:+47\" + number;\r\n\r\n    return (\r\n        <ListMUI>\r\n            {isOnMobileDevice && (\r\n                <>\r\n                    <ListItem disableGutters divider>\r\n                        <Typography className={classes.header} variant={\"h6\"}>\r\n                            {tittel}\r\n                        </Typography>\r\n                    </ListItem>\r\n                    {sortedKontakter?.map((kontaktperson, i) => (\r\n                        <ListItem\r\n                            className={classes.flexstyle}\r\n                            divider\r\n                            disableGutters\r\n                            key={i}\r\n                        >\r\n                            <Typography className={classes.info} variant={\"h6\"}>\r\n                                {kontaktperson.navn}\r\n                            </Typography>\r\n                            <Typography\r\n                                className={classes.telefonnr}\r\n                                variant={\"h6\"}\r\n                            >\r\n                                <a\r\n                                    href={getNumber(\r\n                                        kontaktperson.telefonnummer\r\n                                    )}\r\n                                    className={classes.colortext}\r\n                                >\r\n                                    {kontaktperson.telefonnummer}\r\n                                </a>\r\n                                {kontaktperson.iBeredskap && (\r\n                                    <CheckCircleIcon\r\n                                        className={classes.successIcon}\r\n                                    />\r\n                                )}\r\n                            </Typography>\r\n                        </ListItem>\r\n                    ))}\r\n                </>\r\n            )}\r\n\r\n            {!isOnMobileDevice && (\r\n                <>\r\n                    <ListItem disableGutters divider>\r\n                        <Typography className={classes.header} variant={\"h6\"}>\r\n                            {tittel}\r\n                        </Typography>\r\n                        <Typography className={classes.header} variant={\"h6\"}>\r\n                            Telefonnummer\r\n                        </Typography>\r\n                        {erPrest && (\r\n                            <Typography\r\n                                className={classes.header}\r\n                                variant={\"h6\"}\r\n                            >\r\n                                I beredskap\r\n                            </Typography>\r\n                        )}\r\n                    </ListItem>\r\n                    {sortedKontakter?.map((kontaktperson, i) => (\r\n                        <ListItem disableGutters divider key={i}>\r\n                            <Typography className={classes.info} variant={\"h6\"}>\r\n                                {kontaktperson.navn}\r\n                            </Typography>\r\n                            <Typography className={classes.info} variant={\"h6\"}>\r\n                                <TelephoneNumber\r\n                                    telephonenumber={\r\n                                        kontaktperson.telefonnummer\r\n                                    }\r\n                                />\r\n                            </Typography>\r\n                            {erPrest && (\r\n                                <Typography\r\n                                    className={classes.info}\r\n                                    variant={\"h6\"}\r\n                                >\r\n                                    <Container\r\n                                        className={classes.successContent}\r\n                                    >\r\n                                        {kontaktperson.iBeredskap ? (\r\n                                            <Chip\r\n                                                label=\"I BEREDSKAP\"\r\n                                                className={classes.chip}\r\n                                            />\r\n                                        ) : (\r\n                                            <Chip\r\n                                                label=\"IKKE BEREDSKAP\"\r\n                                                className={classes.invchip}\r\n                                            />\r\n                                        )}\r\n                                    </Container>\r\n                                </Typography>\r\n                            )}\r\n                        </ListItem>\r\n                    ))}\r\n                </>\r\n            )}\r\n        </ListMUI>\r\n    );\r\n};\r\nexport default Kontaktliste;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Kontaktliste from \"./KontaktListe\";\r\nimport PrestIBeredskap from \"../beredskapsomrade/prestIBeredskap\";\r\nimport { Kontaktinfo } from \"../../store/prester/types\";\r\nimport { Beredskapsomrade } from \"../types\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    mainTitle: {\r\n        marginBottom: \"1rem\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    prester: Kontaktinfo[];\r\n    beredskapsomrade: Beredskapsomrade;\r\n}\r\n\r\nconst PresterIBeredskapsomradetMobil: React.FC<Props> = ({\r\n    prester,\r\n    beredskapsomrade,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    const getThreeFirst = (personer: Kontaktinfo[]) => {\r\n        const sortedPersoner = [...personer].sort((a, b) =>\r\n            a.navn.localeCompare(b.navn)\r\n        );\r\n        return sortedPersoner.filter((x) => x.iBeredskap).slice(0, 2);\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <Typography variant=\"h4\" className={classes.mainTitle}>\r\n                {beredskapsomrade.navn}\r\n            </Typography>\r\n\r\n            {getThreeFirst(prester)?.map((prest, index) => (\r\n                <div key={index}>\r\n                    <PrestIBeredskap prest={prest} />\r\n                </div>\r\n            ))}\r\n\r\n            <Kontaktliste kontaktpersoner={prester} tittel=\"Prest:\" />\r\n        </>\r\n    );\r\n};\r\nexport default PresterIBeredskapsomradetMobil;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { visKommuner } from \"../common/VisKommuner\";\r\nimport { Beredskapsomrade, Kommune } from \"../prestSokeResultater/types\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    mainTitle: {\r\n        marginBottom: \"1rem\",\r\n    },\r\n    kommuner: {\r\n        marginBottom: \"3rem\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    beredskapsomrade: Beredskapsomrade;\r\n    kommuner: Kommune[];\r\n}\r\n\r\nconst BeredskapsomradeMedKommunerTittel: React.FC<Props> = ({\r\n    beredskapsomrade,\r\n    kommuner,\r\n}) => {\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <>\r\n            <Typography variant=\"h4\" className={classes.mainTitle}>\r\n                {beredskapsomrade.navn}\r\n            </Typography>\r\n            <div className={classes.kommuner}>\r\n                {visKommuner(kommuner, kommuner.length)}\r\n            </div>\r\n        </>\r\n    );\r\n};\r\nexport default BeredskapsomradeMedKommunerTittel;\r\n","import React from \"react\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport Card from \"../common/Card\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useLoader } from \"../customHooks/useLoader\";\r\nimport { httpGet } from \"../../services/http/httpService\";\r\nimport InfoBox from \"../common/InfoBox\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport { feilmeldinger } from \"../../utils/constants\";\r\nimport TilbakeButton from \"../common/TilbakeButton\";\r\nimport Background from \"../common/Background\";\r\nimport Kontaktliste from \"./KontaktListe\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport PrestIBeredskap from \"../beredskapsomrade/prestIBeredskap\";\r\nimport PresterIBeredskapsomradetMobil from \"./PresterIBeredskapsomradetMobil\";\r\nimport BeredskapsomradeMedKommunerTittel from \"./BeredskapsomradeMedKommunerTittel\";\r\n\r\ninterface ParamTypes {\r\n    beredskapsomrade_id: string;\r\n}\r\n\r\nconst PresterIBeredskapsomradet: React.FC = () => {\r\n    const theme = useTheme();\r\n    const isOnMobileDevice = useMediaQuery(theme.breakpoints.down(\"sm\"), { noSsr: true });\r\n    const { beredskapsomrade_id } = useParams<ParamTypes>();\r\n    const { data, loading, error } = useLoader(() =>\r\n        httpGet(`api/Beredskapsomrader/${beredskapsomrade_id}`)\r\n    );\r\n    const hentTreFørsteIBeredskap = (personer: any[]) => {\r\n        const sortedPersoner = [...personer].sort((a, b) =>\r\n            a.navn.localeCompare(b.navn)\r\n        );\r\n        return sortedPersoner.filter((x) => x.iBeredskap).slice(0, 2);\r\n    };\r\n\r\n    return (\r\n        <Background>\r\n            <Card padding=\"1.5rem\">\r\n                <TilbakeButton linkTo={\"/prest\"} />\r\n                {loading && <LinearProgress />}\r\n                {error && (\r\n                    <InfoBox\r\n                        message={feilmeldinger.uventetFeil}\r\n                        icon={<ErrorOutlineIcon />}\r\n                    />\r\n                )}\r\n                {!isOnMobileDevice && data && (\r\n                    <>\r\n                        <BeredskapsomradeMedKommunerTittel\r\n                            beredskapsomrade={data.beredskapsomrade}\r\n                            kommuner={data.beredskapsomrade.kommuner}\r\n                        />\r\n                        {hentTreFørsteIBeredskap(data.prester)?.map(\r\n                            (prest, index) => (\r\n                                <div key={index}>\r\n                                    <PrestIBeredskap prest={prest} />\r\n                                </div>\r\n                            )\r\n                        )}\r\n                        <Kontaktliste\r\n                            kontaktpersoner={data.prester}\r\n                            tittel=\"Prest\"\r\n                        />\r\n                    </>\r\n                )}\r\n                {isOnMobileDevice && data && (\r\n                    <PresterIBeredskapsomradetMobil\r\n                        prester={data.prester}\r\n                        beredskapsomrade={data.beredskapsomrade}\r\n                    />\r\n                )}\r\n            </Card>\r\n        </Background>\r\n    );\r\n};\r\nexport default PresterIBeredskapsomradet;\r\n","import React, { lazy, Suspense } from \"react\";\r\nimport { Switch, Route, Redirect } from \"react-router-dom\";\r\nimport { roles } from \"../../utils/enum\";\r\nimport Beredskapsomrade from \"../beredskapsomrade/Beredskapsomrade\";\r\nimport Bispedomme from \"../bispedomme/Bispedomme\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport { BeredskapsomradeProvider } from \"../beredskapsomrade/contexts/beredskapsomradeContext\";\r\nimport { RoleType } from \"../../utils/types\";\r\nimport PresterIBeredskapsomradet from \"../prester/PresterIBeredskapsomradet\";\r\nimport KontaktpersonerIBeredskapsomradet from \"../proster/KontaktpersonerIBeredskapsomradet\";\r\n\r\nconst SecuritasPage = lazy(\r\n    () =>\r\n        import(/* webpackChunkName: \"SecuritasPage\" */ \"../Pages/SecuritasPage\")\r\n);\r\nconst BeredskapsansvarligPage = lazy(\r\n    () =>\r\n        import(\r\n            /* webpackChunkName: \"BeredskapsansvarligPage\" */ \"../Pages/BeredskapsansvarligPage\"\r\n        )\r\n);\r\nconst PrestPage = lazy(\r\n    () => import(/* webpackChunkName: \"PrestPage\" */ \"../Pages/PrestPage\")\r\n);\r\nconst NotFound = lazy(\r\n    () => import(/* webpackChunkName: \"NotFound\" */ \"../Pages/NotFound\")\r\n);\r\nconst Unauthorized = lazy(\r\n    () => import(/* webpackChunkName: \"Unauthorized\" */ \"../Pages/Unauthorized\")\r\n);\r\n\r\nconst ProstPage = lazy(\r\n    () => import(/* webpackChunkName:\"ProstPage\" */ \"../Pages/ProstPage\")\r\n);\r\n\r\ninterface Props {\r\n    role: RoleType;\r\n    roleList: RoleType[];\r\n}\r\n\r\nconst Routes: React.FC<Props> = ({ role, roleList }) => {\r\n    const { ADMIN, BEREDSKAPSANSVARLIG, SECURITAS, PREST, PROST } = roles;\r\n    const getPaths = (rolle?: RoleType) => {\r\n        switch (rolle) {\r\n            case BEREDSKAPSANSVARLIG:\r\n            case ADMIN:\r\n            case PROST:\r\n                return \"/bispedommer\";\r\n            case SECURITAS:\r\n                return \"/securitas\";\r\n            case PREST:\r\n                return \"/prest\";\r\n            default:\r\n                return \"/not-found\";\r\n        }\r\n    };\r\n\r\n    return (\r\n        <Switch>\r\n            <Redirect from=\"/\" exact to={getPaths(role)} />\r\n            {(role === BEREDSKAPSANSVARLIG ||\r\n                role === ADMIN ||\r\n                role === PROST) && (\r\n                <Route\r\n                    exact\r\n                    path={\r\n                        \"/bispedommer/:bispedomme_id/beredskapsomrader/:beredskapsomrade_id\"\r\n                    }\r\n                >\r\n                    <BeredskapsomradeProvider>\r\n                        <Beredskapsomrade />\r\n                    </BeredskapsomradeProvider>\r\n                </Route>\r\n            )}\r\n            {(role === SECURITAS || role === ADMIN) && (\r\n                <Route exact path=\"/securitas\">\r\n                    <Suspense fallback={<LinearProgress />}>\r\n                        <SecuritasPage />\r\n                    </Suspense>\r\n                </Route>\r\n            )}\r\n            {(role === BEREDSKAPSANSVARLIG ||\r\n                role === PROST ||\r\n                role === ADMIN) && (\r\n                <Route exact path={\"/bispedommer/:bispedomme_id\"}>\r\n                    <Bispedomme />\r\n                </Route>\r\n            )}\r\n            {(role === PREST ||\r\n                role === ADMIN ||\r\n                (role === PROST && roleList.includes(PREST))) && (\r\n                <Route exact path=\"/prest\">\r\n                    <Suspense fallback={<LinearProgress />}>\r\n                        <PrestPage />\r\n                    </Suspense>\r\n                </Route>\r\n            )}\r\n            {role === PREST && (\r\n                <Route\r\n                    exact\r\n                    path=\"/prest/beredskapsomrader/:beredskapsomrade_id\"\r\n                >\r\n                    <PresterIBeredskapsomradet />\r\n                </Route>\r\n            )}\r\n            {role === PREST && (\r\n                <Route\r\n                    exact\r\n                    path=\"/prest/beredskapsomrader/:beredskapsomrade_id/kontaktpersoner\"\r\n                >\r\n                    <KontaktpersonerIBeredskapsomradet />\r\n                </Route>\r\n            )}\r\n            {(role === BEREDSKAPSANSVARLIG || role === ADMIN) && (\r\n                <Route exact path=\"/bispedommer\">\r\n                    <Suspense fallback={<LinearProgress />}>\r\n                        <BeredskapsansvarligPage />\r\n                    </Suspense>\r\n                </Route>\r\n            )}\r\n            {role === PROST && (\r\n                <Route exact path=\"/bispedommer\">\r\n                    <Suspense fallback={<LinearProgress />}>\r\n                        <ProstPage />\r\n                    </Suspense>\r\n                </Route>\r\n            )}\r\n\r\n            <Route path=\"/unauthorized\">\r\n                <Suspense fallback={<LinearProgress />}>\r\n                    <Unauthorized />\r\n                </Suspense>\r\n            </Route>\r\n            <Route path=\"/not-found\">\r\n                <Suspense fallback={<LinearProgress />}>\r\n                    <NotFound />\r\n                </Suspense>\r\n            </Route>\r\n            <Redirect to=\"/not-found\" />\r\n        </Switch>\r\n    );\r\n};\r\n\r\nexport default Routes;\r\n","import React, { useEffect, useContext } from \"react\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport Header from \"./Header\";\r\nimport { getRoleByPriority } from \"../../utils/roleProvider\";\r\nimport { getTokenSilent } from \"../../authentication/authModule\";\r\nimport { TokenType } from \"../../utils/types\";\r\nimport ServiceWorkerAlert from \"../serviceWorker/serviceWorkerAlert\";\r\nimport Routes from \"./Routes\";\r\nimport {\r\n    RoleContext,\r\n    RoleContextType,\r\n} from \"../common/contexts/RoleContextProvider\";\r\nimport { UserContextProvider } from \"../common/contexts/UserContextProvider\";\r\n\r\nconst App: React.FC = () => {\r\n    const { setRole, role, setRoleList, roleList } = useContext(\r\n        RoleContext\r\n    ) as RoleContextType;\r\n    useEffect(() => {\r\n        async function getToken() {\r\n            const token = await getTokenSilent();\r\n            var tokenModel: TokenType = JSON.parse(atob(token.split(\".\")[1]));\r\n            setRoleList(tokenModel.roles);\r\n            setRole(getRoleByPriority(tokenModel));\r\n        }\r\n\r\n        getToken();\r\n    }, [setRole, setRoleList]);\r\n\r\n    return (\r\n      <BrowserRouter>\r\n          {role && (\r\n              <UserContextProvider>\r\n                  <Header />\r\n                  <ServiceWorkerAlert />\r\n                  <Routes role={role} roleList={roleList} />\r\n              </UserContextProvider>\r\n          )}\r\n      </BrowserRouter>\r\n    );\r\n};\r\n\r\nexport default App;\r\n","// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n  window.location.hostname === 'localhost' ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.location.hostname === '[::1]' ||\r\n    // 127.0.0.0/8 are considered localhost for IPv4.\r\n    window.location.hostname.match(\r\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n    )\r\n);\r\n\r\ntype Config = {\r\n  onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n  onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n    // The URL constructor is available in all browsers that support SW.\r\n    const publicUrl = new URL(\r\n      process.env.PUBLIC_URL,\r\n      window.location.href\r\n    );\r\n    if (publicUrl.origin !== window.location.origin) {\r\n      // Our service worker won't work if PUBLIC_URL is on a different origin\r\n      // from what our page is served on. This might happen if a CDN is used to\r\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n      return;\r\n    }\r\n\r\n    window.addEventListener('load', () => {\r\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n      if (isLocalhost) {\r\n        // This is running on localhost. Let's check if a service worker still exists or not.\r\n        checkValidServiceWorker(swUrl, config);\r\n        // Add some additional logging to localhost, pointing developers to the\r\n        // service worker/PWA documentation.\r\n        navigator.serviceWorker.ready.then(() => {\r\n          console.log(\r\n            'This web app is being served cache-first by a service ' +\r\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n          );\r\n        });\r\n      } else {\r\n        // Is not localhost. Just register service worker\r\n        registerValidSW(swUrl, config);\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n  navigator.serviceWorker\r\n    .register(swUrl)\r\n    .then(registration => {\r\n      registration.onupdatefound = () => {\r\n        const installingWorker = registration.installing;\r\n        if (installingWorker == null) {\r\n          return;\r\n        }\r\n        installingWorker.onstatechange = () => {\r\n          if (installingWorker.state === 'installed') {\r\n            if (navigator.serviceWorker.controller) {\r\n              // At this point, the updated precached content has been fetched,\r\n              // but the previous service worker will still serve the older\r\n              // content until all client tabs are closed.\r\n              console.log(\r\n                'New content is available and will be used when all ' +\r\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n              );\r\n              // Execute callback\r\n              if (config && config.onUpdate) {\r\n                config.onUpdate(registration);\r\n              }\r\n            } else {\r\n              // At this point, everything has been precached.\r\n              // It's the perfect time to display a\r\n              // \"Content is cached for offline use.\" message.\r\n              console.log('Content is cached for offline use.');\r\n\r\n              // Execute callback\r\n              if (config && config.onSuccess) {\r\n                config.onSuccess(registration);\r\n              }\r\n            }\r\n          }\r\n        };\r\n      };\r\n    })\r\n    .catch(error => {\r\n      console.error('Error during service worker registration:', error);\r\n    });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n  // Check if the service worker can be found. If it can't reload the page.\r\n  fetch(swUrl, {\r\n    headers: { 'Service-Worker': 'script' }\r\n  })\r\n    .then(response => {\r\n      // Ensure service worker exists, and that we really are getting a JS file.\r\n      const contentType = response.headers.get('content-type');\r\n      if (\r\n        response.status === 404 ||\r\n        (contentType != null && contentType.indexOf('javascript') === -1)\r\n      ) {\r\n        // No service worker found. Probably a different app. Reload the page.\r\n        navigator.serviceWorker.ready.then(registration => {\r\n          registration.unregister().then(() => {\r\n            window.location.reload();\r\n          });\r\n        });\r\n      } else {\r\n        // Service worker found. Proceed as normal.\r\n        registerValidSW(swUrl, config);\r\n      }\r\n    })\r\n    .catch(() => {\r\n      console.log(\r\n        'No internet connection found. App is running in offline mode.'\r\n      );\r\n    });\r\n}\r\n\r\nexport function unregister() {\r\n  if ('serviceWorker' in navigator) {\r\n    navigator.serviceWorker.ready\r\n      .then(registration => {\r\n        registration.unregister();\r\n      })\r\n      .catch(error => {\r\n        console.error(error.message);\r\n      });\r\n  }\r\n}\r\n","import {\r\n    AuthState,\r\n    AuthActionTypes,\r\n    AUTHENTICATE_FAIL,\r\n    AUTHENTICATE_START,\r\n    AUTHENTICATE_SUCCESS,\r\n} from \"./types\";\r\n\r\nexport const initialState: AuthState = {\r\n    authenticated: null,\r\n    loading: false,\r\n    error: null,\r\n};\r\n\r\nexport const authReducer = (state = initialState, action: AuthActionTypes) => {\r\n    switch (action.type) {\r\n        case AUTHENTICATE_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case AUTHENTICATE_SUCCESS:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                authenticated: true,\r\n            };\r\n        case AUTHENTICATE_FAIL:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                authenticated: false,\r\n                error: action.payload?.error,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n","import {\r\n    AccountState,\r\n    AccountActionTypes,\r\n    SET_ACCOUNT,\r\n    SET_ACCOUNT_FAIL,\r\n} from \"./types\";\r\n\r\nexport const initialState: AccountState = {\r\n    account: undefined,\r\n    error: null,\r\n};\r\n\r\nexport const accountReducer = (\r\n    state = initialState,\r\n    action: AccountActionTypes\r\n) => {\r\n    switch (action.type) {\r\n        case SET_ACCOUNT:\r\n            return {\r\n                ...state,\r\n                account: action.payload,\r\n            };\r\n        case SET_ACCOUNT_FAIL:\r\n            return {\r\n                ...state,\r\n                error: action.payload.error,\r\n            };\r\n\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n","import {\r\n    PrestState,\r\n    PrestActionTypes,\r\n    LEGG_TIL_PREST_FAIL,\r\n    LEGG_TIL_PREST_START,\r\n    LEGG_TIL_PREST_SUCCESS,\r\n} from \"./types\";\r\n\r\nexport const initialState: PrestState = {\r\n    loading: false,\r\n    error: null,\r\n};\r\n\r\nexport const presterReducer = (\r\n    state = initialState,\r\n    action: PrestActionTypes\r\n) => {\r\n    switch (action.type) {\r\n        case LEGG_TIL_PREST_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case LEGG_TIL_PREST_SUCCESS:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n            };\r\n        case LEGG_TIL_PREST_FAIL:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.payload.error,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n","import {\r\n    BispedommeState,\r\n    BispedommeActionTypes,\r\n    HENT_BISPEDOMMER_SUCCESS,\r\n    HENT_BISPEDOMMER_START,\r\n    HENT_BISPEDOMMER_FAIL,\r\n} from \"./types\";\r\n\r\nexport const initialState: BispedommeState = {\r\n    loading: false,\r\n    error: null,\r\n    bispedommer: [],\r\n};\r\n\r\nexport const bispedommerReducer = (\r\n    state = initialState,\r\n    action: BispedommeActionTypes\r\n) => {\r\n    switch (action.type) {\r\n        case HENT_BISPEDOMMER_START:\r\n            return {\r\n                ...state,\r\n                loading: true,\r\n            };\r\n        case HENT_BISPEDOMMER_SUCCESS:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                bispedommer: action.payload,\r\n            };\r\n        case HENT_BISPEDOMMER_FAIL:\r\n            return {\r\n                ...state,\r\n                loading: false,\r\n                error: action.payload,\r\n            };\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n","import { SW_INIT, SW_UPDATE,ServiceWorkerActionTypes } from './types';\r\n\r\nexport const initialState = {\r\n    serviceWorkerInitialized: false,\r\n    serviceWorkerUpdated: false,\r\n    serviceWorkerRegistration: null,\r\n}\r\n\r\nexport const serviceWorkerReducer = (state = initialState, action: ServiceWorkerActionTypes) =>{\r\n  switch (action.type) {\r\n    case SW_INIT:\r\n      return {\r\n        ...state,\r\n        serviceWorkerInitialized: !state.serviceWorkerInitialized,\r\n      };\r\n    case SW_UPDATE:\r\n      return {\r\n        ...state,\r\n        serviceWorkerUpdated: !state.serviceWorkerUpdated,\r\n        serviceWorkerRegistration: action.payload,\r\n      };\r\n    default:\r\n      return state;\r\n  }\r\n}\r\n","import { combineReducers, createStore, applyMiddleware } from \"redux\";\r\nimport { authReducer } from \"./auth/authReducer\";\r\nimport { accountReducer } from \"./account/accountReducer\";\r\nimport { presterReducer } from \"./prester/presterReducer\";\r\nimport { bispedommerReducer } from \"./bispedommer/bispedommerReducer\";\r\nimport { serviceWorkerReducer } from \"./serviceWorker/serviceWorkerReducer\";\r\nimport { composeWithDevTools } from \"redux-devtools-extension\";\r\nimport thunk from \"redux-thunk\";\r\n\r\nconst rootReducer = combineReducers({\r\n    authReducer,\r\n    accountReducer,\r\n    presterReducer,\r\n    serviceWorkerReducer,\r\n    bispedommerReducer,\r\n});\r\n\r\nconst store = createStore(\r\n    rootReducer,\r\n    composeWithDevTools(applyMiddleware(thunk))\r\n);\r\n\r\nexport type RootState = ReturnType<typeof rootReducer>;\r\n\r\nexport default store;\r\n","export const AUTHENTICATE_START = \"AUTHENTICATE_START\";\r\nexport const AUTHENTICATE_SUCCESS = \"AUTHENTICATE_SUCCESS\";\r\nexport const AUTHENTICATE_FAIL = \"AUTHENTICATE_FAIL\";\r\n\r\nexport interface AuthState {\r\n    authenticated: boolean | null;\r\n    loading: boolean;\r\n    error: any;\r\n}\r\n\r\ninterface AuthAction {\r\n    type: string;\r\n    payload?: any;\r\n}\r\n\r\nexport type AuthActionTypes = AuthAction;\r\n","import { AccountInfo } from \"@azure/msal-browser\";\r\n\r\nexport type AccountAction = {\r\n    type: string;\r\n    payload: any;\r\n};\r\n\r\nexport interface AccountState {\r\n    account: AccountInfo | undefined;\r\n    error: any;\r\n}\r\n\r\nexport const SET_ACCOUNT = \"SET_ACCOUNT\";\r\nexport const SET_ACCOUNT_FAIL = \"SET_ACCOUNT_FAIL\";\r\n\r\nexport type AccountActionTypes = AccountAction;\r\n","export const LEGG_TIL_PREST_START = \"LEGG_TIL_PREST_START\";\r\nexport const LEGG_TIL_PREST_SUCCESS = \"LEGG_TIL_PREST_SUCCESS\";\r\nexport const LEGG_TIL_PREST_FAIL = \"LEGG_TIL_PREST_FAIL\";\r\n\r\nexport interface PrestState {\r\n    loading: boolean;\r\n    error: any;\r\n}\r\n\r\ninterface PrestAction {\r\n    type: string;\r\n    payload?: any;\r\n}\r\n\r\nexport interface Prest {\r\n    id: number;\r\n    azureAdId: string;\r\n    navn: string;\r\n    telefonnummer: string;\r\n    iBeredskap: boolean;\r\n}\r\n\r\nexport interface Kontaktinfo {\r\n    id: number;\r\n    azureAdId: string;\r\n    navn: string;\r\n    telefonnummer: string;\r\n    iBeredskap: boolean;\r\n}\r\n\r\nexport type PrestActionTypes = PrestAction;\r\n","export const SW_INIT = \"SW_INIT\";\r\nexport const SW_UPDATE = \"SW_UPDATE\";\r\n\r\ninterface ServiceWorkerAction {\r\n    type: string;\r\n    payload?: any;\r\n}\r\n\r\nexport type ServiceWorkerActionTypes = ServiceWorkerAction;\r\n","import { Beredskapsomrade } from \"../../components/prestSokeResultater/types\";\r\n\r\nexport const HENT_BISPEDOMMER_START = \"HENT_BISPEDOMMER_START\";\r\nexport const HENT_BISPEDOMMER_SUCCESS = \"HENT_BISPEDOMMER_SUCCESS\";\r\nexport const HENT_BISPEDOMMER_FAIL = \"HENT_BISPEDOMMER_FAIL\";\r\n\r\nexport interface BispedommeState {\r\n    loading: boolean;\r\n    error: Error | null;\r\n    bispedommer: Bispedomme[];\r\n}\r\n\r\ninterface BispedommeAction {\r\n    type: string;\r\n    payload?: Bispedomme[] | Error;\r\n}\r\n\r\nexport interface Bispedomme {\r\n    id: number;\r\n    navn: string;\r\n    beredskapsomrader: Beredskapsomrade[];\r\n}\r\n\r\nexport type BispedommeActionTypes = BispedommeAction;\r\n","import { createMuiTheme } from \"@material-ui/core\";\r\n\r\nexport const Kirketheme = createMuiTheme({\r\n    palette: {\r\n        primary: {\r\n            main: \"#393938\",\r\n        },\r\n        secondary: {\r\n            main: \"#F2F2F2\",\r\n        },\r\n        common: {\r\n            black: \"#000\",\r\n            white: \"#fff\",\r\n        },\r\n        error: {\r\n            main: \"#D90011\",\r\n        },\r\n        warning: {\r\n            main: \"#FF9100\",\r\n        },\r\n        info: {\r\n            main: \"#0578CA\",\r\n        },\r\n        success: {\r\n            main: \"#06893A\",\r\n        },\r\n        type: \"light\",\r\n    },\r\n\r\n    typography: {\r\n        fontFamily: \"Arial\",\r\n        fontSize: 14,\r\n    },\r\n});\r\n","import React, { ReactNode, useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { RootState } from \"../store/combinedReducers\";\r\nimport { login, handleRedirectPromise } from \"./authModule\";\r\nimport {\r\n    authenticateStart,\r\n    authenticateSuccess,\r\n    authenticateFail,\r\n} from \"../store/auth/authActions\";\r\nimport { setAccount } from \"../store/account/accountActions\";\r\nimport Unauthorized from \"../components/Pages/Unauthorized\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\n\r\ninterface Props {\r\n    children: ReactNode;\r\n}\r\n\r\nconst AuthProvider: React.FC<Props> = ({ children }) => {\r\n    const dispatch = useDispatch();\r\n\r\n    useEffect(() => {\r\n        handleRedirectPromise()\r\n            .then((response) => {\r\n                dispatch(authenticateStart());\r\n                if (response !== null) {\r\n                    dispatch(authenticateSuccess());\r\n                    dispatch(setAccount(response.account));\r\n                } else {\r\n                    login();\r\n                }\r\n            })\r\n            .catch((e) => {\r\n                dispatch(authenticateFail(e));\r\n            });\r\n    }, [dispatch]);\r\n\r\n    const authenticated = useSelector(\r\n        (state: RootState) => state.authReducer.authenticated\r\n    );\r\n\r\n    const checkAuth = () => {\r\n        if (authenticated === null) {\r\n            return <LinearProgress />;\r\n        }\r\n        if (authenticated) {\r\n            return <>{children}</>;\r\n        }\r\n        if (!authenticated) {\r\n            return <Unauthorized />;\r\n        }\r\n        return <div></div>;\r\n    };\r\n\r\n    return <>{checkAuth()}</>;\r\n};\r\n\r\nexport default AuthProvider;\r\n","import {\r\n    AUTHENTICATE_START,\r\n    AUTHENTICATE_FAIL,\r\n    AUTHENTICATE_SUCCESS,\r\n} from \"./types\";\r\n\r\nexport const authenticateStart = () => {\r\n    return {\r\n        type: AUTHENTICATE_START,\r\n    };\r\n};\r\n\r\nexport const authenticateSuccess = () => {\r\n    return {\r\n        type: AUTHENTICATE_SUCCESS,\r\n    };\r\n};\r\n\r\nexport const authenticateFail = (e?: Error) => {\r\n    return {\r\n        type: AUTHENTICATE_FAIL,\r\n        payload: e,\r\n    };\r\n};\r\n","import { SET_ACCOUNT, SET_ACCOUNT_FAIL } from \"./types\";\r\n\r\nexport const setAccount = (payload: any) => {\r\n    return {\r\n        type: SET_ACCOUNT,\r\n        payload,\r\n    };\r\n};\r\n\r\nexport const setAccountFail = (payload: any) => {\r\n    return {\r\n        type: SET_ACCOUNT_FAIL,\r\n        payload: payload,\r\n    };\r\n};\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./index.css\";\r\nimport App from \"./components/Layout/App\";\r\nimport * as serviceWorker from \"./serviceWorker\";\r\nimport { Provider } from \"react-redux\";\r\nimport store from \"./store/combinedReducers\";\r\nimport { Kirketheme } from \"./utils/theme\";\r\nimport AuthProvider from \"./authentication/AuthProvider\";\r\nimport { ThemeProvider } from \"@material-ui/core\";\r\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\r\nimport { SW_UPDATE, SW_INIT } from \"./store/serviceWorker/types\";\r\nimport { ToastContainer } from \"react-toastify\";\r\nimport { RoleContextProvider } from \"./components/common/contexts/RoleContextProvider\";\r\nimport { PrestContextProvider } from \"./components/prester/contexts/PrestContextProvider\";\r\n\r\nReactDOM.render(\r\n    <React.StrictMode>\r\n        <Provider store={store}>\r\n            <AuthProvider>\r\n                <ThemeProvider theme={Kirketheme}>\r\n                    <ToastContainer />\r\n                    <CssBaseline />\r\n                    <RoleContextProvider>\r\n                        <PrestContextProvider>\r\n                            <App />\r\n                        </PrestContextProvider>\r\n                    </RoleContextProvider>\r\n                </ThemeProvider>\r\n            </AuthProvider>\r\n        </Provider>\r\n    </React.StrictMode>,\r\n    document.getElementById(\"root\")\r\n);\r\n\r\nserviceWorker.register({\r\n    onSuccess: () => store.dispatch({ type: SW_INIT }),\r\n    onUpdate: (registration) =>\r\n        store.dispatch({ type: SW_UPDATE, payload: registration }),\r\n    });","import { useState, useEffect } from \"react\";\r\n\r\nexport interface Loader<T> {\r\n    data?: T;\r\n    loading: boolean;\r\n    error?: Error;\r\n    reload(): void;\r\n}\r\n\r\ntype DependencyList = [];\r\n\r\nexport function useLoader<T>(\r\n    loadingFunction: () => Promise<T>,\r\n    deps: DependencyList = []\r\n): Loader<T> {\r\n    const [data, setData] = useState<T | undefined>();\r\n    const [loading, setLoading] = useState(true);\r\n    const [error, setError] = useState<Error | undefined>();\r\n\r\n    async function reload() {\r\n        setLoading(true);\r\n        setError(undefined);\r\n        setData(undefined);\r\n        try {\r\n            setData(await loadingFunction());\r\n        } catch (e) {\r\n            setError(e);\r\n        } finally {\r\n            setLoading(false);\r\n        }\r\n    }\r\n\r\n    useEffect(() => {\r\n        reload();\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, deps);\r\n    return { data, loading, error, reload };\r\n}\r\n","import React from \"react\";\r\nimport { toast, ToastOptions } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport \"./snackbarStyle.css\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport WarningIcon from \"@material-ui/icons/Warning\";\r\nimport InfoIcon from \"@material-ui/icons/Info\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\n\r\nconst defaultProps: ToastOptions = {\r\n    position: \"bottom-center\",\r\n    hideProgressBar: true,\r\n    closeOnClick: true,\r\n    pauseOnHover: true,\r\n};\r\n\r\ninterface Props {\r\n    message: string;\r\n    type: string;\r\n}\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n    },\r\n    icon: {\r\n        marginRight: \"1rem\",\r\n    },\r\n}));\r\n\r\nconst SnackbarLayout: React.FC<Props> = ({ message, type }) => {\r\n    const classes = useStyles();\r\n    const getIcon = () => {\r\n        switch (type) {\r\n            case \"error\":\r\n                return (\r\n                    <ErrorOutlineIcon\r\n                        color=\"secondary\"\r\n                        className={classes.icon}\r\n                    />\r\n                );\r\n            case \"success\":\r\n                return (\r\n                    <CheckCircleIcon\r\n                        color=\"secondary\"\r\n                        className={classes.icon}\r\n                    />\r\n                );\r\n            case \"warning\":\r\n                return <WarningIcon color=\"primary\" className={classes.icon} />;\r\n            case \"info\":\r\n                return <InfoIcon color=\"secondary\" className={classes.icon} />;\r\n            default:\r\n                return <></>;\r\n        }\r\n    };\r\n\r\n    return (\r\n        <div className={classes.root}>\r\n            {getIcon()} {message}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport const customToast = {\r\n    success(message: string, options: ToastOptions = {}) {\r\n        toast.success(<SnackbarLayout message={message} type=\"success\" />, {\r\n            ...options,\r\n            ...defaultProps,\r\n            autoClose: 3000,\r\n            className: \"snackbarSuccess\",\r\n        });\r\n    },\r\n    warning(message: string, options: ToastOptions = {}) {\r\n        toast.warning(<SnackbarLayout message={message} type=\"warning\" />, {\r\n            ...options,\r\n            ...defaultProps,\r\n            autoClose: 5000,\r\n            className: \"snackbarWarning\",\r\n            closeButton: <CloseIcon fontSize=\"small\" />,\r\n        });\r\n    },\r\n    error(message: string, options: ToastOptions = {}) {\r\n        toast.error(<SnackbarLayout message={message} type=\"error\" />, {\r\n            ...options,\r\n            ...defaultProps,\r\n            autoClose: false,\r\n            className: \"snackbarError\",\r\n        });\r\n    },\r\n    info(message: string, options: ToastOptions = {}) {\r\n        toast.info(<SnackbarLayout message={message} type=\"info\" />, {\r\n            ...options,\r\n            ...defaultProps,\r\n            autoClose: 5000,\r\n            className: \"snackbarInfo\",\r\n        });\r\n    },\r\n};\r\n","import React from \"react\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\ninterface Props {\r\n    message: string;\r\n    icon: React.ReactNode;\r\n    children?: React.ReactNode;\r\n}\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        padding: \"2rem\",\r\n    },\r\n    icon: {\r\n        textAlign: \"center\",\r\n    },\r\n    message: {\r\n        textAlign: \"center\",\r\n    },\r\n}));\r\n\r\nconst InfoBox: React.FC<Props> = ({ message, icon, children }) => {\r\n    const classes = useStyles();\r\n    return (\r\n        <Card className={classes.root}>\r\n            <CardContent>\r\n                <p className={classes.icon}>{icon}</p>\r\n                <Typography variant=\"h6\" className={classes.message}>\r\n                    {message}\r\n                </Typography>\r\n\r\n                {children}\r\n            </CardContent>\r\n        </Card>\r\n    );\r\n};\r\n\r\nexport default InfoBox;\r\n","import { Configuration, LogLevel } from \"@azure/msal-browser\";\r\n\r\nexport const msalConfig: Configuration = {\r\n    auth: {\r\n        clientId: window.config.clientId,\r\n        authority:\r\n            \"https://login.microsoftonline.com/512024a4-8685-4f03-8086-14a61730e817\",\r\n        redirectUri: window.config.pwaRedirectUrl,\r\n    },\r\n    cache: {\r\n        cacheLocation: \"sessionStorage\",\r\n        storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\r\n    },\r\n    system: {\r\n        loggerOptions: {\r\n            loggerCallback: (\r\n                level: LogLevel,\r\n                message: string,\r\n                containsPii: boolean\r\n            ) => {\r\n                if (containsPii) {\r\n                    return;\r\n                }\r\n                switch (level) {\r\n                    case LogLevel.Error:\r\n                        console.error(message);\r\n                        return;\r\n                    case LogLevel.Info:\r\n                        console.info(message);\r\n                        return;\r\n                    case LogLevel.Verbose:\r\n                        console.debug(message);\r\n                        return;\r\n                    case LogLevel.Warning:\r\n                        console.warn(message);\r\n                        return;\r\n                }\r\n            },\r\n        },\r\n    },\r\n};\r\n","import {\r\n    PublicClientApplication,\r\n    InteractionRequiredAuthError,\r\n} from \"@azure/msal-browser\";\r\n\r\nimport { msalConfig } from \"./authConfig\";\r\n\r\nexport const msalInstance = new PublicClientApplication(msalConfig);\r\n\r\nconst loginRequest = {\r\n    scopes: [\"openid\", \"profile\", window.config.apiScope],\r\n};\r\n\r\nexport const handleRedirectPromise = () => {\r\n    return msalInstance.handleRedirectPromise();\r\n};\r\n\r\nexport const signout = () => {\r\n    msalInstance.logout();\r\n};\r\n\r\nexport const signoutAndRedirect = () => {\r\n    msalInstance.logout().then(() => {\r\n        msalInstance.loginRedirect(loginRequest);\r\n    });\r\n};\r\n\r\nexport const login = () => {\r\n    msalInstance.loginRedirect(loginRequest);\r\n};\r\n\r\nexport const getTokenSilent = async () => {\r\n    var account = getAccount();\r\n    if (account === undefined) {\r\n        console.log(\r\n            \"[getTokenSilent] Account is undefined. Cannot do msalInstance.acquireTokenSilent without account\"\r\n        );\r\n        return \"\";\r\n    }\r\n    var request = {\r\n        scopes: [window.config.apiScope],\r\n        account,\r\n    };\r\n    try {\r\n        const res = await msalInstance.acquireTokenSilent(request);\r\n        return res.accessToken;\r\n    } catch (e) {\r\n        if (e instanceof InteractionRequiredAuthError) {\r\n            console.log(\"acquiring token using redirect\");\r\n            msalInstance.acquireTokenRedirect(request).catch(console.error);\r\n        } else {\r\n            console.log(e);\r\n        }\r\n    }\r\n\r\n    return \"\";\r\n};\r\n\r\nconst getAccount = () => {\r\n    const currentAccounts = msalInstance.getAllAccounts();\r\n    if (currentAccounts === null) {\r\n        console.log(\"No accounts detected\");\r\n        return undefined;\r\n    }\r\n\r\n    if (currentAccounts.length > 1) {\r\n        console.log(\r\n            \"Multiple accounts detected, need to add choose account code.\"\r\n        );\r\n        return currentAccounts[0];\r\n    } else if (currentAccounts.length === 1) {\r\n        return currentAccounts[0];\r\n    }\r\n};\r\n","import React from \"react\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogTitleMUI from \"@material-ui/core/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport DialogBoxAlert from \"./DialogBoxAlert\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n    root: {\r\n        margin: 0,\r\n        padding: \"1rem\",\r\n    },\r\n    closeButton: {\r\n        position: \"absolute\",\r\n        right: \"0.5rem\",\r\n        top: \"0.5rem\",\r\n        color: \"grey\",\r\n    },\r\n    title: {\r\n        marginLeft: \"0.5rem\",\r\n    },\r\n    error: {\r\n        color: theme.palette.error.main,\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    open: boolean;\r\n    handleClose: () => void;\r\n    children: React.ReactNode;\r\n    title: string;\r\n    buttonText?: string;\r\n    cancelButtonText?: string;\r\n    handleClick: () => void;\r\n    loading?: boolean;\r\n    disableButton?: boolean;\r\n    error?: any;\r\n}\r\n\r\ninterface DialogTitleProps {\r\n    children: React.ReactNode;\r\n    onClose: () => void;\r\n}\r\n\r\nexport const DialogTitle: React.FC<DialogTitleProps> = ({\r\n    children,\r\n    onClose,\r\n    ...other\r\n}) => {\r\n    const classes = useStyles();\r\n    return (\r\n        <DialogTitleMUI className={classes.root} {...other}>\r\n            <div className={classes.title}>{children}</div>\r\n            {onClose ? (\r\n                <IconButton\r\n                    id=\"closeDialog\"\r\n                    aria-label=\"close\"\r\n                    className={classes.closeButton}\r\n                    onClick={onClose}\r\n                >\r\n                    <CloseIcon />\r\n                </IconButton>\r\n            ) : null}\r\n        </DialogTitleMUI>\r\n    );\r\n};\r\n\r\nconst DialogBox: React.FC<Props> = ({\r\n    open,\r\n    loading,\r\n    handleClose,\r\n    children,\r\n    title,\r\n    buttonText,\r\n    cancelButtonText = \"Avbryt\",\r\n    handleClick,\r\n    disableButton,\r\n    error,\r\n}) => {\r\n    return (\r\n        <Dialog\r\n            open={open}\r\n            onClose={handleClose}\r\n            aria-labelledby=\"dialogbox\"\r\n            fullWidth\r\n        >\r\n            <DialogTitle onClose={handleClose}>{title}</DialogTitle>\r\n            <DialogContent>{children}</DialogContent>\r\n            {error && <DialogBoxAlert feilmelding={error} />}\r\n            <DialogActions>\r\n                <Button\r\n                    variant=\"contained\"\r\n                    color=\"secondary\"\r\n                    onClick={handleClose}\r\n                >\r\n                    {cancelButtonText}\r\n                </Button>\r\n                {buttonText && (\r\n                    <Button\r\n                        variant=\"contained\"\r\n                        color=\"primary\"\r\n                        onClick={handleClick}\r\n                        disabled={loading || disableButton}\r\n                    >\r\n                        {buttonText}\r\n                    </Button>\r\n                )}\r\n            </DialogActions>\r\n            {loading && <LinearProgress />}\r\n        </Dialog>\r\n    );\r\n};\r\n\r\nexport default DialogBox;\r\n","import React, { useState, createContext, useEffect, useContext } from \"react\";\r\nimport { httpGet } from \"../../../services/http/httpService\";\r\nimport { useLoader } from \"../../customHooks/useLoader\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport { RoleContext, RoleContextType } from \"./RoleContextProvider\";\r\nimport { roles } from \"../../../utils/enum\";\r\n\r\nexport type UserContextType = {\r\n    user: UserType;\r\n    setUser: (user: UserType) => void;\r\n    userPhoto: string;\r\n    setPhoto: (img: string) => void;\r\n    loading: boolean;\r\n    error: Error;\r\n};\r\n\r\nexport type UserType = {\r\n    id: number;\r\n    azureAdId: string;\r\n    name: string;\r\n    mobilephone: string;\r\n    email: string;\r\n    bispedommeIds: number[];\r\n};\r\n\r\ninterface Props {\r\n    children: React.ReactNode;\r\n}\r\nexport const UserContext = createContext<UserContextType | {}>({});\r\n\r\nexport const UserContextProvider: React.FC<Props> = ({ children }) => {\r\n    const [user, setUser] = useState<UserType>();\r\n    const [userPhoto, setPhoto] = useState<string>();\r\n\r\n    const { role } = useContext(RoleContext) as RoleContextType;\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            try {\r\n                const userPhotoResponse = await httpGet(\"api/Users/user/photo\");\r\n                setPhoto(userPhotoResponse);\r\n            } catch (e) {\r\n                console.error(\r\n                    \"Error in api/Users/user/photo response from api\",\r\n                    e\r\n                );\r\n            }\r\n        })();\r\n    }, []);\r\n\r\n    const { loading, error } = useLoader(async () => {\r\n        if (role && role !== roles.SECURITAS) {\r\n            const userResponse = await httpGet(`api/Users/user`);\r\n            setUser(userResponse);\r\n        }\r\n    });\r\n\r\n    return (\r\n        <UserContext.Provider\r\n            value={{ user, setUser, userPhoto, setPhoto, error }}\r\n        >\r\n            {loading ? <LinearProgress /> : children}\r\n        </UserContext.Provider>\r\n    );\r\n};\r\n\r\nexport default UserContext;\r\n","import React from \"react\";\r\nimport CardMUI from \"@material-ui/core/Card\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\r\n\r\ninterface Props {\r\n    children: React.ReactNode;\r\n    style?: any;\r\n    padding?: string;\r\n    background?: string;\r\n}\r\n\r\nconst Card: React.FC<Props> = ({\r\n    children,\r\n    style,\r\n    padding = \"2.5rem\",\r\n    background = \"white\",\r\n}) => {\r\n    const useStyles = makeStyles((theme) => ({\r\n        root: {\r\n            width: \"100%\",\r\n            background: theme.palette.background.paper,\r\n            padding,\r\n            [theme.breakpoints.down(\"sm\")]: {\r\n                padding: \"0.5rem\",\r\n            },\r\n            ...style,\r\n        },\r\n\r\n        content: {\r\n            [theme.breakpoints.down(330)]: {\r\n                paddingLeft: 0,\r\n                paddingRight: 0,\r\n            },\r\n        },\r\n    }));\r\n\r\n    const classes = useStyles();\r\n\r\n    return (\r\n        <CardMUI className={classes.root}>\r\n            <CardContent className={classes.content}>{children}</CardContent>\r\n        </CardMUI>\r\n    );\r\n};\r\n\r\nexport default Card;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    numberlink: {\r\n        color: \"inherit\",\r\n        textDecoration: \"none\",\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    telephonenumber: string;\r\n}\r\n\r\nconst TelephoneNumber: React.FC<Props> = ({ telephonenumber }) => {\r\n    const classes = useStyles();\r\n\r\n    const formatTelephoneNumber = (telephoneNumber: string) => {\r\n        if (telephoneNumber) {\r\n            return ` ${telephoneNumber.replace(/(\\d{2})/g, \"$1 \")}`;\r\n        }\r\n        return \"-\";\r\n    };\r\n\r\n    return (\r\n        <a href={`tel: ${telephonenumber}`} className={classes.numberlink}>\r\n            {formatTelephoneNumber(telephonenumber)}\r\n        </a>\r\n    );\r\n};\r\nexport default TelephoneNumber;\r\n","import React from \"react\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        marginTop: \"2rem\",\r\n    },\r\n    cardWrapper: {\r\n        margin: 0,\r\n        width: \"100%\",\r\n        height: 365,\r\n    },\r\n}));\r\n\r\ninterface Props {\r\n    children: React.ReactNode;\r\n}\r\n\r\nconst Background: React.FC<Props> = ({ children }) => {\r\n    const classes = useStyles();\r\n    return (\r\n        <Container className={classes.root}>\r\n            <Grid item lg={12} sm={12} md={12} className={classes.cardWrapper}>\r\n                {children}\r\n                <br />\r\n            </Grid>\r\n        </Container>\r\n    );\r\n};\r\nexport default Background;\r\n"],"sourceRoot":""}