1
1
/* Forked from react-virtualized 💖 */
2
- import { ALIGNMENT , ALIGN_START , ALIGN_END , ALIGN_CENTER } from './constants' ;
2
+ import { ALIGNMENT } from './constants' ;
3
3
4
4
export type ItemSizeGetter = ( index : number ) => number ;
5
5
export type ItemSize = number | number [ ] | ItemSizeGetter ;
6
6
7
7
export interface SizeAndPosition {
8
- size : number ,
9
- offset : number ,
8
+ size : number ;
9
+ offset : number ;
10
10
}
11
11
12
12
interface SizeAndPositionData {
13
- [ id : number ] : SizeAndPosition ,
13
+ [ id : number ] : SizeAndPosition ;
14
14
}
15
15
16
16
export interface Options {
17
- itemCount : number ,
18
- itemSizeGetter : ItemSizeGetter ,
19
- estimatedItemSize : number ,
17
+ itemCount : number ;
18
+ itemSizeGetter : ItemSizeGetter ;
19
+ estimatedItemSize : number ;
20
20
}
21
21
22
22
export default class SizeAndPositionManager {
@@ -26,11 +26,7 @@ export default class SizeAndPositionManager {
26
26
private lastMeasuredIndex : number ;
27
27
private itemSizeAndPositionData : SizeAndPositionData ;
28
28
29
- constructor ( {
30
- itemCount,
31
- itemSizeGetter,
32
- estimatedItemSize,
33
- } : Options ) {
29
+ constructor ( { itemCount, itemSizeGetter, estimatedItemSize} : Options ) {
34
30
this . itemSizeGetter = itemSizeGetter ;
35
31
this . itemCount = itemCount ;
36
32
this . estimatedItemSize = estimatedItemSize ;
@@ -45,7 +41,10 @@ export default class SizeAndPositionManager {
45
41
updateConfig ( {
46
42
itemCount,
47
43
estimatedItemSize,
48
- } : { itemCount : number , estimatedItemSize : number } ) {
44
+ } : {
45
+ itemCount : number ;
46
+ estimatedItemSize : number ;
47
+ } ) {
49
48
this . itemCount = itemCount ;
50
49
this . estimatedItemSize = estimatedItemSize ;
51
50
}
@@ -60,13 +59,15 @@ export default class SizeAndPositionManager {
60
59
*/
61
60
getSizeAndPositionForIndex ( index : number ) {
62
61
if ( index < 0 || index >= this . itemCount ) {
63
- throw Error ( `Requested index ${ index } is outside of range 0..${ this . itemCount } ` ) ;
62
+ throw Error (
63
+ `Requested index ${ index } is outside of range 0..${ this . itemCount } ` ,
64
+ ) ;
64
65
}
65
66
66
67
if ( index > this . lastMeasuredIndex ) {
67
68
const lastMeasuredSizeAndPosition = this . getSizeAndPositionOfLastMeasuredItem ( ) ;
68
- let offset = lastMeasuredSizeAndPosition . offset +
69
- lastMeasuredSizeAndPosition . size ;
69
+ let offset =
70
+ lastMeasuredSizeAndPosition . offset + lastMeasuredSizeAndPosition . size ;
70
71
71
72
for ( let i = this . lastMeasuredIndex + 1 ; i <= index ; i ++ ) {
72
73
const size = this . itemSizeGetter ( i ) ;
@@ -103,7 +104,11 @@ export default class SizeAndPositionManager {
103
104
getTotalSize ( ) : number {
104
105
const lastMeasuredSizeAndPosition = this . getSizeAndPositionOfLastMeasuredItem ( ) ;
105
106
106
- return lastMeasuredSizeAndPosition . offset + lastMeasuredSizeAndPosition . size + ( this . itemCount - this . lastMeasuredIndex - 1 ) * this . estimatedItemSize ;
107
+ return (
108
+ lastMeasuredSizeAndPosition . offset +
109
+ lastMeasuredSizeAndPosition . size +
110
+ ( this . itemCount - this . lastMeasuredIndex - 1 ) * this . estimatedItemSize
111
+ ) ;
107
112
}
108
113
109
114
/**
@@ -114,11 +119,16 @@ export default class SizeAndPositionManager {
114
119
* @return Offset to use to ensure the specified item is visible
115
120
*/
116
121
getUpdatedOffsetForIndex ( {
117
- align = ALIGN_START ,
122
+ align = ALIGNMENT . START ,
118
123
containerSize,
119
124
currentOffset,
120
125
targetIndex,
121
- } : { align : ALIGNMENT | undefined , containerSize : number , currentOffset : number , targetIndex : number } ) : number {
126
+ } : {
127
+ align : ALIGNMENT | undefined ;
128
+ containerSize : number ;
129
+ currentOffset : number ;
130
+ targetIndex : number ;
131
+ } ) : number {
122
132
if ( containerSize <= 0 ) {
123
133
return 0 ;
124
134
}
@@ -130,13 +140,13 @@ export default class SizeAndPositionManager {
130
140
let idealOffset ;
131
141
132
142
switch ( align ) {
133
- case ALIGN_END :
143
+ case ALIGNMENT . END :
134
144
idealOffset = minOffset ;
135
145
break ;
136
- case ALIGN_CENTER :
146
+ case ALIGNMENT . CENTER :
137
147
idealOffset = maxOffset - ( containerSize - datum . size ) / 2 ;
138
148
break ;
139
- case ALIGN_START :
149
+ case ALIGNMENT . START :
140
150
idealOffset = maxOffset ;
141
151
break ;
142
152
default :
@@ -152,7 +162,11 @@ export default class SizeAndPositionManager {
152
162
containerSize,
153
163
offset,
154
164
overscanCount,
155
- } : { containerSize : number , offset : number , overscanCount : number } ) : { start ?: number , stop ?: number } {
165
+ } : {
166
+ containerSize : number ;
167
+ offset : number ;
168
+ overscanCount : number ;
169
+ } ) : { start ?: number ; stop ?: number } {
156
170
const totalSize = this . getTotalSize ( ) ;
157
171
158
172
if ( totalSize === 0 ) {
@@ -232,7 +246,15 @@ export default class SizeAndPositionManager {
232
246
}
233
247
}
234
248
235
- private binarySearch ( { low, high, offset} : { low : number , high : number , offset : number } ) {
249
+ private binarySearch ( {
250
+ low,
251
+ high,
252
+ offset,
253
+ } : {
254
+ low : number ;
255
+ high : number ;
256
+ offset : number ;
257
+ } ) {
236
258
let middle = 0 ;
237
259
let currentOffset = 0 ;
238
260
@@ -256,7 +278,7 @@ export default class SizeAndPositionManager {
256
278
return 0 ;
257
279
}
258
280
259
- private exponentialSearch ( { index, offset} : { index : number , offset : number } ) {
281
+ private exponentialSearch ( { index, offset} : { index : number ; offset : number } ) {
260
282
let interval = 1 ;
261
283
262
284
while (
0 commit comments