Skip to content

Commit 7c1864a

Browse files
authored
feat: onPanelChange also trigger when panel switch (#26)
* prepare for multiple trigger * update test case
1 parent a34094f commit 7c1864a

File tree

7 files changed

+28
-10
lines changed

7 files changed

+28
-10
lines changed

src/PickerPanel.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,12 +241,18 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
241241
() => mergedMode,
242242
);
243243

244-
const onInternalPanelChange = (newMode: PanelMode, viewValue: DateType) => {
245-
const nextMode = getInternalNextMode(newMode);
244+
const onInternalPanelChange = (
245+
newMode: PanelMode | null,
246+
viewValue: DateType,
247+
) => {
248+
const nextMode = getInternalNextMode(newMode || mergedMode);
246249
setSourceMode(mergedMode);
247250
setInnerMode(nextMode);
248251

249-
if (onPanelChange && mergedMode !== nextMode) {
252+
if (
253+
onPanelChange &&
254+
(mergedMode !== nextMode || isEqual(generateConfig, viewDate, viewDate))
255+
) {
250256
onPanelChange(viewValue, nextMode);
251257
}
252258
};

src/interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export interface PanelSharedProps<DateType> {
8080

8181
onSelect: OnSelect<DateType>;
8282
onViewDateChange: (value: DateType) => void;
83-
onPanelChange: (mode: PanelMode, viewValue: DateType) => void;
83+
onPanelChange: (mode: PanelMode | null, viewValue: DateType) => void;
8484
}
8585

8686
export interface DisabledTimes {

src/panels/DatePanel/index.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,14 @@ function DatePanel<DateType>(props: DatePanelProps<DateType>) {
6060

6161
// ==================== View Operation ====================
6262
const onYearChange = (diff: number) => {
63-
onViewDateChange(generateConfig.addYear(viewDate, diff));
63+
const newDate = generateConfig.addYear(viewDate, diff);
64+
onViewDateChange(newDate);
65+
onPanelChange(null, newDate);
6466
};
6567
const onMonthChange = (diff: number) => {
66-
onViewDateChange(generateConfig.addMonth(viewDate, diff));
68+
const newDate = generateConfig.addMonth(viewDate, diff);
69+
onViewDateChange(newDate);
70+
onPanelChange(null, newDate);
6771
};
6872

6973
return (

src/panels/DecadePanel/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,12 @@ function DecadePanel<DateType>(props: DecadePanelProps<DateType>) {
5555

5656
// ==================== View Operation ====================
5757
const onDecadesChange = (diff: number) => {
58-
onViewDateChange(
59-
generateConfig.addYear(viewDate, diff * DECADE_DISTANCE_COUNT),
58+
const newDate = generateConfig.addYear(
59+
viewDate,
60+
diff * DECADE_DISTANCE_COUNT,
6061
);
62+
onViewDateChange(newDate);
63+
onPanelChange(null, newDate);
6164
};
6265

6366
const onInternalSelect = (date: DateType) => {

src/panels/MonthPanel/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ function MonthPanel<DateType>(props: MonthPanelProps<DateType>) {
4646

4747
// ==================== View Operation ====================
4848
const onYearChange = (diff: number) => {
49-
onViewDateChange(generateConfig.addYear(viewDate, diff));
49+
const newDate = generateConfig.addYear(viewDate, diff);
50+
onViewDateChange(newDate);
51+
onPanelChange(null, newDate);
5052
};
5153

5254
return (

src/panels/YearPanel/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ function YearPanel<DateType>(props: YearPanelProps<DateType>) {
5555

5656
// ==================== View Operation ====================
5757
const onDecadeChange = (diff: number) => {
58-
onViewDateChange(generateConfig.addYear(viewDate, diff * 10));
58+
const newDate = generateConfig.addYear(viewDate, diff * 10);
59+
onViewDateChange(newDate);
60+
onPanelChange(null, newDate);
5961
};
6062

6163
return (

tests/picker.spec.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ describe('Picker.Basic', () => {
372372

373373
// Next page
374374
wrapper.find('.rc-picker-header-super-next-btn').simulate('click');
375+
expectPanelChange('2090-09-03', 'decade');
375376

376377
// Select decade
377378
wrapper.selectCell('2010-2019');

0 commit comments

Comments
 (0)