import { ElementId } from "../types"; import { Processor } from "../Processor"; export const dispose = (processor: Processor, elementId: ElementId) => { const { callbacksManager, eventsManager } = processor.locator; const state = processor.getElementStateById(elementId); state.isDisposed = true; // delete state.func; state.props = []; state.contexts = []; // effects state.effects.map((effect) => (effect.dispose ? effect.dispose() : null)); state.effects = []; // vars state.vars.map((stateVar) => callbacksManager.releaseCallback(stateVar.setter)); state.vars = []; // subscriptions state.subscriptions.map((sub) => dispose(processor, sub.elementId)); state.subscriptions = []; // calls state.stack = []; if (state.currentCall) { dispose(processor, state.currentCall.elementId); } // observer if (state.observer) { if (state.observer.next) { callbacksManager.releaseCallback(state.observer.next); } if (state.observer.error) { callbacksManager.releaseCallback(state.observer.error); } if (state.observer.complete) { callbacksManager.releaseCallback(state.observer.complete); } } // events eventsManager.clearEventByElementId(elementId); };