antd-mobile
Version:
<div align="center">
48 lines • 1.95 kB
JavaScript
import React, { useCallback, useMemo } from 'react';
import PickerView from '../picker-view';
import { withNativeProps } from '../../utils/native-props';
import { mergeProps } from '../../utils/with-default-props';
import { usePropsValue } from '../../utils/use-props-value';
import { generateDatePickerColumns, convertDateToStringArray, convertStringArrayToDate } from '../date-picker/date-picker-utils';
import useRenderLabel from './useRenderLabel';
import { TILL_NOW } from '../date-picker/util';
const thisYear = new Date().getFullYear();
const defaultProps = {
min: new Date(new Date().setFullYear(thisYear - 10)),
max: new Date(new Date().setFullYear(thisYear + 10)),
precision: 'day'
};
export const DatePickerView = p => {
var _a;
const props = mergeProps(defaultProps, p);
const {
renderLabel
} = props;
const [value, setValue] = usePropsValue({
value: props.value,
defaultValue: (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null
});
const mergedRenderLabel = useRenderLabel(renderLabel);
const pickerValue = useMemo(() => {
if (value === null || value === void 0 ? void 0 : value.tillNow) {
return [TILL_NOW, null, null];
}
return convertDateToStringArray(value, props.precision);
}, [value, props.precision]);
const onChange = useCallback(val => {
var _a;
const date = convertStringArrayToDate(val, props.precision);
if (date) {
setValue(date);
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, date);
}
}, [props.onChange, props.precision]);
return withNativeProps(props, React.createElement(PickerView, {
columns: selected => generateDatePickerColumns(selected, props.min, props.max, props.precision, mergedRenderLabel, props.filter, props.tillNow),
loading: props.loading,
loadingContent: props.loadingContent,
value: pickerValue,
mouseWheel: props.mouseWheel,
onChange: onChange
}));
};