diff --git a/components/date-picker/generatePicker/generateRangePicker.tsx b/components/date-picker/generatePicker/generateRangePicker.tsx index 2f8219cd7..45742a0d8 100644 --- a/components/date-picker/generatePicker/generateRangePicker.tsx +++ b/components/date-picker/generatePicker/generateRangePicker.tsx @@ -17,7 +17,10 @@ import { PanelMode, RangeValue } from '../../vc-picker/interface'; import { RangePickerSharedProps } from '../../vc-picker/RangePicker'; import devWarning from '../../vc-util/devWarning'; -export default function generateRangePicker(generateConfig: GenerateConfig) { +export default function generateRangePicker( + generateConfig: GenerateConfig, + extraProps: Record = {}, +) { const RangePicker = defineComponent & ExtraRangePickerProps>( { name: 'ARangePicker', @@ -25,6 +28,7 @@ export default function generateRangePicker(generateConfig: GenerateCo props: { ...commonProps(), ...rangePickerProps(), + ...extraProps, } as any, slots: [ 'suffixIcon', @@ -44,6 +48,7 @@ export default function generateRangePicker(generateConfig: GenerateCo 'ok', 'openChange', 'update:value', + 'update:open', 'calendarChange', 'focus', 'blur', @@ -75,6 +80,7 @@ export default function generateRangePicker(generateConfig: GenerateCo emit('change', values, dateStrings); }; const onOpenChange = (open: boolean) => { + emit('update:open', open); emit('openChange', open); }; const onFoucs = () => { diff --git a/components/date-picker/generatePicker/generateSinglePicker.tsx b/components/date-picker/generatePicker/generateSinglePicker.tsx index 2075d0c66..f569c0e2d 100644 --- a/components/date-picker/generatePicker/generateSinglePicker.tsx +++ b/components/date-picker/generatePicker/generateSinglePicker.tsx @@ -15,7 +15,10 @@ import classNames from '../../_util/classNames'; import { commonProps, datePickerProps, ExtraDatePickerProps } from './props'; import devWarning from '../../vc-util/devWarning'; -export default function generatePicker(generateConfig: GenerateConfig) { +export default function generatePicker( + generateConfig: GenerateConfig, + extraProps: Record = {}, +) { type DatePickerProps = PickerProps & ExtraDatePickerProps; function getPicker( @@ -28,6 +31,7 @@ export default function generatePicker(generateConfig: GenerateConfig< props: { ...commonProps(), ...datePickerProps(), + ...extraProps, } as any, slots: [ 'suffixIcon', @@ -41,7 +45,16 @@ export default function generatePicker(generateConfig: GenerateConfig< 'renderExtraFooter', 'monthCellRender', ], - emits: ['change', 'openChange', 'focus', 'blur', 'panelChange', 'ok', 'update:value'], + emits: [ + 'change', + 'openChange', + 'focus', + 'blur', + 'panelChange', + 'ok', + 'update:value', + 'update:open', + ], setup(props, { slots, expose, attrs, emit }) { devWarning( !((props as any).monthCellContentRender || slots.monthCellContentRender), @@ -73,6 +86,7 @@ export default function generatePicker(generateConfig: GenerateConfig< emit('change', value, dateString); }; const onOpenChange = (open: boolean) => { + emit('update:open', open); emit('openChange', open); }; const onFoucs = () => { diff --git a/components/date-picker/generatePicker/index.tsx b/components/date-picker/generatePicker/index.tsx index 8295f9dbf..706ecc9bb 100644 --- a/components/date-picker/generatePicker/index.tsx +++ b/components/date-picker/generatePicker/index.tsx @@ -125,13 +125,16 @@ export type RangePickerProps = | RangePickerDateProps | RangePickerTimeProps; -function generatePicker(generateConfig: GenerateConfig) { +function generatePicker( + generateConfig: GenerateConfig, + extraProps: Record = {}, +) { // =========================== Picker =========================== const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker } = - generateSinglePicker(generateConfig); + generateSinglePicker(generateConfig, extraProps); // ======================== Range Picker ======================== - const RangePicker = generateRangePicker(generateConfig); + const RangePicker = generateRangePicker(generateConfig, extraProps); // =========================== Export =========================== type MergedDatePickerType = typeof DatePicker & { diff --git a/components/time-picker/time-picker.tsx b/components/time-picker/time-picker.tsx index 061073a5f..c31a0a1b4 100644 --- a/components/time-picker/time-picker.tsx +++ b/components/time-picker/time-picker.tsx @@ -20,20 +20,23 @@ export interface TimePickerLocale { const timpePickerProps = { format: String, - showNow: Boolean, - showHour: Boolean, - showMinute: Boolean, - showSecond: Boolean, - use12Hours: Boolean, + showNow: { type: Boolean, default: undefined }, + showHour: { type: Boolean, default: undefined }, + showMinute: { type: Boolean, default: undefined }, + showSecond: { type: Boolean, default: undefined }, + use12Hours: { type: Boolean, default: undefined }, hourStep: Number, minuteStep: Number, secondStep: Number, - hideDisabledOptions: Boolean, + hideDisabledOptions: { type: Boolean, default: undefined }, popupClassName: String, }; function createTimePicker(generateConfig: GenerateConfig) { - const DatePicker = generatePicker(generateConfig); + const DatePicker = generatePicker(generateConfig, { + ...timpePickerProps, + order: { type: Boolean, default: true }, + }); const { TimePicker: InternalTimePicker, RangePicker: InternalRangePicker } = DatePicker as any; interface TimeRangePickerProps extends Omit, 'picker'> { popupClassName?: string; @@ -52,7 +55,7 @@ function createTimePicker(generateConfig: GenerateConfig) { ...timpePickerProps, } as any, slot: ['addon', 'renderExtraFooter', 'suffixIcon', 'clearIcon'], - emits: ['change', 'openChange', 'focus', 'blur', 'ok', 'update:value'], + emits: ['change', 'openChange', 'focus', 'blur', 'ok', 'update:value', 'update:open'], setup(props, { slots, expose, emit, attrs }) { devWarning( !slots.addon, @@ -73,6 +76,7 @@ function createTimePicker(generateConfig: GenerateConfig) { emit('change', value, dateString); }; const onOpenChange = (open: boolean) => { + emit('update:open', open); emit('openChange', open); }; const onFoucs = () => { @@ -121,6 +125,7 @@ function createTimePicker(generateConfig: GenerateConfig) { 'ok', 'openChange', 'update:value', + 'update:open', 'calendarChange', 'focus', 'blur', @@ -143,6 +148,7 @@ function createTimePicker(generateConfig: GenerateConfig) { emit('change', values, dateStrings); }; const onOpenChange = (open: boolean) => { + emit('update:open', open); emit('openChange', open); }; const onFoucs = () => { diff --git a/components/vc-picker/Picker.tsx b/components/vc-picker/Picker.tsx index 6a1f80335..0deb4e827 100644 --- a/components/vc-picker/Picker.tsx +++ b/components/vc-picker/Picker.tsx @@ -442,6 +442,8 @@ function Picker() { // Remove `picker` & `format` here since TimePicker is little different with other panel ...(props as Omit, 'picker' | 'format'>), ...attrs, + class: undefined, + style: undefined, pickerValue: undefined, onPickerValueChange: undefined, onChange: null, diff --git a/components/vc-picker/PickerPanel.tsx b/components/vc-picker/PickerPanel.tsx index bb44fa9f0..5ccc54c4a 100644 --- a/components/vc-picker/PickerPanel.tsx +++ b/components/vc-picker/PickerPanel.tsx @@ -139,7 +139,7 @@ function PickerPanel() { showToday: Boolean, renderExtraFooter: Function, dateRender: Function, - hideHeader: Boolean, + hideHeader: { type: Boolean, default: undefined }, onSelect: Function, onChange: Function, onPanelChange: Function, @@ -417,8 +417,8 @@ function PickerPanel() { // ============================ Panels ============================ let panelNode: VueNode; - const pickerProps = { + ...attrs, ...(props as MergedPickerPanelProps), operationRef: panelRef, prefixCls, @@ -540,7 +540,7 @@ function PickerPanel() { prefixCls, components, needConfirmButton: needConfirmButton.value, - okDisabled: !mergedValue || (disabledDate && disabledDate(mergedValue.value)), + okDisabled: !mergedValue.value || (disabledDate && disabledDate(mergedValue.value)), locale, showNow, onNow: needConfirmButton.value && onNow,