74 lines
1.8 KiB
JavaScript
74 lines
1.8 KiB
JavaScript
|
/**
|
||
|
* Internal dependencies
|
||
|
*/
|
||
|
import { actions, reducer, emitEvent } from '../event_emit';
|
||
|
|
||
|
const EMIT_TYPES = {
|
||
|
CHECKOUT_COMPLETE_WITH_SUCCESS: 'checkout_complete',
|
||
|
CHECKOUT_COMPLETE_WITH_ERROR: 'checkout_complete_error',
|
||
|
CHECKOUT_PROCESSING: 'checkout_processing',
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Receives a reducer dispatcher and returns an object with the
|
||
|
* onCheckoutComplete callback registration function for the checkout emit
|
||
|
* 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} dispatcher The emitter reducer dispatcher.
|
||
|
*
|
||
|
* @return {Object} An object with the `onCheckoutComplete` emmitter registration
|
||
|
*/
|
||
|
const emitterSubscribers = ( dispatcher ) => ( {
|
||
|
onCheckoutCompleteSuccess: ( callback ) => {
|
||
|
const action = actions.addEventCallback(
|
||
|
EMIT_TYPES.CHECKOUT_COMPLETE_WITH_SUCCESS,
|
||
|
callback
|
||
|
);
|
||
|
dispatcher( action );
|
||
|
return () => {
|
||
|
dispatcher(
|
||
|
actions.removeEventCallback(
|
||
|
EMIT_TYPES.CHECKOUT_COMPLETE_WITH_SUCCESS,
|
||
|
action.id
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
},
|
||
|
onCheckoutCompleteError: ( callback ) => {
|
||
|
const action = actions.addEventCallback(
|
||
|
EMIT_TYPES.CHECKOUT_COMPLETE_WITH_ERROR,
|
||
|
callback
|
||
|
);
|
||
|
dispatcher( action );
|
||
|
return () => {
|
||
|
dispatcher(
|
||
|
actions.removeEventCallback(
|
||
|
EMIT_TYPES.CHECKOUT_COMPLETE_WITH_ERROR,
|
||
|
action.id
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
},
|
||
|
onCheckoutProcessing: ( callback ) => {
|
||
|
const action = actions.addEventCallback(
|
||
|
EMIT_TYPES.CHECKOUT_PROCESSING,
|
||
|
callback
|
||
|
);
|
||
|
dispatcher( action );
|
||
|
return () => {
|
||
|
dispatcher(
|
||
|
actions.removeEventCallback(
|
||
|
EMIT_TYPES.CHECKOUT_PROCESSING,
|
||
|
action.id
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
},
|
||
|
} );
|
||
|
|
||
|
export { EMIT_TYPES, emitterSubscribers, reducer, emitEvent };
|