UNPKG

@tictuk/item-availability

Version:

Provides functions to check availability

62 lines 2.47 kB
"use strict"; 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