UNPKG

zarm

Version:

基于 React 的移动端UI库

361 lines (287 loc) 13.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.numberArrayToDate = exports.dateToNumberArray = exports.generateDatePickerColumns = exports.padZero = exports.useRenderLabel = exports.generateMeridiemHour = void 0; var _dayjs = _interopRequireDefault(require("dayjs")); var _isLeapYear = _interopRequireDefault(require("dayjs/plugin/isLeapYear")); var _isoWeek = _interopRequireDefault(require("dayjs/plugin/isoWeek")); var _isoWeeksInYear = _interopRequireDefault(require("dayjs/plugin/isoWeeksInYear")); var _isFunction = _interopRequireDefault(require("lodash/isFunction")); var React = _interopRequireWildcard(require("react")); var _configProvider = require("../config-provider"); var _interface = require("./interface"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) { if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } } return n.default = e, t && t.set(e, n), n; } _dayjs.default.extend(_isoWeek.default); _dayjs.default.extend(_isoWeeksInYear.default); _dayjs.default.extend(_isLeapYear.default); var generateMeridiemHour = function generateMeridiemHour(hour, hasMeridiem) { if (!hasMeridiem) return hour; if (hour === 0) hour = 12; if (hour > 12) hour -= 12; return hour; }; exports.generateMeridiemHour = generateMeridiemHour; var useRenderLabel = function useRenderLabel(renderLabel) { var _React$useContext = React.useContext(_configProvider.ConfigContext), globalLocale = _React$useContext.locale; var locale = globalLocale === null || globalLocale === void 0 ? void 0 : globalLocale.DatePickerView; return React.useCallback(function (type, value) { if ((0, _isFunction.default)(renderLabel)) { return renderLabel(type, value); } switch (type) { case _interface.COLUMN_TYPE.YEAR: return value + locale.year; case _interface.COLUMN_TYPE.MONTH: return value + locale.month; case _interface.COLUMN_TYPE.WEEK: return value + locale.week; case _interface.COLUMN_TYPE.WEEK_DAY: return locale.weeks[value - 1]; case _interface.COLUMN_TYPE.DAY: return value + locale.day; case _interface.COLUMN_TYPE.HOUR: return value + locale.hour; case _interface.COLUMN_TYPE.MINUTE: return value + locale.minute; case _interface.COLUMN_TYPE.SECOND: return value + locale.second; case _interface.COLUMN_TYPE.MERIDIEM: return value === _interface.MERIDIEM.AM ? locale.am : locale.pm; default: return value.toString(); } }, [renderLabel]); }; exports.useRenderLabel = useRenderLabel; var padZero = function padZero(value) { var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; return String(value).padStart(length, '0'); }; exports.padZero = padZero; var generateDatePickerColumns = function generateDatePickerColumns(selectedValue, min, max, columnType, renderLabel, filter) { var hasMeridiem = columnType.includes(_interface.COLUMN_TYPE.MERIDIEM); var date = (0, _dayjs.default)(selectedValue); var minDate = (0, _dayjs.default)(min); var maxDate = (0, _dayjs.default)(max); var minYear = min.getFullYear(); var minMonth = min.getMonth() + 1; var minDay = min.getDate(); var minWeek = minDate.isoWeek(); var minWeekday = minDate.isoWeekday(); var minHour = min.getHours(); var minMinute = min.getMinutes(); var minSecond = min.getSeconds(); var maxYear = max.getFullYear(); var maxMonth = max.getMonth() + 1; var maxDay = max.getDate(); var maxWeek = maxDate.isoWeek(); var maxWeekday = maxDate.isoWeekday(); var maxHour = max.getHours(); var maxMinute = max.getMinutes(); var maxSecond = max.getSeconds(); var selectedYear = date.year(); var selectedMonth = date.month() + 1; var selectedDay = date.date(); var selectedWeek = date.isoWeek(); var selectedHour = date.hour(); var selectedMinute = date.minute(); var selectedYearWeeks = (0, _dayjs.default)("".concat(selectedYear, "/01/01")).isoWeeksInYear(); var isInMinYear = selectedYear === minYear; var isInMaxYear = selectedYear === maxYear; var isInMinMonth = isInMinYear && selectedMonth === minMonth; var isInMaxMonth = isInMaxYear && selectedMonth === maxMonth; var isInMinDay = isInMinMonth && selectedDay === minDay; var isInMaxDay = isInMaxMonth && selectedDay === maxDay; var isInMinWeek = isInMinYear && selectedWeek === minWeek; var isInMaxWeek = isInMaxYear && selectedWeek === maxWeek; var isInMinHour = isInMinDay && selectedHour === minHour; var isInMaxHour = isInMaxDay && selectedHour === maxHour; var isInMinMinute = isInMinHour && selectedMinute === minMinute; var isInMaxMinute = isInMaxHour && selectedMinute === maxMinute; var firstDayInSelectedMonth = (0, _dayjs.default)(date).startOf('month'); var generateColumns = function generateColumns(from, to, type, iteratee) { var options = []; for (var i = from; i <= to; i++) { options.push(iteratee(i)); } if ((0, _isFunction.default)(filter)) { options = options.filter(function (option) { return filter(type, { get value() { return option.value; }, get date() { return selectedValue; } }); }); } return options; }; var generateMeridiemHourColumn = function generateMeridiemHourColumn(hour) { if (!hasMeridiem) return hour; if (hour > 12) hour -= 12; return hour; }; var columns = []; columnType === null || columnType === void 0 ? void 0 : columnType.forEach(function (type) { switch (type) { case _interface.COLUMN_TYPE.YEAR: columns.push(generateColumns(minYear, maxYear, _interface.COLUMN_TYPE.YEAR, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.YEAR, index) }; })); break; case _interface.COLUMN_TYPE.MONTH: columns.push(generateColumns(isInMinYear ? minMonth : 1, isInMaxYear ? maxMonth : 12, _interface.COLUMN_TYPE.MONTH, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.MONTH, index) }; })); break; case _interface.COLUMN_TYPE.WEEK: columns.push(generateColumns(isInMinYear ? minWeek : 1, isInMaxYear ? maxWeek : selectedYearWeeks, _interface.COLUMN_TYPE.WEEK, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.WEEK, index) }; })); break; case _interface.COLUMN_TYPE.WEEK_DAY: columns.push(generateColumns(isInMinWeek ? minWeekday : 1, isInMaxWeek ? maxWeekday : 7, _interface.COLUMN_TYPE.WEEK_DAY, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.WEEK_DAY, index) }; })); break; case _interface.COLUMN_TYPE.DAY: columns.push(generateColumns(isInMinMonth ? minDay : 1, isInMaxMonth ? maxDay : firstDayInSelectedMonth.daysInMonth(), _interface.COLUMN_TYPE.DAY, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.DAY, index) }; })); break; case _interface.COLUMN_TYPE.MERIDIEM: columns.push(generateColumns(_interface.MERIDIEM.AM, _interface.MERIDIEM.PM, _interface.COLUMN_TYPE.MERIDIEM, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.MERIDIEM, index) }; })); break; case _interface.COLUMN_TYPE.HOUR: columns.push(generateColumns(generateMeridiemHourColumn(isInMinDay ? minHour : 0), generateMeridiemHourColumn(isInMaxDay ? maxHour : 23), _interface.COLUMN_TYPE.HOUR, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.HOUR, generateMeridiemHour(index, hasMeridiem)) }; })); break; case _interface.COLUMN_TYPE.MINUTE: columns.push(generateColumns(isInMinHour ? minMinute : 0, isInMaxHour ? maxMinute : 59, _interface.COLUMN_TYPE.MINUTE, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.MINUTE, index) }; })); break; case _interface.COLUMN_TYPE.SECOND: columns.push(generateColumns(isInMinMinute ? minSecond : 0, isInMaxMinute ? maxSecond : 59, _interface.COLUMN_TYPE.SECOND, function (index) { return { value: index, label: renderLabel(_interface.COLUMN_TYPE.SECOND, index) }; })); break; } }); return columns; }; exports.generateDatePickerColumns = generateDatePickerColumns; var dateToNumberArray = function dateToNumberArray(value, columnType) { var date = (0, _dayjs.default)(value); var hasWeek = columnType === null || columnType === void 0 ? void 0 : columnType.includes(_interface.COLUMN_TYPE.WEEK); var hasMeridiem = columnType === null || columnType === void 0 ? void 0 : columnType.includes(_interface.COLUMN_TYPE.MERIDIEM); return columnType === null || columnType === void 0 ? void 0 : columnType.map(function (type) { switch (type) { case _interface.COLUMN_TYPE.YEAR: return hasWeek ? date.isoWeekYear() : date.year(); case _interface.COLUMN_TYPE.MONTH: return date.month() + 1; case _interface.COLUMN_TYPE.DAY: return date.date(); case _interface.COLUMN_TYPE.WEEK: return date.isoWeek(); case _interface.COLUMN_TYPE.WEEK_DAY: return date.isoWeekday(); case _interface.COLUMN_TYPE.MERIDIEM: return date.hour() >= 12 ? _interface.MERIDIEM.PM : _interface.MERIDIEM.AM; case _interface.COLUMN_TYPE.HOUR: return generateMeridiemHour(date.hour(), hasMeridiem); case _interface.COLUMN_TYPE.MINUTE: return date.minute(); case _interface.COLUMN_TYPE.SECOND: return date.second(); default: return undefined; } }); }; exports.dateToNumberArray = dateToNumberArray; var numberArrayToDate = function numberArrayToDate(currentValue, changedPickerValue, columnType, level) { var _ref, _types$year, _ref2, _types$month, _types$week, _types$weekDay, _ref3, _types$day, _types$hour, _types$minute, _types$second; var date = (0, _dayjs.default)(currentValue); var types = Object.fromEntries(columnType.map(function (type, index) { return [type, changedPickerValue[index]]; })); var currentColumnType = columnType[level]; var getMeridiemHour = function getMeridiemHour(meridiem, hour) { if (meridiem === _interface.MERIDIEM.AM && hour >= 12) { hour -= 12; } if (meridiem === _interface.MERIDIEM.PM && hour < 12) { hour += 12; } return hour; }; var getHour = function getHour(hour) { var meridiemIndex = columnType === null || columnType === void 0 ? void 0 : columnType.findIndex(function (i) { return i === _interface.COLUMN_TYPE.MERIDIEM; }); var meridiemValue = changedPickerValue[meridiemIndex]; return getMeridiemHour(meridiemValue, hour); }; var year = (_ref = (_types$year = types.year) !== null && _types$year !== void 0 ? _types$year : date.isoWeekYear()) !== null && _ref !== void 0 ? _ref : 1900; var month = (_ref2 = (_types$month = types.month) !== null && _types$month !== void 0 ? _types$month : date.month() + 1) !== null && _ref2 !== void 0 ? _ref2 : 0; var week = (_types$week = types.week) !== null && _types$week !== void 0 ? _types$week : 1; var weekDay = (_types$weekDay = types['week-day']) !== null && _types$weekDay !== void 0 ? _types$weekDay : 1; var day = (_ref3 = (_types$day = types.day) !== null && _types$day !== void 0 ? _types$day : date.date()) !== null && _ref3 !== void 0 ? _ref3 : 1; var hour = (_types$hour = types.hour) !== null && _types$hour !== void 0 ? _types$hour : 0; var minute = (_types$minute = types.minute) !== null && _types$minute !== void 0 ? _types$minute : 0; var second = (_types$second = types.second) !== null && _types$second !== void 0 ? _types$second : 0; var selectedMonth = month - 1; var selectedDay = Math.min(day, (0, _dayjs.default)(new Date(year, selectedMonth, 1)).daysInMonth()); var selectedHour = getHour(hour); var selectedDate = (0, _dayjs.default)().hour(selectedHour).minute(minute).second(second); if (columnType.includes(_interface.COLUMN_TYPE.WEEK)) { if (currentColumnType === _interface.COLUMN_TYPE.MONTH) { return selectedDate.year(year).month(selectedMonth).toDate(); } if (currentColumnType === _interface.COLUMN_TYPE.DAY) { return selectedDate.year(year).isoWeek(week).date(selectedDay).toDate(); } return selectedDate.year(year).isoWeek(week).isoWeekday(weekDay).toDate(); } return selectedDate.year(year).month(selectedMonth).date(selectedDay).toDate(); }; exports.numberArrayToDate = numberArrayToDate;