@cainiaofe/cn-ui-m
Version:
111 lines (110 loc) • 3.94 kB
JavaScript
import { __spreadArray } from "tslib";
import { dayjs } from "../../../utils/dayjs";
var precisionRankRecord = {
year: 0,
week: 1,
'week-day': 2,
};
export function defaultRenderLabel(type, data) {
if (type === 'week-day') {
var weeks = dayjs.weekdaysShort();
return weeks[data];
}
return data.toString();
}
export function generateDatePickerColumns(selected, min, max, precision, renderLabel, filter) {
var ret = [];
var minYear = min.getFullYear();
var maxYear = max.getFullYear();
var rank = precisionRankRecord[precision];
var selectedYear = parseInt(selected[0], 10);
var isInMinYear = selectedYear === minYear;
var isInMaxYear = selectedYear === maxYear;
var minDay = dayjs(min);
var maxDay = dayjs(max);
var minWeek = minDay.isoWeek();
var maxWeek = maxDay.isoWeek();
var minWeekday = minDay.isoWeekday();
var maxWeekday = maxDay.isoWeekday();
var selectedWeek = parseInt(selected[1], 10);
var isInMinWeek = isInMinYear && selectedWeek === minWeek;
var isInMaxWeek = isInMaxYear && selectedWeek === maxWeek;
var selectedYearWeeks = dayjs("".concat(selectedYear, "-01-01")).isoWeeksInYear();
var generateColumn = function (from, to, precision2) {
var column = [];
for (var i = from; i <= to; i++) {
column.push(i);
}
var prefix = selected.slice(0, precisionRankRecord[precision2]);
var currentFilter = filter === null || filter === void 0 ? void 0 : filter[precision2];
if (currentFilter && typeof currentFilter === 'function') {
column = column.filter(function (i) {
return currentFilter(i, {
get date() {
var stringArray = __spreadArray(__spreadArray([], prefix, true), [i.toString()], false);
return convertStringArrayToDate(stringArray);
},
});
});
}
return column;
};
if (rank >= precisionRankRecord.year) {
var lower = minYear;
var upper = maxYear;
var years = generateColumn(lower, upper, 'year');
ret.push(years.map(function (v) {
return {
label: renderLabel('year', v),
value: v.toString(),
};
}));
}
if (rank >= precisionRankRecord.week) {
var lower = isInMinYear ? minWeek : 1;
var upper = isInMaxYear ? maxWeek : selectedYearWeeks;
var weeks = generateColumn(lower, upper, 'week');
ret.push(weeks.map(function (v) {
return {
label: renderLabel('week', v),
value: v.toString(),
};
}));
}
if (rank >= precisionRankRecord['week-day']) {
var lower = isInMinWeek ? minWeekday : 1;
var upper = isInMaxWeek ? maxWeekday : 7;
var weeks = generateColumn(lower, upper, 'week-day');
ret.push(weeks.map(function (v) {
return {
label: renderLabel('week-day', v),
value: v.toString(),
};
}));
}
return ret;
}
export function convertDateToStringArray(date) {
if (!date)
return [];
var day = dayjs(date);
return [
day.isoWeekYear().toString(),
day.isoWeek().toString(),
day.isoWeekday().toString(),
];
}
export function convertStringArrayToDate(value) {
var _a, _b, _c;
var yearString = (_a = value[0]) !== null && _a !== void 0 ? _a : '1900';
var weekString = (_b = value[1]) !== null && _b !== void 0 ? _b : '1';
var weekdayString = (_c = value[2]) !== null && _c !== void 0 ? _c : '1';
var day = dayjs()
.year(parseInt(yearString, 10))
.isoWeek(parseInt(weekString, 10))
.isoWeekday(parseInt(weekdayString, 10))
.hour(0)
.minute(0)
.second(0);
return day.toDate();
}