1import type { EnvironmentId } from "@t3tools/contracts";
2import { useEffect, useState } from "react";
3
4/** Wait through brief outages before offering to switch off the active environment. */
5export function useEnvironmentDisconnectDelay(unavailableEnvironmentId: EnvironmentId | null) {
6 const [delay, setDelay] = useState({ environmentId: unavailableEnvironmentId, elapsed: false });
7 if (delay.environmentId !== unavailableEnvironmentId) {
8 setDelay({ environmentId: unavailableEnvironmentId, elapsed: false });
9 }
10
11 useEffect(() => {
12 if (unavailableEnvironmentId === null) return;
13 const timeout = setTimeout(
14 () => setDelay({ environmentId: unavailableEnvironmentId, elapsed: true }),
15 20_000,
16 );
17 return () => clearTimeout(timeout);
18 }, [unavailableEnvironmentId]);
19
20 return (
21 unavailableEnvironmentId !== null &&
22 delay.environmentId === unavailableEnvironmentId &&
23 delay.elapsed
24 );
25}