@@ -26,7 +26,7 @@ export default function TimePanelBody<DateType extends object = any>(
2626 changeOnScroll,
2727 } = props ;
2828
29- const { prefixCls, values, generateConfig, locale, onSelect, pickerValue } =
29+ const { prefixCls, values, generateConfig, locale, onSelect, onHover , pickerValue } =
3030 usePanelContext < DateType > ( ) ;
3131
3232 const value = values ?. [ 0 ] || null ;
@@ -185,28 +185,73 @@ export default function TimePanelBody<DateType extends object = any>(
185185 generateConfig ,
186186 ] ) ;
187187
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+
188216 const onHourChange = ( val : number ) => {
189- triggerChange ( generateConfig . setHour ( triggerDateTmpl , val ) ) ;
217+ triggerChange ( getNextHourTime ( val ) ) ;
190218 } ;
191219
192220 const onMinuteChange = ( val : number ) => {
193- triggerChange ( generateConfig . setMinute ( triggerDateTmpl , val ) ) ;
221+ triggerChange ( getNextMinuteTime ( val ) ) ;
194222 } ;
195223
196224 const onSecondChange = ( val : number ) => {
197- triggerChange ( generateConfig . setSecond ( triggerDateTmpl , val ) ) ;
225+ triggerChange ( getNextSecondTime ( val ) ) ;
198226 } ;
199227
200228 const onMillisecondChange = ( val : number ) => {
201- triggerChange ( generateConfig . setMillisecond ( triggerDateTmpl , val ) ) ;
229+ triggerChange ( getNextMillisecondTime ( val ) ) ;
202230 } ;
203231
204232 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 ) ) ;
210255 } ;
211256
212257 // ========================= Render =========================
@@ -224,6 +269,7 @@ export default function TimePanelBody<DateType extends object = any>(
224269 optionalValue = { pickerHour }
225270 type = "hour"
226271 onChange = { onHourChange }
272+ onHover = { onHourHover }
227273 { ...sharedColumnProps }
228274 />
229275 ) }
@@ -234,6 +280,7 @@ export default function TimePanelBody<DateType extends object = any>(
234280 optionalValue = { pickerMinute }
235281 type = "minute"
236282 onChange = { onMinuteChange }
283+ onHover = { onMinuteHover }
237284 { ...sharedColumnProps }
238285 />
239286 ) }
@@ -244,6 +291,7 @@ export default function TimePanelBody<DateType extends object = any>(
244291 optionalValue = { pickerSecond }
245292 type = "second"
246293 onChange = { onSecondChange }
294+ onHover = { onSecondHover }
247295 { ...sharedColumnProps }
248296 />
249297 ) }
@@ -254,6 +302,7 @@ export default function TimePanelBody<DateType extends object = any>(
254302 optionalValue = { pickerMillisecond }
255303 type = "millisecond"
256304 onChange = { onMillisecondChange }
305+ onHover = { onMillisecondHover }
257306 { ...sharedColumnProps }
258307 />
259308 ) }
@@ -263,6 +312,7 @@ export default function TimePanelBody<DateType extends object = any>(
263312 value = { meridiem }
264313 type = "meridiem"
265314 onChange = { onMeridiemChange }
315+ onHover = { onMeridiemHover }
266316 { ...sharedColumnProps }
267317 />
268318 ) }
0 commit comments