woocommerce/plugins/woocommerce-blocks/assets/js/base/hooks/checkout/use-emit-response.js

60 lines
1.4 KiB
JavaScript

/**
* @typedef {import('@woocommerce/type-defs/hooks').EmitResponseTypes} EmitResponseTypes
* @typedef {import('@woocommerce/type-defs/hooks').NoticeContexts} NoticeContexts
* @typedef {import('@woocommerce/type-defs/hooks').EmitResponseApi} EmitResponseApi
*/
const isResponseOf = ( response, type ) => {
return !! response.type && response.type === type;
};
/**
* @type {EmitResponseTypes}
*/
const responseTypes = {
SUCCESS: 'success',
FAIL: 'failure',
ERROR: 'error',
};
/**
* @type {NoticeContexts}
*/
const noticeContexts = {
PAYMENTS: 'wc/payment-area',
EXPRESS_PAYMENTS: 'wc/express-payment-area',
};
const isSuccessResponse = ( response ) => {
return isResponseOf( response, responseTypes.SUCCESS );
};
const isErrorResponse = ( response ) => {
return isResponseOf( response, responseTypes.ERROR );
};
const isFailResponse = ( response ) => {
return isResponseOf( response, responseTypes.FAIL );
};
const shouldRetry = ( response ) => {
return typeof response.retry === 'undefined' || response.retry === true;
};
/**
* A custom hook exposing response utilities for emitters.
*
* @return {EmitResponseApi} Various interfaces for validating and implementing
* emitter response properties.
*/
export const useEmitResponse = () => {
return {
responseTypes,
noticeContexts,
shouldRetry,
isSuccessResponse,
isErrorResponse,
isFailResponse,
};
};