@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
84 lines • 11 kB
JavaScript
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
import { DATE_FILLER_LENGTH, DATE_RANGE_FILLER_LENGTH } from './date-fillers';
import { RANGE_SEPARATOR_CHAR } from './date-time';
import { TuiDay } from './day';
import { TuiMonthRange } from './month-range';
/**
* An immutable range of two {@link TuiDay} objects
*/
export class TuiDayRange extends TuiMonthRange {
constructor(from, to) {
super(from, to);
this.from = from;
this.to = to;
ngDevMode && console.assert(from.daySameOrBefore(to));
}
/**
* Creates range from two days after sorting them
*
* @param day1
* @param day2
* @return new range with sorted days
*/
static sort(day1, day2) {
return day1.daySameOrBefore(day2)
? new TuiDayRange(day1, day2)
: new TuiDayRange(day2, day1);
}
/**
* Parse and correct a day range in string format
*
* @param rangeString a string of dates in a format dd.mm.yyyy - dd.mm.yyyy
* @param dateMode {@link TuiDateMode}
* @return normalized day range object
*/
static normalizeParse(rangeString, dateMode = 'DMY') {
const leftDay = TuiDay.normalizeParse(rangeString.slice(0, DATE_FILLER_LENGTH), dateMode);
if (rangeString.length < DATE_RANGE_FILLER_LENGTH) {
return new TuiDayRange(leftDay, leftDay);
}
return TuiDayRange.sort(leftDay, TuiDay.normalizeParse(rangeString.slice(DATE_FILLER_LENGTH + RANGE_SEPARATOR_CHAR.length), dateMode));
}
get isSingleDay() {
return this.from.daySame(this.to);
}
/**
* Tests ranges for identity
*
* @param another second range to test against current
* @return `true` if days are identical
*/
daySame(another) {
return this.from.daySame(another.from) && this.to.daySame(another.to);
}
/**
* Locks range between two days included, or limits from one side if the other is null
*
* @param min
* @param max
* @return range — clamped range
*/
dayLimit(min, max) {
return new TuiDayRange(this.from.dayLimit(min, max), this.to.dayLimit(min, max));
}
/**
* Human readable format.
*/
getFormattedDayRange(dateFormat, dateSeparator) {
const from = this.from.getFormattedDay(dateFormat, dateSeparator);
const to = this.to.getFormattedDay(dateFormat, dateSeparator);
return `${from}${RANGE_SEPARATOR_CHAR}${to}`;
}
toString(dateFormat = 'DMY', dateSeparator = '.') {
return this.getFormattedDayRange(dateFormat, dateSeparator);
}
toArray() {
const { from, to } = this;
const arr = [];
for (const day = from.toUtcNativeDate(); day <= to.toUtcNativeDate(); day.setDate(day.getDate() + 1)) {
arr.push(TuiDay.fromLocalNativeDate(day));
}
return arr;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LXJhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RhdGUtdGltZS9kYXktcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBRXhELE9BQU8sRUFBQyxrQkFBa0IsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzdCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHNUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLGFBQWE7SUFDMUMsWUFDNkIsSUFBWSxFQUNaLEVBQVU7UUFFbkMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhTLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixPQUFFLEdBQUYsRUFBRSxDQUFRO1FBSW5DLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFVLElBQUksQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUNsRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQ3hCLFdBQW1CLEVBQ25CLFdBQXdCLEtBQUs7UUFFN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FDakMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsRUFDeEMsUUFBUSxDQUNYLENBQUM7UUFFRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsd0JBQXdCLEVBQUU7WUFDL0MsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDNUM7UUFFRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQ25CLE9BQU8sRUFDUCxNQUFNLENBQUMsY0FBYyxDQUNqQixXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUNuRSxRQUFRLENBQ1gsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxPQUFPLENBQUMsT0FBb0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxRQUFRLENBQUMsR0FBa0IsRUFBRSxHQUFrQjtRQUNsRCxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0IsQ0FBQyxVQUF1QixFQUFFLGFBQXFCO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNsRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFOUQsT0FBTyxHQUFHLElBQUksR0FBRyxvQkFBb0IsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRWUsUUFBUSxDQUNwQixhQUEwQixLQUFLLEVBQy9CLGFBQWEsR0FBRyxHQUFHO1FBRW5CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sT0FBTztRQUNWLE1BQU0sRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUVmLEtBQ0ksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUNsQyxHQUFHLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSxFQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDaEM7WUFDRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkB0YWlnYS11aS90c2NvbmZpZy9uZy1kZXYtbW9kZVwiIC8+XG5cbmltcG9ydCB7REFURV9GSUxMRVJfTEVOR1RILCBEQVRFX1JBTkdFX0ZJTExFUl9MRU5HVEh9IGZyb20gJy4vZGF0ZS1maWxsZXJzJztcbmltcG9ydCB7UkFOR0VfU0VQQVJBVE9SX0NIQVJ9IGZyb20gJy4vZGF0ZS10aW1lJztcbmltcG9ydCB7VHVpRGF5fSBmcm9tICcuL2RheSc7XG5pbXBvcnQge1R1aU1vbnRoUmFuZ2V9IGZyb20gJy4vbW9udGgtcmFuZ2UnO1xuaW1wb3J0IHR5cGUge1R1aURhdGVNb2RlfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBBbiBpbW11dGFibGUgcmFuZ2Ugb2YgdHdvIHtAbGluayBUdWlEYXl9IG9iamVjdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFR1aURheVJhbmdlIGV4dGVuZHMgVHVpTW9udGhSYW5nZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSByZWFkb25seSBmcm9tOiBUdWlEYXksXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSByZWFkb25seSB0bzogVHVpRGF5LFxuICAgICkge1xuICAgICAgICBzdXBlcihmcm9tLCB0byk7XG5cbiAgICAgICAgbmdEZXZNb2RlICYmIGNvbnNvbGUuYXNzZXJ0KGZyb20uZGF5U2FtZU9yQmVmb3JlKHRvKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyByYW5nZSBmcm9tIHR3byBkYXlzIGFmdGVyIHNvcnRpbmcgdGhlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGRheTFcbiAgICAgKiBAcGFyYW0gZGF5MlxuICAgICAqIEByZXR1cm4gbmV3IHJhbmdlIHdpdGggc29ydGVkIGRheXNcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHNvcnQoZGF5MTogVHVpRGF5LCBkYXkyOiBUdWlEYXkpOiBUdWlEYXlSYW5nZSB7XG4gICAgICAgIHJldHVybiBkYXkxLmRheVNhbWVPckJlZm9yZShkYXkyKVxuICAgICAgICAgICAgPyBuZXcgVHVpRGF5UmFuZ2UoZGF5MSwgZGF5MilcbiAgICAgICAgICAgIDogbmV3IFR1aURheVJhbmdlKGRheTIsIGRheTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlIGFuZCBjb3JyZWN0IGEgZGF5IHJhbmdlIGluIHN0cmluZyBmb3JtYXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSByYW5nZVN0cmluZyBhIHN0cmluZyBvZiBkYXRlcyBpbiBhIGZvcm1hdCBkZC5tbS55eXl5IC0gZGQubW0ueXl5eVxuICAgICAqIEBwYXJhbSBkYXRlTW9kZSB7QGxpbmsgVHVpRGF0ZU1vZGV9XG4gICAgICogQHJldHVybiBub3JtYWxpemVkIGRheSByYW5nZSBvYmplY3RcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG5vcm1hbGl6ZVBhcnNlKFxuICAgICAgICByYW5nZVN0cmluZzogc3RyaW5nLFxuICAgICAgICBkYXRlTW9kZTogVHVpRGF0ZU1vZGUgPSAnRE1ZJyxcbiAgICApOiBUdWlEYXlSYW5nZSB7XG4gICAgICAgIGNvbnN0IGxlZnREYXkgPSBUdWlEYXkubm9ybWFsaXplUGFyc2UoXG4gICAgICAgICAgICByYW5nZVN0cmluZy5zbGljZSgwLCBEQVRFX0ZJTExFUl9MRU5HVEgpLFxuICAgICAgICAgICAgZGF0ZU1vZGUsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJhbmdlU3RyaW5nLmxlbmd0aCA8IERBVEVfUkFOR0VfRklMTEVSX0xFTkdUSCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUdWlEYXlSYW5nZShsZWZ0RGF5LCBsZWZ0RGF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBUdWlEYXlSYW5nZS5zb3J0KFxuICAgICAgICAgICAgbGVmdERheSxcbiAgICAgICAgICAgIFR1aURheS5ub3JtYWxpemVQYXJzZShcbiAgICAgICAgICAgICAgICByYW5nZVN0cmluZy5zbGljZShEQVRFX0ZJTExFUl9MRU5HVEggKyBSQU5HRV9TRVBBUkFUT1JfQ0hBUi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIGRhdGVNb2RlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2luZ2xlRGF5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tLmRheVNhbWUodGhpcy50byk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgcmFuZ2VzIGZvciBpZGVudGl0eVxuICAgICAqXG4gICAgICogQHBhcmFtIGFub3RoZXIgc2Vjb25kIHJhbmdlIHRvIHRlc3QgYWdhaW5zdCBjdXJyZW50XG4gICAgICogQHJldHVybiBgdHJ1ZWAgaWYgZGF5cyBhcmUgaWRlbnRpY2FsXG4gICAgICovXG4gICAgcHVibGljIGRheVNhbWUoYW5vdGhlcjogVHVpRGF5UmFuZ2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbS5kYXlTYW1lKGFub3RoZXIuZnJvbSkgJiYgdGhpcy50by5kYXlTYW1lKGFub3RoZXIudG8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvY2tzIHJhbmdlIGJldHdlZW4gdHdvIGRheXMgaW5jbHVkZWQsIG9yIGxpbWl0cyBmcm9tIG9uZSBzaWRlIGlmIHRoZSBvdGhlciBpcyBudWxsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWluXG4gICAgICogQHBhcmFtIG1heFxuICAgICAqIEByZXR1cm4gcmFuZ2Ug4oCUIGNsYW1wZWQgcmFuZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF5TGltaXQobWluOiBUdWlEYXkgfCBudWxsLCBtYXg6IFR1aURheSB8IG51bGwpOiBUdWlEYXlSYW5nZSB7XG4gICAgICAgIHJldHVybiBuZXcgVHVpRGF5UmFuZ2UodGhpcy5mcm9tLmRheUxpbWl0KG1pbiwgbWF4KSwgdGhpcy50by5kYXlMaW1pdChtaW4sIG1heCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEh1bWFuIHJlYWRhYmxlIGZvcm1hdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGF5UmFuZ2UoZGF0ZUZvcm1hdDogVHVpRGF0ZU1vZGUsIGRhdGVTZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmZyb20uZ2V0Rm9ybWF0dGVkRGF5KGRhdGVGb3JtYXQsIGRhdGVTZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCB0byA9IHRoaXMudG8uZ2V0Rm9ybWF0dGVkRGF5KGRhdGVGb3JtYXQsIGRhdGVTZXBhcmF0b3IpO1xuXG4gICAgICAgIHJldHVybiBgJHtmcm9tfSR7UkFOR0VfU0VQQVJBVE9SX0NIQVJ9JHt0b31gO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB0b1N0cmluZyhcbiAgICAgICAgZGF0ZUZvcm1hdDogVHVpRGF0ZU1vZGUgPSAnRE1ZJyxcbiAgICAgICAgZGF0ZVNlcGFyYXRvciA9ICcuJyxcbiAgICApOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXlSYW5nZShkYXRlRm9ybWF0LCBkYXRlU2VwYXJhdG9yKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BcnJheSgpOiByZWFkb25seSBUdWlEYXlbXSB7XG4gICAgICAgIGNvbnN0IHtmcm9tLCB0b30gPSB0aGlzO1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcblxuICAgICAgICBmb3IgKFxuICAgICAgICAgICAgY29uc3QgZGF5ID0gZnJvbS50b1V0Y05hdGl2ZURhdGUoKTtcbiAgICAgICAgICAgIGRheSA8PSB0by50b1V0Y05hdGl2ZURhdGUoKTtcbiAgICAgICAgICAgIGRheS5zZXREYXRlKGRheS5nZXREYXRlKCkgKyAxKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGFyci5wdXNoKFR1aURheS5mcm9tTG9jYWxOYXRpdmVEYXRlKGRheSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG59XG4iXX0=