/* eslint-disable */ import { useEffect, useState } from "react"; import { useEnvironment } from "./keycloak-ui-shared"; let documentTitleStatus: { isOverridden: false } | { isOverridden: true; actualTitle: string } = { isOverridden: false }; export function SessionExpirationWarningOverlay(props: { warnUserSecondsBeforeAutoLogout: number }) { const { warnUserSecondsBeforeAutoLogout } = props; const { keycloak } = useEnvironment(); const [secondsLeft, setSecondsLeft] = useState(undefined); useEffect(() => { const { oidc } = keycloak; if (!oidc.isUserLoggedIn) { // We know the user is logged in because of new Keycloak({ onLoad: "login-required" }) throw new Error("assertion error"); } const { unsubscribeFromAutoLogoutCountdown } = oidc.subscribeToAutoLogoutCountdown( ({ secondsLeft }) => { if (secondsLeft === undefined) { // The use had become active again. Hide the overlay setSecondsLeft(undefined); return; } if (secondsLeft > warnUserSecondsBeforeAutoLogout) { // The session expires in a while still, do not display the overlay. setSecondsLeft(undefined); return; } setSecondsLeft(secondsLeft); } ); return () => { unsubscribeFromAutoLogoutCountdown(); }; }, []); useEffect(() => { if (secondsLeft === undefined) { if (documentTitleStatus.isOverridden) { document.title = documentTitleStatus.actualTitle; } documentTitleStatus = { isOverridden: false }; return; } if (!documentTitleStatus.isOverridden) { documentTitleStatus = { isOverridden: true, actualTitle: document.title }; } document.title = `${secondsLeft} seconds left`; }, [secondsLeft]); if (secondsLeft === undefined) { return null; } return (

Session expiring soon

You will be signed out in {secondsLeft} seconds due to inactivity.

Move your mouse or press any key to stay signed in.

); }