UNPKG

@awesome-nodes/mvvm

Version:

Application development framework using the *model* *view* *view-model* design pattern.

46 lines (45 loc) 2.47 kB
import { InjectionToken } from '@awesome-nodes/injection-factory'; import { EventArgs, IEvent, IEventDelegate } from '@awesome-nodes/object'; import { IDelegate } from '@awesome-nodes/object/model'; import { ObjectModel } from "./ObjectModel"; import { Subscription } from 'rxjs'; export interface IEventObserver<TSender extends ObjectModel, TEventArgs extends EventArgs = EventArgs> { next: IEvent<TSender, TEventArgs>; error?: (err: unknown) => void; complete?: () => void; } export interface IEventEmitter<TSender extends ObjectModel = ObjectModel, TEventArgs extends EventArgs = EventArgs> { new (async?: boolean): this; emit(delegate: IEventDelegate<TSender, TEventArgs>): void; subscribe(next?: (value: IEventDelegate<TSender, TEventArgs>) => void, error?: (error: unknown) => void, complete?: () => void): Subscription; } /** * Represents a simple event delegate used to encapsulate any web frontend framework event emitter object. * @template TSender, TEventArgs */ export declare class EventDelegate<TSender extends ObjectModel, TEventArgs extends EventArgs = EventArgs> implements IDelegate<TSender, TEventArgs> { protected _producer: TSender; private readonly _subscriptions; protected readonly _eventEmitter: IEventEmitter<TSender, TEventArgs>; /** * Returns the wen framework EventEmitter used only within angular components. * @access Any access from a view-model, model or service is not * permitted because it couples angular code to the object model. */ get eventEmitter(): IEventEmitter<TSender, TEventArgs>; /** * Initializes this instance * @param {TSender} _producer The event producer to be used as `thisArg` for the command handler invocation. */ constructor(_producer: TSender); /** * Subscribes to the underlying EventEmitter observable and delegates event * subscription to commend pattern style handler functions. * @param observer The next observer function or an event observer instance. * @param thisArg If provided, all observer functions are invoked on except the error observer. */ subscribe(observer: IEvent<TSender, TEventArgs> | IEventObserver<TSender, TEventArgs>, thisArg?: object): Subscription; unsubscribe(observer: IEvent<TSender, TEventArgs> | IEventObserver<TSender, TEventArgs>): void; invoke(ea?: TEventArgs): void; } export declare const EVENT_EMITTER_TOKEN: InjectionToken<IEventEmitter>;