gambit
Version:
A hyper-thin library to help building API driven redux apps
93 lines (84 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.dependableMatrix = dependableMatrix;
exports.hasNotBeenCalled = hasNotBeenCalled;
exports.hasNotSucceeded = hasNotSucceeded;
exports.hasNotBeenCalledIn = hasNotBeenCalledIn;
exports.hasNotSucceededIn = hasNotSucceededIn;
function dependableMatrix() {
var resettingActions = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
var standardBlocker = arguments.length <= 1 || arguments[1] === undefined ? function () {
return true;
} : arguments[1];
return function (foundCalled, foundSucceeded, calls) {
var hasResettedAction = resettingActions.some(function (actionId) {
return calls.getIn(['lastCalled', actionId]) > foundSucceeded;
});
if (hasResettedAction) return true;
return standardBlocker(foundCalled, foundSucceeded);
};
}
function hasNotBeenCalled(foundCalled) {
return !foundCalled;
}
function hasNotSucceeded(foundCalled, foundSucceeded) {
return !foundSucceeded;
}
function hasNotBeenCalledIn(time, units) {
var seconds = 0;
switch (units) {
case 'hours':
case 'hrs':
case 'hr':
case 'h':
seconds = 1000 * 60 * 60;
break;
case 'minutes':
case 'mins':
case 'min':
case 'm':
seconds = 1000 * 60;
break;
case 'seconds':
case 'secs':
case 'sec':
case 's':
default:
seconds = time;
break;
}
return function (foundCalled) {
if (!foundCalled) return true;
return Date.now() > foundCalled + seconds;
};
}
function hasNotSucceededIn(time, units) {
var seconds = 0;
switch (units) {
case 'hours':
case 'hrs':
case 'hr':
case 'h':
seconds = 1000 * 60 * 60;
break;
case 'minutes':
case 'mins':
case 'min':
case 'm':
seconds = 1000 * 60;
break;
case 'seconds':
case 'secs':
case 'sec':
case 's':
default:
seconds = time;
break;
}
return function (foundCalled, foundSucceeded) {
if (!foundSucceeded) return true;
return Date.now() > foundSucceeded + seconds;
};
}