@awesome-nodes/mvvm
Version:
Application development framework using the *model* *view* *view-model* design pattern.
46 lines (45 loc) • 2.47 kB
TypeScript
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>;