@@ -26,7 +26,7 @@ export default function TimePanelBody<DateType extends object = any>(
26
26
changeOnScroll,
27
27
} = props ;
28
28
29
- const { prefixCls, values, generateConfig, locale, onSelect, pickerValue } =
29
+ const { prefixCls, values, generateConfig, locale, onSelect, onHover , pickerValue } =
30
30
usePanelContext < DateType > ( ) ;
31
31
32
32
const value = values ?. [ 0 ] || null ;
@@ -185,28 +185,73 @@ export default function TimePanelBody<DateType extends object = any>(
185
185
generateConfig ,
186
186
] ) ;
187
187
188
+ // ===================== Columns Change =====================
189
+ const fillColumnValue = (
190
+ val : number | string ,
191
+ func : 'setHour' | 'setMinute' | 'setSecond' | 'setMillisecond' ,
192
+ ) => {
193
+ if ( val === null ) {
194
+ return null ;
195
+ }
196
+ return generateConfig [ func ] ( triggerDateTmpl , val as any ) ;
197
+ } ;
198
+
199
+ const getNextHourTime = ( val : number ) => fillColumnValue ( val , 'setHour' ) ;
200
+ const getNextMinuteTime = ( val : number ) => fillColumnValue ( val , 'setMinute' ) ;
201
+ const getNextSecondTime = ( val : number ) => fillColumnValue ( val , 'setSecond' ) ;
202
+ const getNextMillisecondTime = ( val : number ) => fillColumnValue ( val , 'setMillisecond' ) ;
203
+ const getMeridiemTime = ( val : string ) => {
204
+ if ( val === null ) {
205
+ return null ;
206
+ }
207
+
208
+ if ( val === 'am' && ! isAM ( hour ) ) {
209
+ return generateConfig . setHour ( triggerDateTmpl , hour - 12 ) ;
210
+ } else if ( val === 'pm' && isAM ( hour ) ) {
211
+ return generateConfig . setHour ( triggerDateTmpl , hour + 12 ) ;
212
+ }
213
+ return triggerDateTmpl ;
214
+ } ;
215
+
188
216
const onHourChange = ( val : number ) => {
189
- triggerChange ( generateConfig . setHour ( triggerDateTmpl , val ) ) ;
217
+ triggerChange ( getNextHourTime ( val ) ) ;
190
218
} ;
191
219
192
220
const onMinuteChange = ( val : number ) => {
193
- triggerChange ( generateConfig . setMinute ( triggerDateTmpl , val ) ) ;
221
+ triggerChange ( getNextMinuteTime ( val ) ) ;
194
222
} ;
195
223
196
224
const onSecondChange = ( val : number ) => {
197
- triggerChange ( generateConfig . setSecond ( triggerDateTmpl , val ) ) ;
225
+ triggerChange ( getNextSecondTime ( val ) ) ;
198
226
} ;
199
227
200
228
const onMillisecondChange = ( val : number ) => {
201
- triggerChange ( generateConfig . setMillisecond ( triggerDateTmpl , val ) ) ;
229
+ triggerChange ( getNextMillisecondTime ( val ) ) ;
202
230
} ;
203
231
204
232
const onMeridiemChange = ( val : string ) => {
205
- if ( val === 'am' && ! isAM ( hour ) ) {
206
- triggerChange ( generateConfig . setHour ( triggerDateTmpl , hour - 12 ) ) ;
207
- } else if ( val === 'pm' && isAM ( hour ) ) {
208
- triggerChange ( generateConfig . setHour ( triggerDateTmpl , hour + 12 ) ) ;
209
- }
233
+ triggerChange ( getMeridiemTime ( val ) ) ;
234
+ } ;
235
+
236
+ // ====================== Column Hover ======================
237
+ const onHourHover = ( val : number ) => {
238
+ onHover ( getNextHourTime ( val ) ) ;
239
+ } ;
240
+
241
+ const onMinuteHover = ( val : number ) => {
242
+ onHover ( getNextMinuteTime ( val ) ) ;
243
+ } ;
244
+
245
+ const onSecondHover = ( val : number ) => {
246
+ onHover ( getNextSecondTime ( val ) ) ;
247
+ } ;
248
+
249
+ const onMillisecondHover = ( val : number ) => {
250
+ onHover ( getNextMillisecondTime ( val ) ) ;
251
+ } ;
252
+
253
+ const onMeridiemHover = ( val : string ) => {
254
+ onHover ( getMeridiemTime ( val ) ) ;
210
255
} ;
211
256
212
257
// ========================= Render =========================
@@ -224,6 +269,7 @@ export default function TimePanelBody<DateType extends object = any>(
224
269
optionalValue = { pickerHour }
225
270
type = "hour"
226
271
onChange = { onHourChange }
272
+ onHover = { onHourHover }
227
273
{ ...sharedColumnProps }
228
274
/>
229
275
) }
@@ -234,6 +280,7 @@ export default function TimePanelBody<DateType extends object = any>(
234
280
optionalValue = { pickerMinute }
235
281
type = "minute"
236
282
onChange = { onMinuteChange }
283
+ onHover = { onMinuteHover }
237
284
{ ...sharedColumnProps }
238
285
/>
239
286
) }
@@ -244,6 +291,7 @@ export default function TimePanelBody<DateType extends object = any>(
244
291
optionalValue = { pickerSecond }
245
292
type = "second"
246
293
onChange = { onSecondChange }
294
+ onHover = { onSecondHover }
247
295
{ ...sharedColumnProps }
248
296
/>
249
297
) }
@@ -254,6 +302,7 @@ export default function TimePanelBody<DateType extends object = any>(
254
302
optionalValue = { pickerMillisecond }
255
303
type = "millisecond"
256
304
onChange = { onMillisecondChange }
305
+ onHover = { onMillisecondHover }
257
306
{ ...sharedColumnProps }
258
307
/>
259
308
) }
@@ -263,6 +312,7 @@ export default function TimePanelBody<DateType extends object = any>(
263
312
value = { meridiem }
264
313
type = "meridiem"
265
314
onChange = { onMeridiemChange }
315
+ onHover = { onMeridiemHover }
266
316
{ ...sharedColumnProps }
267
317
/>
268
318
) }
0 commit comments