@@ -5,12 +5,13 @@ import eventsEngine from '@js/common/core/events/core/events_engine';
55import { addNamespace } from '@js/common/core/events/utils/index' ;
66import registerComponent from '@js/core/component_registrator' ;
77import devices from '@js/core/devices' ;
8+ import type { dxElementWrapper } from '@js/core/renderer' ;
89import $ from '@js/core/renderer' ;
910import { each } from '@js/core/utils/iterator' ;
1011import { getHeight } from '@js/core/utils/size' ;
11- import type { Properties } from '@js/ui/scroll_view' ;
1212import { convertToLocation } from '@ts/ui/scroll_view/utils/convert_location' ;
1313
14+ import type { ScrollableProperties } from '../scroll_view/m_scrollable' ;
1415import Scrollable from '../scroll_view/m_scrollable' ;
1516
1617const DATEVIEW_ROLLER_CLASS = 'dx-dateviewroller' ;
@@ -22,9 +23,27 @@ const DATEVIEW_ROLLER_ITEM_SELECTED_CLASS = 'dx-dateview-item-selected';
2223const DATEVIEW_ROLLER_ITEM_SELECTED_FRAME_CLASS = 'dx-dateview-item-selected-frame' ;
2324const DATEVIEW_ROLLER_ITEM_SELECTED_BORDER_CLASS = 'dx-dateview-item-selected-border' ;
2425
25- export interface DateViewRollerProperties extends Properties { }
26+ export interface DateViewRollerProperties extends ScrollableProperties {
27+ selectedIndex ?: number ;
28+
29+ items ?: any [ ] ;
30+
31+ showOnClick ?: boolean ;
32+
33+ onClick ?: ( ) => void ;
34+ }
2635
2736class DateViewRoller extends Scrollable {
37+ _visibilityTimer ?: ReturnType < typeof setTimeout > ;
38+
39+ _selectedIndexChanged ?: ( e ?: Record < string , unknown > ) => void ;
40+
41+ _isWheelScrolled ?: boolean ;
42+
43+ _$items ! : dxElementWrapper ;
44+
45+ _animation ?: boolean ;
46+
2847 _getDefaultOptions ( ) : DateViewRollerProperties {
2948 return {
3049 ...super . _getDefaultOptions ( ) ,
@@ -34,6 +53,7 @@ class DateViewRoller extends Scrollable {
3453 bounceEnabled : false ,
3554 items : [ ] ,
3655 showOnClick : false ,
56+ // @ts -expect-error ts-error
3757 onClick : null ,
3858 onSelectedIndexChanged : null ,
3959 scrollByContent : true ,
@@ -56,7 +76,7 @@ class DateViewRoller extends Scrollable {
5676
5777 this . _renderContainerClick ( ) ;
5878 this . _renderItems ( ) ;
59- // @ts -expect-error
79+ // @ts -expect-error ts-error
6080 this . _renderSelectedValue ( ) ;
6181 this . _renderItemsClick ( ) ;
6282 this . _renderWheelEvent ( ) ;
@@ -79,7 +99,7 @@ class DateViewRoller extends Scrollable {
7999 if ( ! this . option ( 'showOnClick' ) ) {
80100 return ;
81101 }
82-
102+ // @ts -expect-error ts-error
83103 const eventName = addNamespace ( clickEventName , this . NAME ) ;
84104
85105 const clickAction = this . _createActionByOption ( 'onClick' ) ;
@@ -96,6 +116,7 @@ class DateViewRoller extends Scrollable {
96116
97117 $ ( this . content ( ) ) . empty ( ) ;
98118 // NOTE: rendering ~166+30+12+24+60 <div>s >> 50mc
119+ // @ts -expect-error ts-error
99120 items . forEach ( ( item ) => {
100121 $items = $items . add (
101122 // @ts -expect-error
@@ -126,6 +147,7 @@ class DateViewRoller extends Scrollable {
126147
127148 _fitIndex ( index ) {
128149 const items = this . option ( 'items' ) || [ ] ;
150+ // @ts -expect-error ts-error
129151 const itemCount = items . length ;
130152
131153 if ( index >= itemCount ) {
@@ -139,23 +161,24 @@ class DateViewRoller extends Scrollable {
139161 return index ;
140162 }
141163
142- _getItemPosition ( index ) {
164+ _getItemPosition ( index ) : number {
143165 return Math . round ( this . _itemHeight ( ) * index ) ;
144166 }
145167
146- _renderItemsClick ( ) {
168+ _renderItemsClick ( ) : void {
147169 const itemSelector = this . _getItemSelector ( ) ;
170+ // @ts -expect-error ts-error
148171 const eventName = addNamespace ( clickEventName , this . NAME ) ;
149172
150173 eventsEngine . off ( this . $element ( ) , eventName , itemSelector ) ;
151174 eventsEngine . on ( this . $element ( ) , eventName , itemSelector , this . _itemClickHandler . bind ( this ) ) ;
152175 }
153176
154- _getItemSelector ( ) {
177+ _getItemSelector ( ) : string {
155178 return `.${ DATEVIEW_ROLLER_ITEM_CLASS } ` ;
156179 }
157180
158- _itemClickHandler ( e ) {
181+ _itemClickHandler ( e ) : void {
159182 this . option ( 'selectedIndex' , this . _itemElementIndex ( e . currentTarget ) ) ;
160183 }
161184
@@ -221,6 +244,7 @@ class DateViewRoller extends Scrollable {
221244 }
222245
223246 _fitSelectedIndexInRange ( index ) {
247+ // @ts -expect-error ts-error
224248 const itemsCount = this . option ( 'items' ) . length ;
225249 return Math . max ( Math . min ( index , itemsCount - 1 ) , 0 ) ;
226250 }
@@ -269,7 +293,7 @@ class DateViewRoller extends Scrollable {
269293 this . _isWheelScrolled = false ;
270294 }
271295
272- _itemHeight ( ) {
296+ _itemHeight ( ) : number {
273297 const $item = this . _$items . first ( ) ;
274298
275299 return getHeight ( $item ) ;
@@ -284,7 +308,7 @@ class DateViewRoller extends Scrollable {
284308 }
285309
286310 _fireSelectedIndexChanged ( value , previousValue ) : void {
287- this . _selectedIndexChanged ( {
311+ this . _selectedIndexChanged ?. ( {
288312 value,
289313 previousValue,
290314 event : undefined ,
@@ -348,7 +372,7 @@ class DateViewRoller extends Scrollable {
348372 super . _dispose ( ) ;
349373 }
350374}
351- // @ts -expect-error ts-error
375+
352376registerComponent ( 'dxDateViewRoller' , DateViewRoller ) ;
353377
354378export default DateViewRoller ;
0 commit comments