Skip to content

Action emitter based on fbemitter. Instead of string event types we use classes (functions).

License

Notifications You must be signed in to change notification settings

SimplrJS/action-emitter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

action-emitter

Action emitter based on fbemitter. Instead of string event types we use classes (functions). The package is most useful when used with TypeScript.

Build Status NPM version dependencies Status devDependencies Status

Get started

$ npm install action-emitter --save-dev

Usage

First import the action-emitter package and then create a new emitter instance.

import { ActionEmitter } from "action-emitter";
const Emitter = new ActionEmitter();

API

constructor(): void

Create a new emitter instance.

Emitter construction example:

const Emitter = new ActionEmitter();

addListener(actionClass, callback): EventSubscription

Register a specific callback to be called on a particular action event. A subscription is returned that can be called to remove the listener.

Arguments

Argument Type Description
actionClass Function Action class function.
callback (action: TAction) => void Listener callback function.

Add listener example:

class MyAction {
    constructor(private value: string) { }
    public get Value() {
        return this.value;
    }
}

let subsciption = Emitter.addListener<MyAction>(MyAction, action => {
    console.log(action.Value);
});

once(actionClass, callback): EventSubscription

Similar to addListener() but the callback is removed after it is invoked once. A subscription is returned that can be called to remove the listener.

Arguments

Argument Type Description
actionClass Function Action class function.
callback (action: TAction) => void Listener callback function.

Add once listener example:

class MyAction {
    constructor(private value: string) { }
    public get Value() {
        return this.value;
    }
}

let subsciption = Emitter.once<MyAction>(MyAction, action => {
    console.log(action.Value);
});

removeAllListeners(actionClass): void

Removes all of the registered listeners. If provide actionClass, only listeners for that action class are removed.

Arguments

Argument Type Description
actionClass[*] Function Action class function.

[*] - optional.

Remove all listeners example:

class MyAction {
    constructor(private value: string) { }
    public get Value() {
        return this.value;
    }
}

Emitter.removeAllListeners(MyAction);
// Or
Emitter.removeAllListeners();

listeners(actionClass): Function[]

Returns an array of listeners that are currently registered for the given action class.

Arguments

Argument Type Description
actionClass Function Action class function.

Listeners list example:

let listenersList = Emitter.listeners();

listenersCount(actionClass): number

Return listeners count that are currently registered for the given action class. If action class is not specified, method will return all registered action listeners count.

Arguments

Argument Type Description
actionClass[*] Function Action class function.

[*] - optional.

Listeners list example:

class MyAction {
    constructor(private value: string) { }
    public get Value() {
        return this.value;
    }
}

let globalListenersCount = Emitter.listenersCount();
// or 
let listenersCount = Emitter.listenersCount(MyAction);

emit(action): void

Emits an action event with the given data. All callbacks that are listening to the particular action event will be notified.

Arguments

Argument Type Description
action TAction Action class instance.

Action emit example:

class MyAction {
    constructor(private value: string) { }
    public get Value() {
        return this.value;
    }
}

Emitter.emit<MyAction>(new MyAction("value"));
//or 
Emitter.emit(new MyAction("value"));

Debuging

You can listen to all actions with AnyAction class.

import { AnyAction } from "action-emitter";
Emitter.addListener(AnyAction, anyAction => {
    let actionInstance = anyAction.Action;
    console.log(actionInstance);
});

License

Released under the MIT license.