import { IEventHandle, EventType, ICallCompleteEvent } from "../types"; import { Processor } from "../Processor"; import { dispose } from "../execute/dispose"; import { createStackItem } from "../execute/createStackItem"; import { isComplete } from "../execute/isComplete"; export const CallCompleteEvent: IEventHandle = (processor: Processor, event: ICallCompleteEvent) => { const elementId = event.elementId; const state = processor.getElementStateById(event.elementId); const { callbacksManager, eventsManager } = processor.locator; if (state.currentCall) { dispose(processor, state.currentCall.elementId); } state.currentCall = undefined; if (isComplete(state)) { eventsManager.triggerEvent({ elementId, params: {}, type: EventType.Complete, value: undefined, }); return false; } const nextCall = state.tickState.stack[state.stack.length]; if (!nextCall) { return false; } createStackItem( callbacksManager, eventsManager, processor, event.elementId, state, { func: nextCall.func, args: nextCall.args, }, nextCall.observer, ); return false; };