mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
28 lines
1.0 KiB
TypeScript
28 lines
1.0 KiB
TypeScript
import { useCallback, useEffect, useRef, useState } from "react";
|
|
|
|
/**
|
|
* Version counter for the preview DOM. `refresh` bumps immediately and again
|
|
* at 80ms / 300ms so consumers re-scan after the iframe settles; pending
|
|
* timers are collapsed by each new refresh and cleared on unmount.
|
|
*/
|
|
export function usePreviewDocumentVersion(): [number, () => void] {
|
|
const [previewDocumentVersion, setPreviewDocumentVersion] = useState(0);
|
|
const refreshTimersRef = useRef<number[]>([]);
|
|
const refresh = useCallback(() => {
|
|
for (const id of refreshTimersRef.current) clearTimeout(id);
|
|
refreshTimersRef.current = [];
|
|
setPreviewDocumentVersion((v) => v + 1);
|
|
refreshTimersRef.current.push(
|
|
window.setTimeout(() => setPreviewDocumentVersion((v) => v + 1), 80),
|
|
window.setTimeout(() => setPreviewDocumentVersion((v) => v + 1), 300),
|
|
);
|
|
}, []);
|
|
useEffect(
|
|
() => () => {
|
|
for (const id of refreshTimersRef.current) clearTimeout(id);
|
|
},
|
|
[],
|
|
);
|
|
return [previewDocumentVersion, refresh];
|
|
}
|