@tictuk/item-availability
Version:
Provides functions to check availability
62 lines • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isAvailable = exports.isAvailableNow = exports.isItemAvailable = exports.isItemAvailableNow = void 0;
var exception_date_1 = require("./exception-date");
var MINUTES_IN_A_DAY = 1440;
function isItemAvailableNow(item) {
return isItemAvailable(item, new Date());
}
exports.isItemAvailableNow = isItemAvailableNow;
function isItemAvailable(item, date) {
var _a, _b, _c;
var availability = (_c = ((_b = (_a = item === null || item === void 0 ? void 0 : item.condition) === null || _a === void 0 ? void 0 : _a.conditions) !== null && _b !== void 0 ? _b : [])[3]) === null || _c === void 0 ? void 0 : _c.availability;
if (!availability) {
return true;
}
return isAvailable(availability, date);
}
exports.isItemAvailable = isItemAvailable;
function isAvailableNow(availability) {
return isAvailable(availability, new Date());
}
exports.isAvailableNow = isAvailableNow;
function isAvailable(availability, date) {
var exceptionAvailability = _isAvailableInExceptions(availability, date);
if (exceptionAvailability === 'available') {
return true;
}
else if (exceptionAvailability === 'unavailable') {
return false;
}
return _isRegularlyAvailable(availability, date);
}
exports.isAvailable = isAvailable;
function _isRegularlyAvailable(availability, date) {
var weekMinute = date.getDay() * MINUTES_IN_A_DAY + date.getHours() * 60 + date.getMinutes();
for (var _i = 0, _a = availability.weekly; _i < _a.length; _i++) {
var segment = _a[_i];
if (weekMinute >= segment.minuteOfWeek &&
segment.minuteOfWeek + segment.durationMins >= weekMinute) {
return true;
}
}
return !availability.weekly.length;
}
function _isAvailableInExceptions(availability, date) {
if (!availability.exceptions) {
return 'not-mentioned';
}
for (var _i = 0, _a = availability.exceptions; _i < _a.length; _i++) {
var exception = _a[_i];
if (_isDateInsideException(exception, date)) {
return exception.available ? 'available' : 'unavailable';
}
}
return 'not-mentioned';
}
function _isDateInsideException(exception, date) {
var start = (0, exception_date_1.toDate)(exception.start);
var end = (0, exception_date_1.toDate)(exception.end);
return date > start && date < end;
}
//# sourceMappingURL=index.js.map