Skip to content
Source
Sign inSign up

useDelayedStatus.ts

18 lines705 Bytes

1import {
2 delayedStatusDeadline,
3 shownDelayedStatus,
4 stepDelayedStatus,
5} from "@t3tools/client-runtime/delayed-status";
6import { useState } from "react";
7​
8import { useDeadlinePassed } from "./useDeadline";
9​
10export function useDelayedStatus<A>(key: string, value: A | null, showDelayMs?: number): A | null {
11 const [state, setState] = useState(() =>
12 stepDelayedStatus<A>(null, { key, value, deadlinePassed: false, showDelayMs }, Date.now),
13 );
14 const deadlinePassed = useDeadlinePassed(delayedStatusDeadline(state));
15 const next = stepDelayedStatus(state, { key, value, deadlinePassed, showDelayMs }, Date.now);
16 if (next !== state) setState(next);
17 return shownDelayedStatus(next, key);