From bd1d53b501214c9a90783180604ca34b46110544 Mon Sep 17 00:00:00 2001 From: zombiej Date: Tue, 18 Feb 2020 20:23:56 +0800 Subject: [PATCH 1/2] prepare for multiple trigger --- src/PickerPanel.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/PickerPanel.tsx b/src/PickerPanel.tsx index b6fb7b91c..e7b65a71b 100644 --- a/src/PickerPanel.tsx +++ b/src/PickerPanel.tsx @@ -246,7 +246,10 @@ function PickerPanel(props: PickerPanelProps) { setSourceMode(mergedMode); setInnerMode(nextMode); - if (onPanelChange && mergedMode !== nextMode) { + if ( + onPanelChange && + (mergedMode !== nextMode || isEqual(generateConfig, viewDate, viewDate)) + ) { onPanelChange(viewValue, nextMode); } }; From 819fc0d4eb81fd3c545ccea528b9430feb9ab90f Mon Sep 17 00:00:00 2001 From: zombiej Date: Tue, 18 Feb 2020 21:02:33 +0800 Subject: [PATCH 2/2] update test case --- src/PickerPanel.tsx | 7 +++++-- src/interface.ts | 2 +- src/panels/DatePanel/index.tsx | 8 ++++++-- src/panels/DecadePanel/index.tsx | 7 +++++-- src/panels/MonthPanel/index.tsx | 4 +++- src/panels/YearPanel/index.tsx | 4 +++- tests/picker.spec.tsx | 1 + 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/PickerPanel.tsx b/src/PickerPanel.tsx index e7b65a71b..c7e04f584 100644 --- a/src/PickerPanel.tsx +++ b/src/PickerPanel.tsx @@ -241,8 +241,11 @@ function PickerPanel(props: PickerPanelProps) { () => mergedMode, ); - const onInternalPanelChange = (newMode: PanelMode, viewValue: DateType) => { - const nextMode = getInternalNextMode(newMode); + const onInternalPanelChange = ( + newMode: PanelMode | null, + viewValue: DateType, + ) => { + const nextMode = getInternalNextMode(newMode || mergedMode); setSourceMode(mergedMode); setInnerMode(nextMode); diff --git a/src/interface.ts b/src/interface.ts index 02408b119..2bc9a92cf 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -80,7 +80,7 @@ export interface PanelSharedProps { onSelect: OnSelect; onViewDateChange: (value: DateType) => void; - onPanelChange: (mode: PanelMode, viewValue: DateType) => void; + onPanelChange: (mode: PanelMode | null, viewValue: DateType) => void; } export interface DisabledTimes { diff --git a/src/panels/DatePanel/index.tsx b/src/panels/DatePanel/index.tsx index 07434d450..7cca1223a 100644 --- a/src/panels/DatePanel/index.tsx +++ b/src/panels/DatePanel/index.tsx @@ -60,10 +60,14 @@ function DatePanel(props: DatePanelProps) { // ==================== View Operation ==================== const onYearChange = (diff: number) => { - onViewDateChange(generateConfig.addYear(viewDate, diff)); + const newDate = generateConfig.addYear(viewDate, diff); + onViewDateChange(newDate); + onPanelChange(null, newDate); }; const onMonthChange = (diff: number) => { - onViewDateChange(generateConfig.addMonth(viewDate, diff)); + const newDate = generateConfig.addMonth(viewDate, diff); + onViewDateChange(newDate); + onPanelChange(null, newDate); }; return ( diff --git a/src/panels/DecadePanel/index.tsx b/src/panels/DecadePanel/index.tsx index 25734eeeb..963a30ae3 100644 --- a/src/panels/DecadePanel/index.tsx +++ b/src/panels/DecadePanel/index.tsx @@ -55,9 +55,12 @@ function DecadePanel(props: DecadePanelProps) { // ==================== View Operation ==================== const onDecadesChange = (diff: number) => { - onViewDateChange( - generateConfig.addYear(viewDate, diff * DECADE_DISTANCE_COUNT), + const newDate = generateConfig.addYear( + viewDate, + diff * DECADE_DISTANCE_COUNT, ); + onViewDateChange(newDate); + onPanelChange(null, newDate); }; const onInternalSelect = (date: DateType) => { diff --git a/src/panels/MonthPanel/index.tsx b/src/panels/MonthPanel/index.tsx index 9bc3d7126..825f3b7f4 100644 --- a/src/panels/MonthPanel/index.tsx +++ b/src/panels/MonthPanel/index.tsx @@ -46,7 +46,9 @@ function MonthPanel(props: MonthPanelProps) { // ==================== View Operation ==================== const onYearChange = (diff: number) => { - onViewDateChange(generateConfig.addYear(viewDate, diff)); + const newDate = generateConfig.addYear(viewDate, diff); + onViewDateChange(newDate); + onPanelChange(null, newDate); }; return ( diff --git a/src/panels/YearPanel/index.tsx b/src/panels/YearPanel/index.tsx index a5e519181..a1387c41a 100644 --- a/src/panels/YearPanel/index.tsx +++ b/src/panels/YearPanel/index.tsx @@ -55,7 +55,9 @@ function YearPanel(props: YearPanelProps) { // ==================== View Operation ==================== const onDecadeChange = (diff: number) => { - onViewDateChange(generateConfig.addYear(viewDate, diff * 10)); + const newDate = generateConfig.addYear(viewDate, diff * 10); + onViewDateChange(newDate); + onPanelChange(null, newDate); }; return ( diff --git a/tests/picker.spec.tsx b/tests/picker.spec.tsx index adb6bb4e3..1346b63f4 100644 --- a/tests/picker.spec.tsx +++ b/tests/picker.spec.tsx @@ -372,6 +372,7 @@ describe('Picker.Basic', () => { // Next page wrapper.find('.rc-picker-header-super-next-btn').simulate('click'); + expectPanelChange('2090-09-03', 'decade'); // Select decade wrapper.selectCell('2010-2019');