UNPKG

react-native-dates-picker

Version:
129 lines (128 loc) 5.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _CalendarContext = require("../CalendarContext"); var _utils = require("../utils"); var _Wheel = _interopRequireDefault(require("./WheelPicker/Wheel")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (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 && Object.prototype.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; } function createNumberList(start, end, first = 1) { return new Array(end - start).fill(0).map((_, index) => ({ value: index + first + start, text: String(index + first + start).padStart(2, '0') })); } const WheelSelector = ({ type }) => { const { date, currentDate, onSelectYear, onSelectMonth, onSelectDate, minDate = '1900-01-01', maxDate = '2099-12-31' } = (0, _CalendarContext.useCalendarContext)(); const latestValues = (0, _react.useRef)({ date, currentDate }); const { year, month } = (0, _react.useMemo)(() => { const cd = (0, _utils.getDate)(currentDate); if (cd.isAfter((0, _utils.getDate)(maxDate))) return (0, _utils.getParsedDate)(maxDate); if (cd.isBefore((0, _utils.getDate)(minDate))) return (0, _utils.getParsedDate)(minDate); return (0, _utils.getParsedDate)(cd); }, [currentDate, maxDate, minDate]); const { year: startYear, month: startMonth } = (0, _utils.getParsedDate)(minDate); const { year: endYear, month: endMonth } = (0, _utils.getParsedDate)(maxDate); const { hour, minute, second } = (0, _utils.getParsedDate)(currentDate); const years = createNumberList(startYear - 1, endYear); const months = (0, _react.useMemo)(() => createNumberList(startYear === year ? startMonth : 0, endYear === year ? endMonth + 1 : 12), [endMonth, endYear, startMonth, startYear, year]); const days = (0, _react.useMemo)(() => (0, _utils.getDaysNumInMonth)(year, month + 1, minDate, maxDate), [year, month, minDate, maxDate]); const hours = (0, _react.useMemo)(() => createNumberList(...(0, _utils.getTimeRange)(currentDate, minDate, maxDate, 'hour'), 0), [currentDate, maxDate, minDate]); const minutes = (0, _react.useMemo)(() => createNumberList(...(0, _utils.getTimeRange)(currentDate, minDate, maxDate, 'minute'), 0), [currentDate, maxDate, minDate]); const seconds = (0, _react.useMemo)(() => createNumberList(...(0, _utils.getTimeRange)(currentDate, minDate, maxDate, 'second'), 0), [currentDate, maxDate, minDate]); const handleChangeDate = (0, _react.useCallback)((value, type) => { const { date: latestDate, currentDate: latestCurrentDate } = latestValues.current; const newDate = (0, _utils.getDate)(latestDate || latestCurrentDate)[type](value); onSelectDate((0, _utils.getFormatted)(newDate)); }, [onSelectDate]); const renderItem = () => { if (type === 'year') return /*#__PURE__*/_react.default.createElement(_Wheel.default, { value: year, items: years, key: "year", onChange: value => onSelectYear(value) }); if (type === 'month') return /*#__PURE__*/_react.default.createElement(_Wheel.default, { key: "month", value: month + 1, items: months, onChange: value => onSelectMonth(value - 1) }); if (type === 'day') return /*#__PURE__*/_react.default.createElement(_Wheel.default, { key: "day", value: (0, _utils.getDate)(currentDate).date(), items: days, onChange: value => handleChangeDate(value, 'date') }); if (type === 'hour') return /*#__PURE__*/_react.default.createElement(_Wheel.default, { key: "hour", value: hour, items: hours, onChange: value => handleChangeDate(value, 'hour') }); if (type === 'minute') return /*#__PURE__*/_react.default.createElement(_Wheel.default, { key: "minute", value: minute, items: minutes, onChange: value => handleChangeDate(value, 'minute') }); if (type === 'second') return /*#__PURE__*/_react.default.createElement(_Wheel.default, { key: "second", value: second, items: seconds, onChange: value => handleChangeDate(value, 'second') }); return null; }; (0, _react.useEffect)(() => { latestValues.current = { date, currentDate }; }, [date, currentDate]); return /*#__PURE__*/_react.default.createElement(_reactNative.View, { style: styles.wheelContainer, key: 'date-' + type }, renderItem()); }; const styles = _reactNative.StyleSheet.create({ wheelContainer: { flex: 1 } }); var _default = exports.default = WheelSelector; //# sourceMappingURL=WheelSelector.js.map