UNPKG

@fruits-chain/react-native-xiaoshu

Version:
155 lines (146 loc) 5.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = require("react"); var _index = require("../hooks/index.js"); var _index2 = _interopRequireDefault(require("../locale/index.js")); var _helper = require("./helper.js"); var _useDateMinMax = _interopRequireDefault(require("./useDateMinMax.js")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const buildColumnData = (mode, start, end, renderLabel // eslint-disable-next-line max-params ) => { const items = []; for (let index = start; index <= end; index++) { items.push({ value: index, label: renderLabel(mode, index) }); } return items; }; const useDatePicker = ({ mode, value, onChange, min, max, renderLabel }) => { const locale = _index2.default.useLocale().DatePickerView; const modes = (0, _react.useMemo)(() => (0, _helper.serializeMode)(mode.split('-')), [mode]); const [minDate, maxDate] = (0, _useDateMinMax.default)(mode, min, max); const renderLabelPersistFn = (0, _index.usePersistFn)((t, n) => { if (renderLabel) { return renderLabel(t, n); } switch (t) { case 'Y': return `${n}${locale.labelYear}`; case 'M': return `${n}${locale.labelMonth}`; case 'D': return `${n}${locale.labelDay}`; case 'h': return `${n}${locale.labelHour}`; case 'm': return `${n}${locale.labelMinute}`; case 's': return `${n}${locale.labelSecond}`; default: return `${n}`; } }); const [pickerValues, pickerColumns] = (0, _react.useMemo)(() => { const _columns = []; const _values = []; const boundary = (0, _helper.getDateBoundary)(value, modes, { defaultMin: minDate, defaultMax: maxDate, min, max }); const valueDateObject = (0, _helper.toDateObject)(value); // 根据格式化方式挑选值 _helper.COLUMN_SERIALIZE_TYPES.forEach(key => { const ab = boundary[key]; const a = key === 'M' ? ab[0] + 1 : ab[0]; const b = key === 'M' ? ab[1] + 1 : ab[1]; const v = key === 'M' ? valueDateObject[key] + 1 : valueDateObject[key]; _values.push(v); _columns.push(buildColumnData(key, a, b, renderLabelPersistFn)); }); // 挑选值 const _pickerColumns = []; const _pickerValues = []; modes.forEach(key => { const keyIndex = _helper.COLUMN_SERIALIZE_TYPES.findIndex(cst => cst === key); _pickerColumns.push(_columns[keyIndex]); _pickerValues.push(_values[keyIndex]); }); return [_pickerValues, _pickerColumns]; }, [max, maxDate, min, minDate, modes, renderLabelPersistFn, value]); const onChangePicker = (0, _index.usePersistFn)(v => { // console.log('values =>>>> ', v) const newValue = new Date(value); modes.forEach((key, index) => { const num = v[index]; switch (key) { case 'Y': newValue.setFullYear(num); break; case 'M': { // 对 D 进行修正 const days = (0, _helper.getMonthDays)(newValue.getFullYear(), num); const valueDays = newValue.getDate(); newValue.setMonth(num - 1, valueDays > days ? days : valueDays); break; } case 'D': { // 对 D 进行修正 const days = (0, _helper.getMonthDays)(newValue.getFullYear(), newValue.getMonth() + 1); newValue.setDate(num > days ? days : num); break; } case 'h': newValue.setHours(num); break; case 'm': newValue.setMinutes(num); break; case 's': newValue.setSeconds(num); break; default: break; } }); // console.log('newValue???? => ', toDateObject(newValue)) // // 最后边界值判断 // const _minDate = isDate(min) ? min : defaultMinDate // const _maxDate = isDate(max) ? max : defaultMaxDate const finallyValue = newValue.getTime() >= minDate.getTime() && newValue.getTime() <= maxDate.getTime() ? newValue : newValue.getTime() < minDate.getTime() ? minDate : maxDate; // console.log('_minDate => ', toDateObject(_minDate)) // console.log('_maxDate => ', toDateObject(_maxDate)) // console.log('newValue => ', toDateObject(newValue)) // console.log('_minDate t => ', _minDate.getTime()) // console.log('_maxDate t => ', _maxDate.getTime()) // console.log('newValue t => ', newValue.getTime()) // console.log('finallyValue => ', toDateObject(finallyValue)) // console.log( // newValue.getTime() >= _minDate.getTime() && // newValue.getTime() <= _maxDate.getTime(), // ) // console.log(newValue.getTime() < _minDate.getTime()) // console.log('finallyValue =>>>> ', finallyValue.toString()) // console.log('finallyValue =========>>>>>>>>>>>>>>>>>>>>>>>>>') onChange(finallyValue); }); return [pickerValues, pickerColumns, onChangePicker, minDate, maxDate]; }; var _default = exports.default = useDatePicker; //# sourceMappingURL=useDatePicker.js.map