qwen-code/packages/web-shell/client/hooks/useSharedNow.ts
ytahdn 83e09f2b5b
refactor(web-shell): restructure chat UI (#5775)
Co-authored-by: ytahdn <ytahdn@gmail.com>
2026-06-23 22:43:19 +08:00

34 lines
839 B
TypeScript

import { useEffect, useState } from 'react';
const subscribers = new Set<() => void>();
let interval: ReturnType<typeof setInterval> | null = null;
let currentNow = Date.now();
function tick() {
currentNow = Date.now();
for (const subscriber of subscribers) subscriber();
}
function subscribe(subscriber: () => void) {
subscribers.add(subscriber);
if (!interval) interval = setInterval(tick, 1000);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && interval) {
clearInterval(interval);
interval = null;
}
};
}
export function useSharedNow(enabled: boolean): number {
const [now, setNow] = useState(() => Date.now());
useEffect(() => {
if (!enabled) return;
setNow(Date.now());
return subscribe(() => setNow(currentNow));
}, [enabled]);
return now;
}