@@ -3,7 +3,6 @@ import { TimePickerPropsType } from "./types";
33import { useEffect , useState } from "react" ;
44import TimePickerColumn from "./TimePickerColumn" ;
55import { handleColumnKeyDown } from "./utils" ;
6-
76// Array to be used in seconds and minutes.
87const STEP = 5 ;
98const ARRAY_OF_60 = Array . from ( { length : 60 / STEP } , ( _ , index ) => index * STEP ) ;
@@ -15,10 +14,7 @@ const TimePickerContainer = styled.div`
1514` ;
1615
1716const TimePicker = ( {
18- onSelectHours,
19- onSelectMinutes,
20- onSelectSeconds,
21- onSelectDayPeriod,
17+ onPickTime,
2218 timeFormat,
2319 showSeconds,
2420 hourValue,
@@ -34,6 +30,19 @@ const TimePicker = ({
3430 const [ dayPeriodToFocus , setDayPeriodToFocus ] = useState ( dayPeriod || 0 ) ;
3531 const totalHours = timeFormat === "12" ? 12 : 24 ;
3632
33+ const onPickerSelect = ( value : number , type : "hour" | "minute" | "second" | "dayPeriod" ) => {
34+ const hourVal = type === "hour" ? value : hourValue || 0 ;
35+ const minuteVal = type === "minute" ? value : minuteValue || 0 ;
36+ const secondVal = type === "second" ? value : secondValue || 0 ;
37+ const dayPeriodVal = type === "dayPeriod" ? value : dayPeriod || 0 ;
38+
39+ setDayPeriodToFocus ( dayPeriodVal ) ;
40+ setSecondToFocus ( secondVal ) ;
41+ setMinuteToFocus ( minuteVal ) ;
42+ setHourToFocus ( hourVal ) ;
43+ onPickTime ( hourVal , minuteVal , secondVal , dayPeriodVal ) ;
44+ } ;
45+
3746 useEffect ( ( ) => {
3847 if ( dayPeriodToFocus !== undefined && id ) {
3948 document . getElementById ( `${ id } -dayPeriod-${ dayPeriodToFocus } ` ) ?. focus ( ) ;
@@ -65,11 +74,12 @@ const TimePicker = ({
6574 tabIndex = { tabIndex }
6675 dataType = "hour"
6776 onClick = { ( value : number ) => {
68- onSelectHours ( value ) ;
69- setHourToFocus ( value ) ;
77+ onPickerSelect ( value , "hour" ) ;
7078 } }
7179 onKeyboardEvent = { ( event : React . KeyboardEvent , value : number ) =>
72- handleColumnKeyDown ( event , "hour" , value , totalHours , setHourToFocus , onSelectHours )
80+ handleColumnKeyDown ( event , "hour" , value , totalHours , setHourToFocus , ( value ) =>
81+ onPickerSelect ( value , "hour" )
82+ )
7383 }
7484 />
7585 < TimePickerColumn
@@ -80,11 +90,18 @@ const TimePicker = ({
8090 tabIndex = { tabIndex }
8191 dataType = "minute"
8292 onClick = { ( value : number ) => {
83- onSelectMinutes ( value ) ;
84- setMinuteToFocus ( value ) ;
93+ onPickerSelect ( value , "minute" ) ;
8594 } }
8695 onKeyboardEvent = { ( event : React . KeyboardEvent , value : number ) =>
87- handleColumnKeyDown ( event , "minute" , value , 60 , setMinuteToFocus , onSelectMinutes , STEP )
96+ handleColumnKeyDown (
97+ event ,
98+ "minute" ,
99+ value ,
100+ 60 ,
101+ setMinuteToFocus ,
102+ ( value ) => onPickerSelect ( value , "minute" ) ,
103+ STEP
104+ )
88105 }
89106 />
90107 { showSeconds && (
@@ -96,13 +113,18 @@ const TimePicker = ({
96113 tabIndex = { tabIndex }
97114 dataType = "second"
98115 onClick = { ( value : number ) => {
99- if ( typeof onSelectSeconds === "function" ) {
100- onSelectSeconds ( value ) ;
101- setSecondToFocus ( value ) ;
102- }
116+ onPickerSelect ( value , "second" ) ;
103117 } }
104118 onKeyboardEvent = { ( event : React . KeyboardEvent , value : number ) =>
105- handleColumnKeyDown ( event , "second" , value , 60 , setSecondToFocus , onSelectSeconds , STEP )
119+ handleColumnKeyDown (
120+ event ,
121+ "second" ,
122+ value ,
123+ 60 ,
124+ setSecondToFocus ,
125+ ( value ) => onPickerSelect ( value , "second" ) ,
126+ STEP
127+ )
106128 }
107129 />
108130 ) }
@@ -115,13 +137,12 @@ const TimePicker = ({
115137 tabIndex = { tabIndex }
116138 dataType = "dayPeriod"
117139 onClick = { ( value : number ) => {
118- if ( typeof onSelectDayPeriod === "function" ) {
119- onSelectDayPeriod ( value ) ;
120- setDayPeriodToFocus ( value ) ;
121- }
140+ onPickerSelect ( value , "dayPeriod" ) ;
122141 } }
123142 onKeyboardEvent = { ( event : React . KeyboardEvent , value : number ) =>
124- handleColumnKeyDown ( event , "dayPeriod" , value , 2 , setDayPeriodToFocus , onSelectDayPeriod )
143+ handleColumnKeyDown ( event , "dayPeriod" , value , 2 , setDayPeriodToFocus , ( value ) =>
144+ onPickerSelect ( value , "dayPeriod" )
145+ )
125146 }
126147 />
127148 ) }
0 commit comments