| import { useEffect, useRef, useState } from 'react' |
|
|
| |
| |
| |
| |
| |
| |
| |
| export function useMinDisplayTime<T>(value: T, minMs: number): T { |
| const [displayed, setDisplayed] = useState(value) |
| const lastShownAtRef = useRef(0) |
|
|
| useEffect(() => { |
| const elapsed = Date.now() - lastShownAtRef.current |
| if (elapsed >= minMs) { |
| lastShownAtRef.current = Date.now() |
| setDisplayed(value) |
| return |
| } |
| const timer = setTimeout( |
| (shownAtRef, setFn, v) => { |
| shownAtRef.current = Date.now() |
| setFn(v) |
| }, |
| minMs - elapsed, |
| lastShownAtRef, |
| setDisplayed, |
| value, |
| ) |
| return () => clearTimeout(timer) |
| }, [value, minMs]) |
|
|
| return displayed |
| } |
|
|