{`${t("retrying-in")} ${retryIn} ${t("seconds")}`}
)}
diff --git a/src/components/Logo.tsx b/src/components/Logo.tsx
index 1bba432e..bf76604e 100644
--- a/src/components/Logo.tsx
+++ b/src/components/Logo.tsx
@@ -1,6 +1,6 @@
import { Link as RouterLink } from "react-router-dom";
import { Box } from "@mui/material";
-import { useKeycloak } from "@react-keycloak/web";
+import { useKeycloak } from "../hooks/useKeycloak";
import { useContext } from "react";
import { ThemeModeContext } from "../contexts/ThemeModeContext";
diff --git a/src/components/ProtectedRoute.tsx b/src/components/ProtectedRoute.tsx
index 8090abcd..8bb5dfaf 100644
--- a/src/components/ProtectedRoute.tsx
+++ b/src/components/ProtectedRoute.tsx
@@ -1,11 +1,11 @@
import { Navigate } from "react-router-dom";
-import { useKeycloak } from "@react-keycloak/web";
+import { useKeycloak } from "../hooks/useKeycloak";
import LoadingPage from "./LoadingPage";
-import { useContext } from "react";
-import { AuthContextWrapper } from "../contexts/AuthContextWrapper";
+import { useAuth } from "react-oidc-context";
+//import { AuthContextWrapper } from "../contexts/AuthContextWrapper";
const ProtectedRoute = ({ children }: { children: React.ReactNode }) => {
- const { error } = useContext(AuthContextWrapper);
+ const { error } = useAuth();
const { keycloak, initialized } = useKeycloak();
const renderPage = (children: React.ReactNode) => {
diff --git a/src/components/TokenExpiryModal.tsx b/src/components/TokenExpiryModal.tsx
new file mode 100644
index 00000000..9cfa6f49
--- /dev/null
+++ b/src/components/TokenExpiryModal.tsx
@@ -0,0 +1,58 @@
+import React from "react";
+import { useAuth } from "react-oidc-context";
+import {
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ DialogActions,
+ Button,
+ Typography,
+} from "@mui/material";
+
+export default function TokenExpiryModal() {
+ const auth = useAuth();
+ const [open, setOpen] = React.useState(false);
+
+ React.useEffect(() => {
+ return auth.events.addAccessTokenExpiring(() => {
+ setOpen(true);
+ });
+ }, [auth.events]);
+
+ const handleContinue = async () => {
+ try {
+ await auth.signinSilent();
+ setOpen(false);
+ } catch (err) {
+ // notistack insted
+ console.error("Silent renew failed", err);
+ }
+ };
+
+ const handleLogout = () => {
+ auth.removeUser();
+ };
+
+ return (
+