@@ -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' ;
9- import { extend } from '@js/core/utils/extend' ;
1010import { each } from '@js/core/utils/iterator' ;
1111import { getHeight } from '@js/core/utils/size' ;
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,19 +23,41 @@ 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
26+ export interface DateViewRollerProperties extends ScrollableProperties {
27+ selectedIndex ?: number ;
28+
29+ items ?: any [ ] ;
30+
31+ showOnClick ?: boolean ;
32+
33+ onClick ?: ( ) => void ;
34+ }
35+
2536class DateViewRoller extends Scrollable {
26- _getDefaultOptions ( ) {
27- return extend ( super . _getDefaultOptions ( ) , {
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+
47+ _getDefaultOptions ( ) : DateViewRollerProperties {
48+ return {
49+ ...super . _getDefaultOptions ( ) ,
2850 showScrollbar : 'never' ,
2951 useNative : false ,
3052 selectedIndex : 0 ,
3153 bounceEnabled : false ,
3254 items : [ ] ,
3355 showOnClick : false ,
56+ // @ts -expect-error ts-error
3457 onClick : null ,
3558 onSelectedIndexChanged : null ,
3659 scrollByContent : true ,
37- } ) ;
60+ } ;
3861 }
3962
4063 _init ( ) : void {
@@ -53,7 +76,7 @@ class DateViewRoller extends Scrollable {
5376
5477 this . _renderContainerClick ( ) ;
5578 this . _renderItems ( ) ;
56- // @ts -expect-error
79+ // @ts -expect-error ts-error
5780 this . _renderSelectedValue ( ) ;
5881 this . _renderItemsClick ( ) ;
5982 this . _renderWheelEvent ( ) ;
@@ -76,7 +99,7 @@ class DateViewRoller extends Scrollable {
7699 if ( ! this . option ( 'showOnClick' ) ) {
77100 return ;
78101 }
79-
102+ // @ts -expect-error ts-error
80103 const eventName = addNamespace ( clickEventName , this . NAME ) ;
81104
82105 const clickAction = this . _createActionByOption ( 'onClick' ) ;
@@ -93,6 +116,7 @@ class DateViewRoller extends Scrollable {
93116
94117 $ ( this . content ( ) ) . empty ( ) ;
95118 // NOTE: rendering ~166+30+12+24+60 <div>s >> 50mc
119+ // @ts -expect-error ts-error
96120 items . forEach ( ( item ) => {
97121 $items = $items . add (
98122 // @ts -expect-error
@@ -123,6 +147,7 @@ class DateViewRoller extends Scrollable {
123147
124148 _fitIndex ( index ) {
125149 const items = this . option ( 'items' ) || [ ] ;
150+ // @ts -expect-error ts-error
126151 const itemCount = items . length ;
127152
128153 if ( index >= itemCount ) {
@@ -136,23 +161,24 @@ class DateViewRoller extends Scrollable {
136161 return index ;
137162 }
138163
139- _getItemPosition ( index ) {
164+ _getItemPosition ( index ) : number {
140165 return Math . round ( this . _itemHeight ( ) * index ) ;
141166 }
142167
143- _renderItemsClick ( ) {
168+ _renderItemsClick ( ) : void {
144169 const itemSelector = this . _getItemSelector ( ) ;
170+ // @ts -expect-error ts-error
145171 const eventName = addNamespace ( clickEventName , this . NAME ) ;
146172
147173 eventsEngine . off ( this . $element ( ) , eventName , itemSelector ) ;
148174 eventsEngine . on ( this . $element ( ) , eventName , itemSelector , this . _itemClickHandler . bind ( this ) ) ;
149175 }
150176
151- _getItemSelector ( ) {
177+ _getItemSelector ( ) : string {
152178 return `.${ DATEVIEW_ROLLER_ITEM_CLASS } ` ;
153179 }
154180
155- _itemClickHandler ( e ) {
181+ _itemClickHandler ( e ) : void {
156182 this . option ( 'selectedIndex' , this . _itemElementIndex ( e . currentTarget ) ) ;
157183 }
158184
@@ -218,6 +244,7 @@ class DateViewRoller extends Scrollable {
218244 }
219245
220246 _fitSelectedIndexInRange ( index ) {
247+ // @ts -expect-error ts-error
221248 const itemsCount = this . option ( 'items' ) . length ;
222249 return Math . max ( Math . min ( index , itemsCount - 1 ) , 0 ) ;
223250 }
@@ -266,7 +293,7 @@ class DateViewRoller extends Scrollable {
266293 this . _isWheelScrolled = false ;
267294 }
268295
269- _itemHeight ( ) {
296+ _itemHeight ( ) : number {
270297 const $item = this . _$items . first ( ) ;
271298
272299 return getHeight ( $item ) ;
@@ -281,7 +308,7 @@ class DateViewRoller extends Scrollable {
281308 }
282309
283310 _fireSelectedIndexChanged ( value , previousValue ) : void {
284- this . _selectedIndexChanged ( {
311+ this . _selectedIndexChanged ?. ( {
285312 value,
286313 previousValue,
287314 event : undefined ,
@@ -345,7 +372,7 @@ class DateViewRoller extends Scrollable {
345372 super . _dispose ( ) ;
346373 }
347374}
348- // @ts -expect-error ts-error
375+
349376registerComponent ( 'dxDateViewRoller' , DateViewRoller ) ;
350377
351378export default DateViewRoller ;
0 commit comments