50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
|
/**
|
||
|
* External dependencies
|
||
|
*/
|
||
|
import { useMemo } from '@wordpress/element';
|
||
|
|
||
|
/**
|
||
|
* Internal dependencies
|
||
|
*/
|
||
|
import {
|
||
|
reducer,
|
||
|
emitEvent,
|
||
|
emitEventWithAbort,
|
||
|
emitterCallback,
|
||
|
ActionType,
|
||
|
} from '../../shared/event-emit';
|
||
|
|
||
|
const EMIT_TYPES = {
|
||
|
PAYMENT_PROCESSING: 'payment_processing',
|
||
|
};
|
||
|
|
||
|
type EventEmittersType = Record< string, ReturnType< typeof emitterCallback > >;
|
||
|
|
||
|
/**
|
||
|
* Receives a reducer dispatcher and returns an object with the
|
||
|
* various event emitters for the payment processing events.
|
||
|
*
|
||
|
* Calling the event registration function with the callback will register it
|
||
|
* for the event emitter and will return a dispatcher for removing the
|
||
|
* registered callback (useful for implementation in `useEffect`).
|
||
|
*
|
||
|
* @param {Function} observerDispatch The emitter reducer dispatcher.
|
||
|
* @return {Object} An object with the various payment event emitter registration functions
|
||
|
*/
|
||
|
const useEventEmitters = (
|
||
|
observerDispatch: React.Dispatch< ActionType >
|
||
|
): EventEmittersType => {
|
||
|
const eventEmitters = useMemo(
|
||
|
() => ( {
|
||
|
onPaymentProcessing: emitterCallback(
|
||
|
EMIT_TYPES.PAYMENT_PROCESSING,
|
||
|
observerDispatch
|
||
|
),
|
||
|
} ),
|
||
|
[ observerDispatch ]
|
||
|
);
|
||
|
return eventEmitters;
|
||
|
};
|
||
|
|
||
|
export { EMIT_TYPES, useEventEmitters, reducer, emitEvent, emitEventWithAbort };
|