Skip to content

Commit a5cc7f1

Browse files
committed
chore: select passing type
1 parent 78db2e3 commit a5cc7f1

File tree

12 files changed

+71
-49
lines changed

12 files changed

+71
-49
lines changed

src/PickerPanel.tsx

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
157157
panelPosition,
158158
rangedValue,
159159
hoverRangedValue,
160+
onSelect: onContextSelect,
160161
} = React.useContext(RangeContext);
161162
const panelRef = React.useRef<PanelRefProps>({});
162163

@@ -224,11 +225,16 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
224225

225226
const triggerSelect = (
226227
date: DateType,
228+
type: 'key' | 'mouse',
227229
forceTriggerSelect: boolean = false,
228230
) => {
229231
if (mergedMode === picker || forceTriggerSelect) {
230232
setInnerValue(date);
231233

234+
if (onContextSelect) {
235+
onContextSelect(date, type);
236+
}
237+
232238
if (onSelect) {
233239
onSelect(date);
234240
}
@@ -318,9 +324,9 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
318324
panelNode = (
319325
<DecadePanel<DateType>
320326
{...pickerProps}
321-
onSelect={date => {
327+
onSelect={(date, type) => {
322328
setViewDate(date);
323-
triggerSelect(date);
329+
triggerSelect(date, type);
324330
}}
325331
/>
326332
);
@@ -330,9 +336,9 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
330336
panelNode = (
331337
<YearPanel<DateType>
332338
{...pickerProps}
333-
onSelect={date => {
339+
onSelect={(date, type) => {
334340
setViewDate(date);
335-
triggerSelect(date);
341+
triggerSelect(date, type);
336342
}}
337343
/>
338344
);
@@ -342,9 +348,9 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
342348
panelNode = (
343349
<MonthPanel<DateType>
344350
{...pickerProps}
345-
onSelect={date => {
351+
onSelect={(date, type) => {
346352
setViewDate(date);
347-
triggerSelect(date);
353+
triggerSelect(date, type);
348354
}}
349355
/>
350356
);
@@ -354,9 +360,9 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
354360
panelNode = (
355361
<WeekPanel
356362
{...pickerProps}
357-
onSelect={date => {
363+
onSelect={(date, type) => {
358364
setViewDate(date);
359-
triggerSelect(date);
365+
triggerSelect(date, type);
360366
}}
361367
/>
362368
);
@@ -368,9 +374,9 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
368374
<TimePanel<DateType>
369375
{...pickerProps}
370376
{...(typeof showTime === 'object' ? showTime : null)}
371-
onSelect={date => {
377+
onSelect={(date, type) => {
372378
setViewDate(date);
373-
triggerSelect(date);
379+
triggerSelect(date, type);
374380
}}
375381
/>
376382
);
@@ -381,19 +387,19 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
381387
panelNode = (
382388
<DatetimePanel
383389
{...pickerProps}
384-
onSelect={date => {
390+
onSelect={(date, type) => {
385391
setViewDate(date);
386-
triggerSelect(date);
392+
triggerSelect(date, type);
387393
}}
388394
/>
389395
);
390396
} else {
391397
panelNode = (
392398
<DatePanel<DateType>
393399
{...pickerProps}
394-
onSelect={date => {
400+
onSelect={(date, type) => {
395401
setViewDate(date);
396-
triggerSelect(date);
402+
triggerSelect(date, type);
397403
}}
398404
/>
399405
);
@@ -419,7 +425,7 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
419425
<a
420426
className={`${prefixCls}-now-btn`}
421427
onClick={() => {
422-
triggerSelect(generateConfig.getNow(), true);
428+
triggerSelect(generateConfig.getNow(), 'mouse', true);
423429
}}
424430
>
425431
{locale.now}
@@ -431,7 +437,7 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
431437
<a
432438
className={`${prefixCls}-today-btn`}
433439
onClick={() => {
434-
triggerSelect(generateConfig.getNow(), true);
440+
triggerSelect(generateConfig.getNow(), 'mouse', true);
435441
}}
436442
>
437443
{locale.today}

src/RangeContext.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from 'react';
2-
import { NullableDateType, RangeValue } from './interface';
2+
import { NullableDateType, RangeValue, OnSelect } from './interface';
33

44
interface RangeContextProps {
55
/**
@@ -10,6 +10,7 @@ interface RangeContextProps {
1010
hoverRangedValue?: RangeValue<any>;
1111
inRange?: boolean;
1212
panelPosition?: 'left' | 'right' | false;
13+
onSelect?: OnSelect<any>;
1314
}
1415

1516
const RangeContext = React.createContext<RangeContextProps>({});

src/RangePicker.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,16 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
686686
panelPosition,
687687
rangedValue: selectedValue,
688688
hoverRangedValue: panelHoverRangedValue,
689+
onSelect: date => {
690+
const values = updateValues(selectedValue, date, activePickerIndex);
691+
692+
if (picker === 'date' && showTime) {
693+
setSelectedValue(values);
694+
} else {
695+
// triggerChange will also update selected values
696+
triggerChange(values);
697+
}
698+
},
689699
}}
690700
>
691701
<PickerPanel<DateType>
@@ -713,16 +723,6 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
713723
value={getValue(selectedValue, activePickerIndex)}
714724
locale={locale}
715725
tabIndex={-1}
716-
onSelect={date => {
717-
const values = updateValues(selectedValue, date, activePickerIndex);
718-
719-
if (picker === 'date' && showTime) {
720-
setSelectedValue(values);
721-
} else {
722-
// triggerChange will also update selected values
723-
triggerChange(values);
724-
}
725-
}}
726726
onPanelChange={(date, newMode) => {
727727
triggerModesChange(
728728
updateValues(mergedModes, newMode, activePickerIndex),
@@ -731,6 +731,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
731731

732732
setViewDates(updateValues(viewDates, date, activePickerIndex));
733733
}}
734+
onSelect={undefined}
734735
onChange={undefined}
735736
defaultValue={undefined}
736737
defaultPickerValue={undefined}

src/interface.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ export interface PanelRefProps {
5151

5252
export type NullableDateType<DateType> = DateType | null | undefined;
5353

54+
export type OnSelect<DateType> = (
55+
value: DateType,
56+
type: 'key' | 'mouse',
57+
) => void;
58+
5459
export interface PanelSharedProps<DateType> {
5560
prefixCls: string;
5661
generateConfig: GenerateConfig<DateType>;
@@ -73,7 +78,7 @@ export interface PanelSharedProps<DateType> {
7378
*/
7479
operationRef: React.MutableRefObject<PanelRefProps>;
7580

76-
onSelect: (value: DateType) => void;
81+
onSelect: OnSelect<DateType>;
7782
onViewDateChange: (value: DateType) => void;
7883
onPanelChange: (mode: PanelMode, viewValue: DateType) => void;
7984
}

src/panels/DatePanel/DateBody.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
isSameDate,
88
isSameMonth,
99
} from '../../utils/dateUtil';
10-
import { Locale } from '../../interface';
10+
import { Locale, OnSelect } from '../../interface';
1111
import RangeContext from '../../RangeContext';
1212
import PanelContext from '../../PanelContext';
1313
import useCellClassName from '../../hooks/useCellClassName';
@@ -33,7 +33,7 @@ export interface DateBodyProps<DateType> extends DateBodyPassProps<DateType> {
3333
viewDate: DateType;
3434
locale: Locale;
3535
rowCount: number;
36-
onSelect: (value: DateType) => void;
36+
onSelect: OnSelect<DateType>;
3737
}
3838

3939
function DateBody<DateType>({
@@ -108,7 +108,7 @@ function DateBody<DateType>({
108108
)}
109109
onClick={() => {
110110
if (!disabled) {
111-
onSelect(currentDate);
111+
onSelect(currentDate, 'mouse');
112112
}
113113
}}
114114
onMouseEnter={() => {

src/panels/DatePanel/index.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,19 @@ function DatePanel<DateType>(props: DatePanelProps<DateType>) {
4040
onKeyDown: event =>
4141
createKeyDownHandler(event, {
4242
onLeftRight: diff => {
43-
onSelect(generateConfig.addDate(value || viewDate, diff));
43+
onSelect(generateConfig.addDate(value || viewDate, diff), 'key');
4444
},
4545
onCtrlLeftRight: diff => {
46-
onSelect(generateConfig.addYear(value || viewDate, diff));
46+
onSelect(generateConfig.addYear(value || viewDate, diff), 'key');
4747
},
4848
onUpDown: diff => {
4949
onSelect(
5050
generateConfig.addDate(value || viewDate, diff * WEEK_DAY_COUNT),
51+
'key',
5152
);
5253
},
5354
onPageUpDown: diff => {
54-
onSelect(generateConfig.addMonth(value || viewDate, diff));
55+
onSelect(generateConfig.addMonth(value || viewDate, diff), 'key');
5556
},
5657
...keyboardConfig,
5758
}),

src/panels/DatetimePanel/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ function DatetimePanel<DateType>(props: DatetimePanelProps<DateType>) {
156156
}
157157

158158
if (onSelect) {
159-
onSelect(selectedDate);
159+
onSelect(selectedDate, 'mouse');
160160
}
161161
};
162162

src/panels/DecadePanel/index.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,15 @@ function DecadePanel<DateType>(props: DecadePanelProps<DateType>) {
2727
onKeyDown: event =>
2828
createKeyDownHandler(event, {
2929
onLeftRight: diff => {
30-
onSelect(generateConfig.addYear(viewDate, diff * DECADE_UNIT_DIFF));
30+
onSelect(
31+
generateConfig.addYear(viewDate, diff * DECADE_UNIT_DIFF),
32+
'key',
33+
);
3134
},
3235
onCtrlLeftRight: diff => {
3336
onSelect(
3437
generateConfig.addYear(viewDate, diff * DECADE_DISTANCE_COUNT),
38+
'key',
3539
);
3640
},
3741
onUpDown: diff => {
@@ -40,6 +44,7 @@ function DecadePanel<DateType>(props: DecadePanelProps<DateType>) {
4044
viewDate,
4145
diff * DECADE_UNIT_DIFF * DECADE_COL_COUNT,
4246
),
47+
'key',
4348
);
4449
},
4550
onEnter: () => {
@@ -56,7 +61,7 @@ function DecadePanel<DateType>(props: DecadePanelProps<DateType>) {
5661
};
5762

5863
const onInternalSelect = (date: DateType) => {
59-
onSelect(date);
64+
onSelect(date, 'mouse');
6065
onPanelChange('year', date);
6166
};
6267

src/panels/MonthPanel/index.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,15 @@ function MonthPanel<DateType>(props: MonthPanelProps<DateType>) {
2727
onKeyDown: event =>
2828
createKeyDownHandler(event, {
2929
onLeftRight: diff => {
30-
onSelect(generateConfig.addMonth(value || viewDate, diff));
30+
onSelect(generateConfig.addMonth(value || viewDate, diff), 'key');
3131
},
3232
onCtrlLeftRight: diff => {
33-
onSelect(generateConfig.addYear(value || viewDate, diff));
33+
onSelect(generateConfig.addYear(value || viewDate, diff), 'key');
3434
},
3535
onUpDown: diff => {
3636
onSelect(
3737
generateConfig.addMonth(value || viewDate, diff * MONTH_COL_COUNT),
38+
'key',
3839
);
3940
},
4041
onEnter: () => {
@@ -67,7 +68,7 @@ function MonthPanel<DateType>(props: MonthPanelProps<DateType>) {
6768
{...props}
6869
prefixCls={prefixCls}
6970
onSelect={date => {
70-
onSelect(date);
71+
onSelect(date, 'mouse');
7172
onPanelChange('date', date);
7273
}}
7374
/>

src/panels/TimePanel/TimeBody.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as React from 'react';
22
import { GenerateConfig } from '../../generate';
3-
import { Locale } from '../../interface';
3+
import { Locale, OnSelect } from '../../interface';
44
import TimeUnitColumn, { Unit } from './TimeUnitColumn';
55
import { leftPad } from '../../utils/miscUtil';
66
import { SharedTimeProps } from '.';
@@ -31,7 +31,7 @@ export interface TimeBodyProps<DateType> extends SharedTimeProps<DateType> {
3131
locale: Locale;
3232
generateConfig: GenerateConfig<DateType>;
3333
value?: DateType | null;
34-
onSelect: (value: DateType) => void;
34+
onSelect: OnSelect<DateType>;
3535
activeColumnIndex: number;
3636
operationRef: React.MutableRefObject<BodyOperationRef | undefined>;
3737
}
@@ -172,7 +172,7 @@ function TimeBody<DateType>(props: TimeBodyProps<DateType>) {
172172

173173
// Hour
174174
addColumnNode(showHour, <TimeUnitColumn key="hour" />, hour, hours, num => {
175-
onSelect(setTime(isPM, num, minute, second));
175+
onSelect(setTime(isPM, num, minute, second), 'mouse');
176176
});
177177

178178
// Minute
@@ -182,7 +182,7 @@ function TimeBody<DateType>(props: TimeBodyProps<DateType>) {
182182
minute,
183183
minutes,
184184
num => {
185-
onSelect(setTime(isPM, hour, num, second));
185+
onSelect(setTime(isPM, hour, num, second), 'mouse');
186186
},
187187
);
188188

@@ -193,7 +193,7 @@ function TimeBody<DateType>(props: TimeBodyProps<DateType>) {
193193
second,
194194
seconds,
195195
num => {
196-
onSelect(setTime(isPM, hour, minute, num));
196+
onSelect(setTime(isPM, hour, minute, num), 'mouse');
197197
},
198198
);
199199

@@ -209,7 +209,7 @@ function TimeBody<DateType>(props: TimeBodyProps<DateType>) {
209209
PMIndex,
210210
[{ label: 'AM', value: 0 }, { label: 'PM', value: 1 }],
211211
num => {
212-
onSelect(setTime(!!num, hour, minute, second));
212+
onSelect(setTime(!!num, hour, minute, second), 'mouse');
213213
},
214214
);
215215

0 commit comments

Comments
 (0)