@@ -3,10 +3,10 @@ import { useMemo } from 'react';
33import { useMemoizedFn } from '@td-design/rn-hooks' ;
44import dayjs , { Dayjs } from 'dayjs' ;
55
6- import { ItemValue } from '../WheelPicker/type' ;
6+ import { PickerData } from '../WheelPicker/type' ;
77import { CascadePickerItemProps , DatePickerPropsBase } from './type' ;
88
9- export default function useDatePicker ( {
9+ export default function useDatePicker < T > ( {
1010 mode,
1111 labelUnit,
1212 format,
@@ -81,18 +81,18 @@ export default function useDatePicker({
8181 const minDateDay = getMinDay ( ) ;
8282 const maxDateDay = getMaxDay ( ) ;
8383
84- const years : CascadePickerItemProps [ ] = [ ] ;
84+ const years : CascadePickerItemProps < T > [ ] = [ ] ;
8585 for ( let i = minDateYear ; i <= maxDateYear ; i ++ ) {
8686 years . push ( {
87- value : i + '' ,
87+ value : ( i + '' ) as T ,
8888 label : i + labelUnit . year ,
8989 } ) ;
9090 }
9191 if ( mode === 'year' ) {
9292 return [ years ] ;
9393 }
9494
95- const months : CascadePickerItemProps [ ] = [ ] ;
95+ const months : CascadePickerItemProps < T > [ ] = [ ] ;
9696 let minMonth = 0 ;
9797 let maxMonth = 11 ;
9898 if ( minDateYear === selYear ) {
@@ -104,15 +104,15 @@ export default function useDatePicker({
104104
105105 for ( let i = minMonth ; i <= maxMonth ; i ++ ) {
106106 months . push ( {
107- value : i + '' ,
107+ value : ( i + '' ) as T ,
108108 label : i + 1 + labelUnit . month ,
109109 } ) ;
110110 }
111111 if ( mode === 'month' ) {
112112 return [ years , months ] ;
113113 }
114114
115- const days : CascadePickerItemProps [ ] = [ ] ;
115+ const days : CascadePickerItemProps < T > [ ] = [ ] ;
116116 let minDay = 1 ;
117117 let maxDay = getDaysInMonth ( date . toDate ( ) ) ;
118118
@@ -124,7 +124,7 @@ export default function useDatePicker({
124124 }
125125 for ( let i = minDay ; i <= maxDay ; i ++ ) {
126126 days . push ( {
127- value : i + '' ,
127+ value : ( i + '' ) as T ,
128128 label : i + labelUnit . day ,
129129 } ) ;
130130 }
@@ -137,24 +137,24 @@ export default function useDatePicker({
137137 let minMinute = 0 ;
138138 let maxMinute = 59 ;
139139
140- const hours : CascadePickerItemProps [ ] = [ ] ;
140+ const hours : CascadePickerItemProps < T > [ ] = [ ] ;
141141 for ( let i = minHour ; i <= maxHour ; i ++ ) {
142142 hours . push ( {
143- value : i + '' ,
143+ value : ( i + '' ) as T ,
144144 label : labelUnit . hour ? i + labelUnit . hour + '' : pad ( i ) ,
145145 } ) ;
146146 }
147147
148- const minutes : CascadePickerItemProps [ ] = [ ] ;
148+ const minutes : CascadePickerItemProps < T > [ ] = [ ] ;
149149 const selMinute = date . get ( 'minute' ) ;
150150 for ( let i = minMinute ; i <= maxMinute ; i += 1 ) {
151151 minutes . push ( {
152- value : i + '' ,
152+ value : ( i + '' ) as T ,
153153 label : labelUnit . minute ? i + labelUnit . minute + '' : pad ( i ) ,
154154 } ) ;
155155 if ( selMinute > i && selMinute < i + 1 ) {
156156 minutes . push ( {
157- value : selMinute + '' ,
157+ value : ( selMinute + '' ) as T ,
158158 label : labelUnit . minute ? selMinute + labelUnit . minute + '' : pad ( selMinute ) ,
159159 } ) ;
160160 }
@@ -166,7 +166,7 @@ export default function useDatePicker({
166166
167167 const getValueCols = ( ) => {
168168 const date = getDate ( ) ;
169- let cols : CascadePickerItemProps [ ] [ ] = [ ] ;
169+ let cols : CascadePickerItemProps < T > [ ] [ ] = [ ] ;
170170 let values : string [ ] = [ ] ;
171171
172172 if ( mode === 'year' ) {
@@ -247,8 +247,8 @@ export default function useDatePicker({
247247 return clipDate ( newValue ! . toDate ( ) ) ;
248248 } ;
249249
250- const onValueChange = ( value : ItemValue , index : number ) => {
251- const newDate = getNewDate ( parseInt ( value + '' , 10 ) , index ) ;
250+ const onValueChange = ( data : PickerData < T > , index : number ) => {
251+ const newDate = getNewDate ( parseInt ( data . value + '' , 10 ) , index ) ;
252252 onChange ?.( newDate . toDate ( ) , newDate . format ( format ) ) ;
253253 } ;
254254
0 commit comments