rx-event-manager

Rx Event Manager

Usage no npm install needed!

<script type="module">
  import rxEventManager from 'https://cdn.skypack.dev/rx-event-manager';
</script>

README

Build Status Coverage Status NPM version Downloads

Rx Event Manager

motivation

To allow inter-modules communication in Rx way. Also, it memorize Rx.Disposable instances where we can simply call dispose without explicitly stored returned subscription.

API

observe

return a Rx.Observable instance with given event name

observe given event

EventManager.observe('hello').
    subscribe(function (data) {
        // data.answer === 42;
    });
    
EventManager.fire('hello', { answer: 42 })

on

a shorthand of combination of observe and subscribe which returns an instance of Rx.Observer

listen to given event

EventManager.on('hello', function (data) {
    // data.answer === 42;
});
    
EventManager.fire('hello', { answer: 42 });

fire

dispatch event with given event and data

// fire 'hello' event which which has data { answer: 42 }
EventManager.fire('hello', { answer: 42 });

// fire 'answer' event which has data `42`
EventManager.fire('answer', 42);

once

listen to given event only once.

EventManager.once('hello',
    function (data) {
        console.log(data.value);
    },
    function (ex) {
        // nada
    }.
    function () {
        console.log('complete');
    }
);
    
EventManager.fire('hello', { value: 'hello' });
> hello
> complete

EventManager.fire('hello', { value: 'world' })
// nothing happened

latest

emit sequence immediately with most recent value if given event got fired before.

EventManager.fire('hello', 42);

EventManager.latest('hello', function onNext(value) {
    console.log('callback %s', value);
});	
> callback 42

EventManager.latest('hello').
    subscribe(function (value) {
        console.log('observable %s', value);
    });	
> observable 42

EventManager.fire('hello', 'world');
> callback world
> observable world

change

emit sequences only if data changed

EventManager.change('hello').
    subscribe(function (value) {
        console.log('hello %s', value);
    });

EventManager.fire('hello', 1);
> 1

EventManager.fire('hello', 1);
// nothing happened

EventManager.fire('hello', 2);
> 2
function comparer(x, y) {
    return x.value === y.value;
}

EventManager.change('hello', comparer).
    subscribe(function (data) {
        console.log('observable %s', data.value);
    });
    
EventManager.change('hello', comparer, function (data) {
    console.log('callback %s', data.value);
});

EventManager.fire('hello', { value: 1 });
> observable 1
> callback 1

EventManager.fire('hello', { value: 1 });
// nothing happened

EventManager.fire('hello', { value: 2 });
> observable 2
> callback 2

dispose

dispose and remove given event

// get disposable instance from `on` method

EventManager.on('hello', function (data) {
    console.log(data.value);
});
    
EventManager.fire('hello', { value: 'hello' });
> hello

EventManager.dispose('hello');

EventManager.fire('hello', { value: 'world' })
// nothing happened
// get disposable instance from `once` method

EventManager.once('hello', function (data) {
    console.log(data.value);
});

EventManager.dispose('hello');

EventManager.fire('hello', { value: 'world' })
// nothing happened
// get disposable instance from `observe` method

EventManager.observe('hello').subscribe(function (data) {
    console.log(data.value);
});

EventManager.fire('hello', { value: 'world' })
> world

EventManager.dispose('hello');

EventManager.fire('hello', { value: 'world' })
// nothing happened
// via `observe` method which has extra operators 

EventManager.observe('hello').
    filter(function (value) {
        return 'string' === typeof value;
    }).
    subscribe(function (data) {
        console.log(data.value);
    });

EventManager.fire('hello', { value: 42 })
//nothing happened

EventManager.fire('hello', { value: 'world' })
> world

EventManager.dispose('hello');

EventManager.fire('hello', { value: 'world' })
// nothing happened

disposeAll

dispose and remove all event subscriptions

EventManager.on('hello', function (data) {
    console.log(data.value);
});
    
EventManager.fire('hello', { value: 'hello' });
> hello

EventManager.disposeAll();

EventManager.fire('hello', { value: 'world' })
// nothing happened