import { DatePicker as OldDatePicker, ConfigProvider, DatePickerProps, } from 'antd'; import zhLocale from 'antd/es/date-picker/locale/zh_CN'; import React, { useContext, useEffect, useMemo, useState } from 'react'; import './index.less'; import classNames from 'classnames'; import { Icon } from '../Icon'; import { Button } from '../Button'; import { RangePickerProps } from 'antd/lib/date-picker/generatePicker'; import { Moment } from 'moment'; import { MonthPickerProps, WeekPickerProps } from 'antd/lib/date-picker'; import moment from 'moment'; import { AOP } from '../utils/AOP'; import { translate } from '../utils/index'; interface DatePickerExtraProps { showWeekAgo?: boolean; } interface RangePickerExtraProps {} const DatePicker: React.FC< DatePickerExtraProps & DatePickerProps & MonthPickerProps & WeekPickerProps > & { RangePicker: React.FC>; } = (props) => { const { dropdownClassName, value, showWeekAgo, onChange, showToday, picker = 'date', } = props; // 为了与 antd 的生态保持兼容性,我们要求必须要使用 `.@{ant-prefix}` 变量来生成类名 const { getPrefixCls, locale } = useContext(ConfigProvider.ConfigContext); const prefixCls = getPrefixCls('btri-datePicker'); const dropdownCls = getPrefixCls('btri-datePicker-dropdown'); const [dayValue, setDayValue] = useState(value); useEffect(() => { setDayValue(value); }, [value]); const newOnChange = new AOP(onChange) .after((v) => { setDayValue(v as moment.Moment); }) .getFunction(); const reserveDaysNode = useMemo(() => { return (
{showWeekAgo && ( )} {showToday && ( )}
); }, [showToday]); return (
} renderExtraFooter={ picker === 'date' && (showWeekAgo || showToday) && (() => reserveDaysNode) } {...props} // @ts-ignore showToday={false} dropdownClassName={classNames(dropdownCls, dropdownClassName)} value={dayValue} onChange={newOnChange} >
); }; const RangePicker: React.FC> = (props) => { // 为了与 antd 的生态保持兼容性,我们要求必须要使用 `.@{ant-prefix}` 变量来生成类名 const { getPrefixCls, locale } = useContext(ConfigProvider.ConfigContext); const prefixCls = getPrefixCls('btri-rangePicker'); const dropdownCls = getPrefixCls('btri-rangePicker-dropdown'); return (
} {...props} dropdownClassName={classNames(dropdownCls, props.dropdownClassName)} >
); }; DatePicker.RangePicker = RangePicker; export { DatePicker };