Files
Ivan Fontosh db1168a46c feat(control): таймер сессии поверх сцены
Отдельное окно countdown с «Показать игрокам»; на превью — move/resize/rotate, на презентации тот же layout.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-03 16:51:56 +08:00

34 lines
963 B
TypeScript

import { useEffect, useState } from 'react';
import { ipcChannels } from '../../../shared/ipc/contracts';
import type { SessionTimerEvent, SessionTimerState } from '../../../shared/types';
import { getDndApi } from '../dndApi';
export function useSessionTimerState(): readonly [
SessionTimerState | null,
{ dispatch: (event: SessionTimerEvent) => Promise<SessionTimerState> },
] {
const api = getDndApi();
const [state, setState] = useState<SessionTimerState | null>(null);
useEffect(() => {
void api.invoke(ipcChannels.sessionTimer.getState, {}).then((r) => {
setState(r.state);
});
return api.on(ipcChannels.sessionTimer.stateChanged, ({ state: next }) => {
setState(next);
});
}, [api]);
return [
state,
{
dispatch: async (event) => {
const r = await api.invoke(ipcChannels.sessionTimer.dispatch, { event });
setState(r.state);
return r.state;
},
},
] as const;
}