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