1- import * as React from 'react' ;
21import useMemo from 'rc-util/lib/hooks/useMemo' ;
2+ import * as React from 'react' ;
3+ import type { SharedTimeProps } from '.' ;
34import type { GenerateConfig } from '../../generate' ;
5+ import useTimeSelection from '../../hooks/useTimeSelection' ;
46import type { CellRender , Locale , OnSelect } from '../../interface' ;
7+ import { leftPad } from '../../utils/miscUtil' ;
58import type { Unit } from './TimeUnitColumn' ;
69import TimeUnitColumn from './TimeUnitColumn' ;
7- import { leftPad } from '../../utils/miscUtil' ;
8- import type { SharedTimeProps } from '.' ;
9- import { setTime as utilSetTime } from '../../utils/timeUtil' ;
1010
1111function shouldUnitsUpdate ( prevUnits : Unit [ ] , nextUnits : Unit [ ] ) {
1212 if ( prevUnits . length !== nextUnits . length ) return true ;
@@ -24,7 +24,7 @@ function generateUnits(
2424 disabledUnits : number [ ] | undefined ,
2525) {
2626 const units : Unit [ ] = [ ] ;
27- const integerStep = step >= 1 ? step | 0 : 1
27+ const integerStep = step >= 1 ? step | 0 : 1 ;
2828 for ( let i = start ; i <= end ; i += integerStep ) {
2929 units . push ( {
3030 label : leftPad ( i , 2 ) ,
@@ -105,30 +105,6 @@ function TimeBody<DateType>(props: TimeBodyProps<DateType>) {
105105 return [ disabledHours , disabledMinutes , disabledSeconds ] ;
106106 } , [ disabledHours , disabledMinutes , disabledSeconds , disabledTime , now ] ) ;
107107
108- // Set Time
109- const setTime = (
110- isNewPM : boolean | undefined ,
111- newHour : number ,
112- newMinute : number ,
113- newSecond : number ,
114- ) => {
115- let newDate = value || generateConfig . getNow ( ) ;
116-
117- const mergedHour = Math . max ( 0 , newHour ) ;
118- const mergedMinute = Math . max ( 0 , newMinute ) ;
119- const mergedSecond = Math . max ( 0 , newSecond ) ;
120-
121- newDate = utilSetTime (
122- generateConfig ,
123- newDate ,
124- ! use12Hours || ! isNewPM ? mergedHour : mergedHour + 12 ,
125- mergedMinute ,
126- mergedSecond ,
127- ) ;
128-
129- return newDate ;
130- } ;
131-
132108 // ========================= Unit =========================
133109 const rawHours = generateUnits ( 0 , 23 , hourStep , mergedDisabledHours && mergedDisabledHours ( ) ) ;
134110
@@ -185,6 +161,17 @@ function TimeBody<DateType>(props: TimeBodyProps<DateType>) {
185161 mergedDisabledSeconds && mergedDisabledSeconds ( originHour , minute ) ,
186162 ) ;
187163
164+ // Set Time
165+ const setTime = useTimeSelection ( {
166+ value,
167+ generateConfig,
168+ disabledMinutes : mergedDisabledMinutes ,
169+ disabledSeconds : mergedDisabledSeconds ,
170+ minutes,
171+ seconds,
172+ use12Hours,
173+ } ) ;
174+
188175 // ====================== Operations ======================
189176 operationRef . current = {
190177 onUpDown : ( diff ) => {
@@ -231,19 +218,45 @@ function TimeBody<DateType>(props: TimeBodyProps<DateType>) {
231218 }
232219
233220 // Hour
234- addColumnNode ( showHour , < TimeUnitColumn < DateType > key = "hour" type = "hour" info = { { today : now , locale, cellRender } } /> , hour , hours , ( num ) => {
235- onSelect ( setTime ( isPM , num , minute , second ) , 'mouse' ) ;
236- } ) ;
221+ addColumnNode (
222+ showHour ,
223+ < TimeUnitColumn < DateType > key = "hour" type = "hour" info = { { today : now , locale, cellRender } } /> ,
224+ hour ,
225+ hours ,
226+ ( num ) => {
227+ onSelect ( setTime ( isPM , num , minute , second ) , 'mouse' ) ;
228+ } ,
229+ ) ;
237230
238231 // Minute
239- addColumnNode ( showMinute , < TimeUnitColumn < DateType > key = "minute" type = "minute" info = { { today : now , locale, cellRender } } /> , minute , minutes , ( num ) => {
240- onSelect ( setTime ( isPM , hour , num , second ) , 'mouse' ) ;
241- } ) ;
232+ addColumnNode (
233+ showMinute ,
234+ < TimeUnitColumn < DateType >
235+ key = "minute"
236+ type = "minute"
237+ info = { { today : now , locale, cellRender } }
238+ /> ,
239+ minute ,
240+ minutes ,
241+ ( num ) => {
242+ onSelect ( setTime ( isPM , hour , num , second ) , 'mouse' ) ;
243+ } ,
244+ ) ;
242245
243246 // Second
244- addColumnNode ( showSecond , < TimeUnitColumn < DateType > key = "second" type = "second" info = { { today : now , locale, cellRender } } /> , second , seconds , ( num ) => {
245- onSelect ( setTime ( isPM , hour , minute , num ) , 'mouse' ) ;
246- } ) ;
247+ addColumnNode (
248+ showSecond ,
249+ < TimeUnitColumn < DateType >
250+ key = "second"
251+ type = "second"
252+ info = { { today : now , locale, cellRender } }
253+ /> ,
254+ second ,
255+ seconds ,
256+ ( num ) => {
257+ onSelect ( setTime ( isPM , hour , minute , num ) , 'mouse' ) ;
258+ } ,
259+ ) ;
247260
248261 // 12 Hours
249262 let PMIndex = - 1 ;
@@ -253,7 +266,7 @@ function TimeBody<DateType>(props: TimeBodyProps<DateType>) {
253266
254267 addColumnNode (
255268 use12Hours === true ,
256- < TimeUnitColumn key = "meridiem" type = "meridiem" info = { { today : now , locale, cellRender } } /> ,
269+ < TimeUnitColumn key = "meridiem" type = "meridiem" info = { { today : now , locale, cellRender } } /> ,
257270 PMIndex ,
258271 [
259272 { label : 'AM' , value : 0 , disabled : AMDisabled } ,
0 commit comments