haiku-atelier-2024/web/vendor/htmlburger/carbon-fields/packages/metaboxes/utils/from-event-pattern.js

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 );
} );
}