tamascsaba / rx-event-manager

Rx Event Manager

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status Coverage Status NPM version Downloads

Rx Event Manager

motivation

To allow inter-modules communication in Rx way. Also, it memorize Observable instances where we can simply call unsubscribe 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

off

unsubscribe 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.off('hello');

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

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

EventManager.off('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.off('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.off('hello');

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

offAll

off and remove all event subscriptions

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

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

EventManager.offAll();

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

About

Rx Event Manager


Languages

Language:JavaScript 73.0%Language:TypeScript 27.0%