Match-id-be20029af8934d98eb77c7abcd34cae04532e668
This commit is contained in:
commit
f736b406df
|
@ -9,88 +9,3 @@ export const promise = store => next => action => {
|
|||
store._horizonXstore.$queue.dispatch(action);
|
||||
return result;
|
||||
};
|
||||
|
||||
export function createPromise(config = {}) {
|
||||
const defaultTypes = [ActionType.Pending, ActionType.Fulfilled, ActionType.Rejected];
|
||||
const PROMISE_TYPE_SUFFIXES = config.promiseTypeSuffixes || defaultTypes;
|
||||
const PROMISE_TYPE_DELIMITER = config.promiseTypeDelimiter || '_';
|
||||
|
||||
return store => {
|
||||
const { dispatch } = store;
|
||||
|
||||
return next => action => {
|
||||
/**
|
||||
* Instantiate variables to hold:
|
||||
* (1) the promise
|
||||
* (2) the data for optimistic updates
|
||||
*/
|
||||
let promise;
|
||||
let data;
|
||||
|
||||
/**
|
||||
* There are multiple ways to dispatch a promise. The first step is to
|
||||
* determine if the promise is defined:
|
||||
* (a) explicitly (action.payload.promise is the promise)
|
||||
* (b) implicitly (action.payload is the promise)
|
||||
* (c) as an async function (returns a promise when called)
|
||||
*
|
||||
* If the promise is not defined in one of these three ways, we don't do
|
||||
* anything and move on to the next middleware in the middleware chain.
|
||||
*/
|
||||
|
||||
// Step 1a: Is there a payload?
|
||||
if (action.payload) {
|
||||
const PAYLOAD = action.payload;
|
||||
|
||||
// Step 1.1: Is the promise implicitly defined?
|
||||
if (isPromise(PAYLOAD)) {
|
||||
promise = PAYLOAD;
|
||||
}
|
||||
|
||||
// Step 1.2: Is the promise explicitly defined?
|
||||
else if (isPromise(PAYLOAD.promise)) {
|
||||
promise = PAYLOAD.promise;
|
||||
data = PAYLOAD.data;
|
||||
}
|
||||
|
||||
// Step 1.3: Is the promise returned by an async function?
|
||||
else if (typeof PAYLOAD === 'function' || typeof PAYLOAD.promise === 'function') {
|
||||
promise = PAYLOAD.promise ? PAYLOAD.promise() : PAYLOAD();
|
||||
data = PAYLOAD.promise ? PAYLOAD.data : undefined;
|
||||
|
||||
// Step 1.3.1: Is the return of action.payload a promise?
|
||||
if (!isPromise(promise)) {
|
||||
// If not, move on to the next middleware.
|
||||
return next({
|
||||
...action,
|
||||
payload: promise,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Step 1.4: If there's no promise, move on to the next middleware.
|
||||
else {
|
||||
return next(action);
|
||||
}
|
||||
|
||||
// Step 1b: If there's no payload, move on to the next middleware.
|
||||
} else {
|
||||
return next(action);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiate and define constants for:
|
||||
* (1) the action type
|
||||
* (2) the action meta
|
||||
*/
|
||||
const TYPE = action.type;
|
||||
const META = action.meta;
|
||||
|
||||
/**
|
||||
* Instantiate and define constants for the action type suffixes.
|
||||
* These are appended to the end of the action type.
|
||||
*/
|
||||
const [PENDING, FULFILLED, REJECTED] = PROMISE_TYPE_SUFFIXES;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue