23 lines
634 B
JavaScript
23 lines
634 B
JavaScript
/**
|
|
* External dependencies.
|
|
*/
|
|
import create from 'callbag-create';
|
|
|
|
/**
|
|
* Callbag source factory from `addHandler` and `removeHandler` pair.
|
|
*
|
|
* @see https://github.com/Andarist/callbag-from-event-pattern
|
|
* @param {Function} addHandler
|
|
* @param {Function} removeHandler
|
|
* @param {Function} argsTransformer
|
|
* @return {Function}
|
|
*/
|
|
export default function fromEventPattern( addHandler, removeHandler, argsTransformer = ( ...args ) => args ) {
|
|
return create( ( sink ) => {
|
|
const handler = ( ...args ) => sink( 1, argsTransformer( ...args ) );
|
|
|
|
addHandler( handler );
|
|
|
|
return () => removeHandler( handler );
|
|
} );
|
|
}
|