@@ -5,15 +5,21 @@ import $ from '@js/core/renderer';
55import { equalByValue } from '@js/core/utils/common' ;
66import { isRenderer } from '@js/core/utils/type' ;
77import type { ItemLike } from '@js/ui/collection/ui.collection_widget.base' ;
8+ import type { CollectionItemKey } from '@ts/ui/collection/collection_widget.base' ;
89import type CollectionWidget from '@ts/ui/collection/collection_widget.edit' ;
910import type { CollectionWidgetEditProperties } from '@ts/ui/collection/collection_widget.edit' ;
1011
11- export type CollectionItemIndex = number | { group : number ; item : number } ;
12+ export interface CollectionGroupedItemIndex {
13+ group : number ;
14+ item : number ;
15+ }
16+
17+ export type CollectionItemIndex = number | CollectionGroupedItemIndex ;
1218
1319export type EditStrategyComponent <
1420 TItem extends ItemLike = ItemLike ,
1521 // eslint-disable-next-line @typescript-eslint/no-explicit-any
16- TKey = any ,
22+ TKey extends CollectionItemKey = any ,
1723// eslint-disable-next-line @typescript-eslint/no-explicit-any
1824> = Pick < CollectionWidget < CollectionWidgetEditProperties < any , TItem , TKey > , TItem , TKey > ,
1925 'keyOf'
@@ -24,16 +30,15 @@ export type EditStrategyComponent<
2430 | '_dataController'
2531> ;
2632
27- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28- interface KeysCache < TKey = any > {
33+ interface KeysCache < TKey = CollectionItemKey > {
2934 [ key : string ] : unknown ;
3035 keys ?: TKey [ ] ;
3136}
3237class EditStrategy <
3338 // eslint-disable-next-line @typescript-eslint/no-explicit-any
3439 TItem extends ItemLike = any ,
3540 // eslint-disable-next-line @typescript-eslint/no-explicit-any
36- TKey = any ,
41+ TKey extends CollectionItemKey = any ,
3742> {
3843 _collectionWidget ! : EditStrategyComponent < TItem , TKey > ;
3944
@@ -49,7 +54,7 @@ class EditStrategy<
4954 }
5055
5156 // eslint-disable-next-line @typescript-eslint/no-unused-vars
52- getIndexByItemData ( value : TItem ) : number {
57+ getIndexByItemData ( value : TItem ) : CollectionItemIndex {
5358 return Class . abstract ( ) ;
5459 }
5560
@@ -64,15 +69,15 @@ class EditStrategy<
6469 }
6570
6671 // eslint-disable-next-line @typescript-eslint/no-unused-vars
67- getItemsByKeys ( keys : TKey [ ] , items ? : TItem [ ] ) : TItem [ ] {
72+ getItemsByKeys ( keys : TKey [ ] , items : TItem [ ] | undefined ) : TItem [ ] {
6873 return Class . abstract ( ) ;
6974 }
7075
7176 itemsGetter ( ) : TItem [ ] {
7277 return Class . abstract ( ) ;
7378 }
7479
75- getKeyByIndex ( index : number ) : TKey {
80+ getKeyByIndex ( index : CollectionItemIndex ) : TKey {
7681 const resultIndex = this . _denormalizeItemIndex ( index ) ;
7782
7883 return this . getKeysByItems ( [ this . getItemDataByIndex ( resultIndex as number ) ] ) [ 0 ] ;
@@ -99,57 +104,61 @@ class EditStrategy<
99104 }
100105
101106 getNormalizedIndex (
102- value : number | Element | TItem ,
107+ value : CollectionItemIndex | Element | dxElementWrapper | TItem ,
103108 ) : number {
104- if ( this . _isNormalizedItemIndex ( value ) ) {
105- return value as number ;
106- }
107-
108- if ( this . _isItemIndex ( value ) ) {
109- return this . _normalizeItemIndex ( value as number ) ;
110- }
111-
112109 if ( this . _isNode ( value ) ) {
113110 return this . _getNormalizedItemIndex ( value ) ;
114111 }
115112
116- return this . _normalizeItemIndex ( this . getIndexByItemData ( value as TItem ) ) ;
117- }
118-
119- getIndex ( value : number | Element | TItem ) : CollectionItemIndex {
120113 if ( this . _isNormalizedItemIndex ( value ) ) {
121- return this . _denormalizeItemIndex ( value as number ) ;
114+ return value ;
122115 }
123116
124117 if ( this . _isItemIndex ( value ) ) {
125- return value as number ;
118+ return this . _normalizeItemIndex ( value ) ;
126119 }
127120
121+ return this . _normalizeItemIndex ( this . getIndexByItemData ( value ) ) ;
122+ }
123+
124+ getIndex ( value : CollectionItemIndex | Element | TItem ) : CollectionItemIndex {
128125 if ( this . _isNode ( value ) ) {
129126 return this . _denormalizeItemIndex ( this . _getNormalizedItemIndex ( value ) ) ;
130127 }
131128
132- return this . getIndexByItemData ( value as TItem ) ;
133- }
134-
135- getItemElement ( value : Element | number | TItem ) : dxElementWrapper {
136129 if ( this . _isNormalizedItemIndex ( value ) ) {
137- return this . _getItemByNormalizedIndex ( value as number ) ;
130+ return this . _denormalizeItemIndex ( value ) ;
138131 }
139132
140133 if ( this . _isItemIndex ( value ) ) {
141- return this . _getItemByNormalizedIndex ( this . _normalizeItemIndex ( value as number ) ) ;
134+ return value ;
142135 }
143136
137+ return this . getIndexByItemData ( value ) ;
138+ }
139+
140+ getItemElement (
141+ value : Element | dxElementWrapper | CollectionItemIndex | TItem ,
142+ ) : dxElementWrapper {
144143 if ( this . _isNode ( value ) ) {
145144 return $ ( value ) ;
146145 }
147146
148- const normalizedItemIndex = this . _normalizeItemIndex ( this . getIndexByItemData ( value as TItem ) ) ;
147+ if ( this . _isNormalizedItemIndex ( value ) ) {
148+ return this . _getItemByNormalizedIndex ( value ) ;
149+ }
150+
151+ if ( this . _isItemIndex ( value ) ) {
152+ return this . _getItemByNormalizedIndex ( this . _normalizeItemIndex ( value ) ) ;
153+ }
154+
155+ const normalizedItemIndex = this . _normalizeItemIndex ( this . getIndexByItemData ( value ) ) ;
149156 return this . _getItemByNormalizedIndex ( normalizedItemIndex ) ;
150157 }
151158
152- _isNode ( el : unknown ) : el is Element {
159+ _isNode (
160+ el : CollectionItemIndex | TItem | Element | dxElementWrapper ,
161+ ) : el is Element | dxElementWrapper {
153162 return domAdapter . isNode ( el && isRenderer ( el ) ? ( el as dxElementWrapper ) . get ( 0 ) : el ) ;
154163 }
155164
@@ -167,34 +176,37 @@ class EditStrategy<
167176 return Class . abstract ( ) ;
168177 }
169178
170- _isNormalizedItemIndex ( index : number | Element | TItem ) : boolean {
179+ _isNormalizedItemIndex (
180+ index : CollectionItemIndex | TItem ,
181+ ) : index is number {
171182 return ( typeof index === 'number' ) && Math . round ( index ) === index ;
172183 }
173184
174- // eslint-disable-next-line @typescript-eslint/no-unused-vars
175- _isItemIndex ( index : number | Element | TItem ) : boolean {
185+ _isItemIndex (
186+ index : CollectionItemIndex | TItem ,
187+ ) : index is CollectionItemIndex {
176188 return Class . abstract ( ) ;
177189 }
178190
179191 _getNormalizedItemIndex (
180192 // eslint-disable-next-line @typescript-eslint/no-unused-vars
181- value : Element ,
193+ value : Element | dxElementWrapper ,
182194 ) : number {
183195 return Class . abstract ( ) ;
184196 }
185197
186198 // eslint-disable-next-line @typescript-eslint/no-unused-vars
187- _normalizeItemIndex ( index : number ) : number {
199+ _normalizeItemIndex ( index : CollectionItemIndex ) : number {
188200 return Class . abstract ( ) ;
189201 }
190202
191203 // eslint-disable-next-line @typescript-eslint/no-unused-vars
192- _denormalizeItemIndex ( index : number ) : CollectionItemIndex {
204+ _denormalizeItemIndex ( index : CollectionItemIndex ) : CollectionItemIndex {
193205 return Class . abstract ( ) ;
194206 }
195207
196208 // eslint-disable-next-line @typescript-eslint/no-unused-vars
197- _getItemByNormalizedIndex ( index : number ) : dxElementWrapper {
209+ _getItemByNormalizedIndex ( index : CollectionItemIndex ) : dxElementWrapper {
198210 return Class . abstract ( ) ;
199211 }
200212
0 commit comments