70 lines
1.5 KiB
TypeScript
70 lines
1.5 KiB
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { isObject } from '@woocommerce/types';
|
|
|
|
/**
|
|
* Internal dependencies
|
|
*/
|
|
import type { EventObserversType, ObserverType } from './types';
|
|
|
|
export const getObserversByPriority = (
|
|
observers: EventObserversType,
|
|
eventType: string
|
|
): ObserverType[] => {
|
|
return observers[ eventType ]
|
|
? Array.from( observers[ eventType ].values() ).sort( ( a, b ) => {
|
|
return a.priority - b.priority;
|
|
} )
|
|
: [];
|
|
};
|
|
|
|
export enum responseTypes {
|
|
SUCCESS = 'success',
|
|
FAIL = 'failure',
|
|
ERROR = 'error',
|
|
}
|
|
|
|
export enum noticeContexts {
|
|
PAYMENTS = 'wc/payment-area',
|
|
EXPRESS_PAYMENTS = 'wc/express-payment-area',
|
|
}
|
|
|
|
export interface ResponseType extends Record< string, unknown > {
|
|
type: responseTypes;
|
|
retry?: boolean;
|
|
}
|
|
|
|
const isResponseOf = (
|
|
response: unknown,
|
|
type: string
|
|
): response is ResponseType => {
|
|
return isObject( response ) && 'type' in response && response.type === type;
|
|
};
|
|
|
|
export const isSuccessResponse = (
|
|
response: unknown
|
|
): response is ResponseType => {
|
|
return isResponseOf( response, responseTypes.SUCCESS );
|
|
};
|
|
|
|
export const isErrorResponse = (
|
|
response: unknown
|
|
): response is ResponseType => {
|
|
return isResponseOf( response, responseTypes.ERROR );
|
|
};
|
|
|
|
export const isFailResponse = (
|
|
response: unknown
|
|
): response is ResponseType => {
|
|
return isResponseOf( response, responseTypes.FAIL );
|
|
};
|
|
|
|
export const shouldRetry = ( response: unknown ): boolean => {
|
|
return (
|
|
! isObject( response ) ||
|
|
typeof response.retry === 'undefined' ||
|
|
response.retry === true
|
|
);
|
|
};
|