import { IElementStackItem, IElementParams, IElementState, EventType, IPartialObserver, ElementId } from "../types"; import { Processor } from "../Processor"; import { EventsManager } from "../EventsManager"; import { CallbacksManager } from "../CallbacksManager"; import { mergeContexts } from "../util/mergeContexts"; export const createStackItem = ( callbacksManager: CallbacksManager, eventsManager: EventsManager, processor: Processor, elementId: ElementId, state: IElementState, params: IElementParams, observer: IPartialObserver, ) => { const elementCall: IElementStackItem = { args: params.args, func: params.func, }; state.stack.push(elementCall); const newElementId = processor.createElement(params); state.currentCall = { elementId: newElementId }; const callElementState = processor.getElementStateById(newElementId); callElementState.contexts = mergeContexts(state.contexts, state.tickState.contexts); eventsManager.triggerEvent({ elementId: newElementId, type: EventType.Create, params: {}, value: undefined, }); callElementState.observer = { next: observer.next ? callbacksManager.addCallback(observer.next)[0] : undefined, error: observer.error ? callbacksManager.addCallback(observer.error)[0] : eventsManager.createEvent(elementId, EventType.CallError, {})[0], complete: eventsManager.createEvent(elementId, EventType.CallComplete, {})[0], }; };