diff --git a/docs/examples/debug.tsx b/docs/examples/debug.tsx index ad7ac5e95..4e21d24d9 100644 --- a/docs/examples/debug.tsx +++ b/docs/examples/debug.tsx @@ -127,9 +127,9 @@ MyInput.displayName = 'MyInput'; export default () => { const singleRef = React.useRef(null); - const [value, setValue] = React.useState(null); + const [value, setValue] = React.useState(dayjs('2024-01-15')); const [rangeValue, setRangeValue] = React.useState<[Dayjs, Dayjs]>( - [dayjs('2024-01-15'), dayjs('2024-02-01')], + [dayjs('2024-01-15'), dayjs('2024-03-01')], // null, // undefined, ); @@ -138,103 +138,16 @@ export default () => { setValue(nextVal); }; + React.useEffect(() => { + setTimeout(() => { + setValue(dayjs('2024-03-03')); + }, 2000); + }, []); + return (
- {/* */} - - - -
- - date.isBefore(dayjs())} - // disabledTime={() => ({ - // disabledHours: () => [0, 1, 2, 3, 4, 5], - // disabledMinutes: () => [0, 1, 2, 3, 4, 5], - // disabledSeconds: () => [0, 1, 2, 3, 4, 5], - // })} - defaultOpenValue={dayjs()} - // open - picker="time" - format={{ - format: 'HH:mm:ss.SSS A', - type: 'mask', - }} - // showTime={{ - // defaultValue: dayjs(), - // }} - ref={singleRef} - suffixIcon="๐Ÿงถ" - // showTime={{ - // disabledTime: () => ({ - // disabledHours: () => [0, 1, 2, 3, 4, 5], - // disabledMinutes: () => [0, 1, 2, 3, 4, 5], - // disabledSeconds: () => [0, 1, 2, 3, 4, 5], - // }), - // }} - // showTime={{}} - // disabled - open - onChange={(...args) => { - console.log('๐Ÿ”ฅ Change:', ...args); - }} - onCalendarChange={(...args) => { - console.log('๐ŸŽ‰ Calendar Change:', ...args); - }} - onPickerValueChange={(val, info) => { - console.log('๐Ÿ‘ป Picker Value Change:', val, val?.format('YYYY-MM-DD'), info); - }} - onPanelChange={(val, info) => { - console.log('๐ŸŽผ Panel Change:', val, val?.format('YYYY-MM-DD'), info); - }} - style={{ width: 300 }} - onKeyDown={(e) => { - console.log('๐ŸŽฌ KeyDown:', e); - }} - /> -
- <>2333{ori}} - onChange={(val, text) => { - console.log('๐Ÿ”ฅ Change:', val, text); - setRangeValue(val); - }} - onCalendarChange={(val, text, info) => { - console.log('๐ŸŽ‰ Calendar Change:', val, text, info); - }} - onOpenChange={(nextOpen) => { - console.log('๐Ÿ† Next Open:', nextOpen); - }} - onPickerValueChange={(val, info) => { - console.log( - '๐Ÿ‘ป Picker Value Change:', - val, - val?.[0]?.format('YYYY-MM-DD'), - val?.[1]?.format('YYYY-MM-DD'), - info, - ); - }} - /> -
- - -
- {/* { console.error('1'); console.log('๐ŸŽฒ PanelValue Change:', panelValue, mode); }} - /> */} - {/* */} - {/* */} - {/* */} - - {/* date.date() === 11} - // cellRender={(date: Dayjs, info) => { - // if (info.type === 'date') { - // return date.format('Do'); - // } - // }} - value={value} - onChange={setValue} /> - - date.week() === 3} - /> - - date.week() === 3} - value={value} - onChange={setValue} - /> - - date.week() === 3} - /> - - date.week() === 3} - /> - - date.week() === 3} - showTime={{ - format: 'HH:mm:ss.SSS', - // format: 'LTS', - use12Hours: true, - changeOnScroll: true, - disabledHours: () => [0, 1, 2, 3, 4, 5], - disabledMinutes: (hour) => (hour === 6 ? [0, 1, 2, 4, 5, 6] : []), - disabledSeconds: (_, minute) => (minute === 3 ? [6, 7, 8, 9] : []), - disabledTime: () => ({ - disabledMilliseconds: () => [0, 100], - }), - showTitle: true, - millisecondStep: 20, - }} - // cellRender={(val: number, info) => { - // if (info.type === 'time') { - // return `${val}!!!`; - // } - // }} - /> */}
); diff --git a/src/PickerPanel/index.tsx b/src/PickerPanel/index.tsx index 70bb912f3..9a0847e77 100644 --- a/src/PickerPanel/index.tsx +++ b/src/PickerPanel/index.tsx @@ -275,6 +275,12 @@ function PickerPanel( }, ); + React.useEffect(() => { + if (mergedValue[0] && !pickerValue) { + setInternalPickerValue(mergedValue[0]); + } + }, [mergedValue[0]]); + // Both trigger when manually pickerValue or mode change const triggerPanelChange = (viewDate?: DateType, nextMode?: PanelMode) => { onPanelChange?.(viewDate || pickerValue, nextMode || mergedMode); diff --git a/tests/panel.spec.tsx b/tests/panel.spec.tsx index 55973f8c9..b9af5afd0 100644 --- a/tests/panel.spec.tsx +++ b/tests/panel.spec.tsx @@ -57,6 +57,11 @@ describe('Picker.Panel', () => { rerender(); selectCell(23); expect(onChange).not.toHaveBeenCalled(); + + // Should switch pickerValue of panel + rerender(); + selectCell(13); + expect(isSame(onChange.mock.calls[0][0], '2020-03-13')).toBeTruthy(); }); it('uncontrolled', () => { @@ -517,7 +522,7 @@ describe('Picker.Panel', () => { case 'month': case 'quarter': case 'week': - return (current as Dayjs).get(picker as any); + return (current as Dayjs).get(picker as any) as any; } }; @@ -709,4 +714,5 @@ describe('Picker.Panel', () => { expect(container.querySelector('.rc-picker-header-view').textContent).toEqual('01:02:03 AM'); }); + });