@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
36 lines • 6.05 kB
JavaScript
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
import { DAYS_IN_WEEK, TuiDay } from '@taiga-ui/cdk/date-time';
import { tuiInRange } from '@taiga-ui/cdk/utils/math';
/**
* Computes day of week offset of the beginning of the month
*/
const getMonthStartDaysOffset = (month, firstDayOfWeek) => {
const startMonthOffsetFromSunday = new Date(month.year, month.month, 1).getDay();
return startMonthOffsetFromSunday >= firstDayOfWeek
? startMonthOffsetFromSunday - firstDayOfWeek
: DAYS_IN_WEEK - (firstDayOfWeek - startMonthOffsetFromSunday);
};
/**
* Calculated day on a calendar grid
* @return resulting day on these coordinates (could exceed passed month)
*/
export const getDayFromMonthRowCol = ({ month, rowIndex, colIndex, firstDayOfWeek, }) => {
ngDevMode && console.assert(Number.isInteger(rowIndex));
ngDevMode && console.assert(tuiInRange(rowIndex, 0, 6));
ngDevMode && console.assert(Number.isInteger(colIndex));
ngDevMode && console.assert(tuiInRange(colIndex, 0, DAYS_IN_WEEK));
let day = rowIndex * DAYS_IN_WEEK +
colIndex -
getMonthStartDaysOffset(month, firstDayOfWeek) +
1;
if (day > month.daysCount) {
day -= month.daysCount;
month = month.append({ month: 1 });
}
if (day <= 0) {
month = month.append({ month: -1 });
day = month.daysCount + day;
}
return new TuiDay(month.year, month.month, day);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3BpcGVzL2NhbGVuZGFyLXNoZWV0L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdEQUF3RDtBQUN4RCxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQzVCLEtBQWUsRUFDZixjQUF5QyxFQUNuQyxFQUFFO0lBQ1IsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFakYsT0FBTywwQkFBMEIsSUFBSSxjQUFjO1FBQy9DLENBQUMsQ0FBQywwQkFBMEIsR0FBRyxjQUFjO1FBQzdDLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxjQUFjLEdBQUcsMEJBQTBCLENBQUMsQ0FBQztBQUN2RSxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQ2xDLEtBQUssRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLGNBQWMsR0FlakIsRUFBVSxFQUFFO0lBQ1QsU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFbkUsSUFBSSxHQUFHLEdBQ0gsUUFBUSxHQUFHLFlBQVk7UUFDdkIsUUFBUTtRQUNSLHVCQUF1QixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUM7UUFDOUMsQ0FBQyxDQUFDO0lBRU4sSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRTtRQUN2QixHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQ1YsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztLQUMvQjtJQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiQHRhaWdhLXVpL3RzY29uZmlnL25nLWRldi1tb2RlXCIgLz5cbmltcG9ydCB7REFZU19JTl9XRUVLLCBUdWlEYXksIHR5cGUgVHVpTW9udGh9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGF0ZS10aW1lJztcbmltcG9ydCB7dHVpSW5SYW5nZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9tYXRoJztcblxuLyoqXG4gKiBDb21wdXRlcyBkYXkgb2Ygd2VlayBvZmZzZXQgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgbW9udGhcbiAqL1xuY29uc3QgZ2V0TW9udGhTdGFydERheXNPZmZzZXQgPSAoXG4gICAgbW9udGg6IFR1aU1vbnRoLFxuICAgIGZpcnN0RGF5T2ZXZWVrOiAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2LFxuKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBzdGFydE1vbnRoT2Zmc2V0RnJvbVN1bmRheSA9IG5ldyBEYXRlKG1vbnRoLnllYXIsIG1vbnRoLm1vbnRoLCAxKS5nZXREYXkoKTtcblxuICAgIHJldHVybiBzdGFydE1vbnRoT2Zmc2V0RnJvbVN1bmRheSA+PSBmaXJzdERheU9mV2Vla1xuICAgICAgICA/IHN0YXJ0TW9udGhPZmZzZXRGcm9tU3VuZGF5IC0gZmlyc3REYXlPZldlZWtcbiAgICAgICAgOiBEQVlTX0lOX1dFRUsgLSAoZmlyc3REYXlPZldlZWsgLSBzdGFydE1vbnRoT2Zmc2V0RnJvbVN1bmRheSk7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZWQgZGF5IG9uIGEgY2FsZW5kYXIgZ3JpZFxuICogQHJldHVybiByZXN1bHRpbmcgZGF5IG9uIHRoZXNlIGNvb3JkaW5hdGVzIChjb3VsZCBleGNlZWQgcGFzc2VkIG1vbnRoKVxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF5RnJvbU1vbnRoUm93Q29sID0gKHtcbiAgICBtb250aCxcbiAgICByb3dJbmRleCxcbiAgICBjb2xJbmRleCxcbiAgICBmaXJzdERheU9mV2Vlayxcbn06IHtcbiAgICAvKipcbiAgICAgKiBjb2x1bW4gaW4gYSBjYWxlbmRhclxuICAgICAqL1xuICAgIGNvbEluZGV4OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIGluZGV4IChTdW5kYXkgLSAwLCBTYXR1cmRheSAtIDYpXG4gICAgICovXG4gICAgZmlyc3REYXlPZldlZWs6IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDY7XG4gICAgbW9udGg6IFR1aU1vbnRoO1xuICAgIC8qKlxuICAgICAqIHJvdyBpbiBhIGNhbGVuZGFyXG4gICAgICovXG4gICAgcm93SW5kZXg6IG51bWJlcjtcbn0pOiBUdWlEYXkgPT4ge1xuICAgIG5nRGV2TW9kZSAmJiBjb25zb2xlLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKHJvd0luZGV4KSk7XG4gICAgbmdEZXZNb2RlICYmIGNvbnNvbGUuYXNzZXJ0KHR1aUluUmFuZ2Uocm93SW5kZXgsIDAsIDYpKTtcbiAgICBuZ0Rldk1vZGUgJiYgY29uc29sZS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihjb2xJbmRleCkpO1xuICAgIG5nRGV2TW9kZSAmJiBjb25zb2xlLmFzc2VydCh0dWlJblJhbmdlKGNvbEluZGV4LCAwLCBEQVlTX0lOX1dFRUspKTtcblxuICAgIGxldCBkYXkgPVxuICAgICAgICByb3dJbmRleCAqIERBWVNfSU5fV0VFSyArXG4gICAgICAgIGNvbEluZGV4IC1cbiAgICAgICAgZ2V0TW9udGhTdGFydERheXNPZmZzZXQobW9udGgsIGZpcnN0RGF5T2ZXZWVrKSArXG4gICAgICAgIDE7XG5cbiAgICBpZiAoZGF5ID4gbW9udGguZGF5c0NvdW50KSB7XG4gICAgICAgIGRheSAtPSBtb250aC5kYXlzQ291bnQ7XG4gICAgICAgIG1vbnRoID0gbW9udGguYXBwZW5kKHttb250aDogMX0pO1xuICAgIH1cblxuICAgIGlmIChkYXkgPD0gMCkge1xuICAgICAgICBtb250aCA9IG1vbnRoLmFwcGVuZCh7bW9udGg6IC0xfSk7XG4gICAgICAgIGRheSA9IG1vbnRoLmRheXNDb3VudCArIGRheTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR1aURheShtb250aC55ZWFyLCBtb250aC5tb250aCwgZGF5KTtcbn07XG4iXX0=