react-period-of-stay-input
Version:
React.js component for entering a period of stay in a hotel: check-in + check-out date
67 lines (66 loc) • 2.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var Day_1 = require("./Day");
var MAX_NIGHTS_COUNT = 27;
var Model = /** @class */ (function () {
function Model(checkInDate, checkOutDate) {
if (checkOutDate.toMoment().isBefore(checkInDate.toMoment())) {
throw new Error("Check-out date can't be before check-in. Got " + checkInDate + ", " + checkOutDate);
}
this._checkInDate = checkInDate;
this._checkOutDate = checkOutDate;
}
Object.defineProperty(Model.prototype, "checkInDate", {
get: function () {
return this._checkInDate;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Model.prototype, "checkOutDate", {
get: function () {
return this._checkOutDate;
},
enumerable: true,
configurable: true
});
Model.prototype.newCheckIn = function (checkInDate, environment) {
var mCheckOut = this._checkOutDate.toMoment();
var checkIn = new Day_1.default(checkInDate);
var mCheckIn = checkIn.toMoment();
if (mCheckIn.isBefore(environment.minCheckInDate.toMoment())) {
return this;
}
if (itsOk(mCheckIn, mCheckOut, environment)) {
return new Model(checkIn, checkIn.next());
}
return new Model(checkIn, this._checkOutDate);
};
Model.prototype.newCheckOut = function (checkOutDate, environment) {
var mCheckIn = this.checkInDate.toMoment();
var checkOut = new Day_1.default(checkOutDate);
var mCheckOut = checkOut.toMoment();
var mMinCheckInDate = environment.minCheckInDate.toMoment();
if (mCheckOut.isBefore(mMinCheckInDate) ||
(!environment.zeroNightsAllowed && mCheckOut.isSame(mMinCheckInDate, 'day'))) {
return this;
}
if (environment.zeroNightsAllowed && mCheckOut.isSame(mMinCheckInDate, 'day')) {
return new Model(checkOut, checkOut);
}
if (itsOk(mCheckIn, mCheckOut, environment)) {
return new Model(checkOut.previous(), checkOut);
}
return new Model(this._checkInDate, checkOut);
};
Model.prototype.nightsCount = function () {
return this._checkOutDate.toMoment().diff(this._checkInDate.toMoment(), 'days');
};
return Model;
}());
exports.default = Model;
function itsOk(mCheckIn, mCheckOut, environment) {
return (mCheckOut.isBefore(mCheckIn) ||
(!environment.zeroNightsAllowed && mCheckIn.isSame(mCheckOut, 'day')) ||
(mCheckOut.diff(mCheckIn, 'days') > MAX_NIGHTS_COUNT));
}