import { EventType } from "../types"; import { IElementState, ElementId, IElementVar } from "../types/element"; import { EventsManager } from "../EventsManager"; import { CallbacksManager } from "../CallbacksManager"; export function useStateHook( eventsManager: EventsManager, callbacksManager: CallbacksManager, elementId: ElementId, state: IElementState, defaultValue: any, ): [any, (value: any) => void] { const currentVarNumber = state.tickState.currentVarNumber; state.tickState.currentVarNumber++; if (state.isFirstTick) { const [setter, callback] = eventsManager.createEvent(elementId, EventType.ChangeVar, { varNumber: currentVarNumber, }); const createdVar: IElementVar = { value: defaultValue, setter, }; state.vars.push(createdVar); return [createdVar.value, callback]; } const varItem = state.vars[currentVarNumber]; if (!varItem) { throw new Error("Expected var with number " + currentVarNumber); } return [varItem.value, callbacksManager.getCallback(varItem.setter)]; }