Skip to content

Commit 2e91d7a

Browse files
author
Claudéric Demers
authored
Fix itemSizeGetter bug when scrollToIndex is defined (#56)
1 parent 29bf9c8 commit 2e91d7a

File tree

5 files changed

+55
-11
lines changed

5 files changed

+55
-11
lines changed

.eslintrc.json

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"no-param-reassign": "off",
1111
"react/no-unused-prop-types": "off",
1212
"react/jsx-filename-extension": [1, { "extensions": [".tsx"] }],
13+
"typescript/member-ordering": "off",
1314
"jest/consistent-test-it": [
1415
"error",
1516
{

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"rollup-plugin-babel": "^3.0.2",
5353
"rollup-plugin-commonjs": "^8.2.0",
5454
"rollup-plugin-node-resolve": "^3.0.0",
55+
"rollup-plugin-typescript2": "^0.15.0",
5556
"rollup-plugin-uglify": "^2.0.1",
5657
"tslint": "^5.10.0",
5758
"tslint-config-shopify": "^3.0.2",

src/SizeAndPositionManager.ts

+13-6
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,20 @@ export default class SizeAndPositionManager {
4040

4141
updateConfig({
4242
itemCount,
43+
itemSizeGetter,
4344
estimatedItemSize,
44-
}: {
45-
itemCount: number;
46-
estimatedItemSize: number;
47-
}) {
48-
this.itemCount = itemCount;
49-
this.estimatedItemSize = estimatedItemSize;
45+
}: Partial<Options>) {
46+
if (itemCount != null) {
47+
this.itemCount = itemCount;
48+
}
49+
50+
if (estimatedItemSize != null) {
51+
this.estimatedItemSize = estimatedItemSize;
52+
}
53+
54+
if (itemSizeGetter != null) {
55+
this.itemSizeGetter = itemSizeGetter;
56+
}
5057
}
5158

5259
getLastMeasuredIndex() {

src/index.tsx

+12-4
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,13 @@ export default class VirtualList extends React.PureComponent<Props, State> {
120120
width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
121121
};
122122

123+
itemSizeGetter = (itemSize: Props['itemSize']) => {
124+
return index => this.getSize(index, itemSize);
125+
};
126+
123127
sizeAndPositionManager = new SizeAndPositionManager({
124128
itemCount: this.props.itemCount,
125-
itemSizeGetter: index => this.getSize(index),
129+
itemSizeGetter: this.itemSizeGetter(this.props.itemSize),
126130
estimatedItemSize: this.getEstimatedItemSize(),
127131
});
128132

@@ -169,6 +173,12 @@ export default class VirtualList extends React.PureComponent<Props, State> {
169173
nextProps.itemSize !== itemSize ||
170174
nextProps.estimatedItemSize !== estimatedItemSize;
171175

176+
if (nextProps.itemSize !== itemSize) {
177+
this.sizeAndPositionManager.updateConfig({
178+
itemSizeGetter: this.itemSizeGetter(nextProps.itemSize),
179+
});
180+
}
181+
172182
if (
173183
nextProps.itemCount !== itemCount ||
174184
nextProps.estimatedItemSize !== estimatedItemSize
@@ -344,9 +354,7 @@ export default class VirtualList extends React.PureComponent<Props, State> {
344354
);
345355
}
346356

347-
private getSize(index: number) {
348-
const {itemSize} = this.props;
349-
357+
private getSize(index: number, itemSize) {
350358
if (typeof itemSize === 'function') {
351359
return itemSize(index);
352360
}

yarn.lock

+28-1
Original file line numberDiff line numberDiff line change
@@ -3439,6 +3439,14 @@ fs-extra@^4.0.1:
34393439
jsonfile "^3.0.0"
34403440
universalify "^0.1.0"
34413441

3442+
fs-extra@^5.0.0:
3443+
version "5.0.0"
3444+
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
3445+
dependencies:
3446+
graceful-fs "^4.1.2"
3447+
jsonfile "^4.0.0"
3448+
universalify "^0.1.0"
3449+
34423450
fs-extra@~1.0.0:
34433451
version "1.0.0"
34443452
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
@@ -4698,6 +4706,12 @@ jsonfile@^3.0.0:
46984706
optionalDependencies:
46994707
graceful-fs "^4.1.6"
47004708

4709+
jsonfile@^4.0.0:
4710+
version "4.0.0"
4711+
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
4712+
optionalDependencies:
4713+
graceful-fs "^4.1.6"
4714+
47014715
jsonify@~0.0.0:
47024716
version "0.0.0"
47034717
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
@@ -6690,7 +6704,7 @@ resolve@^1.1.6, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.4.0:
66906704
dependencies:
66916705
path-parse "^1.0.5"
66926706

6693-
resolve@^1.3.3, resolve@^1.5.0:
6707+
resolve@^1.3.3, resolve@^1.5.0, resolve@^1.7.1:
66946708
version "1.8.1"
66956709
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
66966710
dependencies:
@@ -6756,6 +6770,15 @@ rollup-plugin-node-resolve@^3.0.0:
67566770
is-module "^1.0.0"
67576771
resolve "^1.1.6"
67586772

6773+
rollup-plugin-typescript2@^0.15.0:
6774+
version "0.15.0"
6775+
resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.15.0.tgz#33cf4ec8528f6fa5686cf1246f047acec4801d3a"
6776+
dependencies:
6777+
fs-extra "^5.0.0"
6778+
resolve "^1.7.1"
6779+
rollup-pluginutils "^2.0.1"
6780+
tslib "1.9.2"
6781+
67596782
rollup-plugin-uglify@^2.0.1:
67606783
version "2.0.1"
67616784
resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz#67b37ad1efdafbd83af4c36b40c189ee4866c969"
@@ -7473,6 +7496,10 @@ trim-right@^1.0.1:
74737496
version "1.0.1"
74747497
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
74757498

7499+
7500+
version "1.9.2"
7501+
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.2.tgz#8be0cc9a1f6dc7727c38deb16c2ebd1a2892988e"
7502+
74767503
tslib@^1.7.1:
74777504
version "1.7.1"
74787505
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.7.1.tgz#bc8004164691923a79fe8378bbeb3da2017538ec"

0 commit comments

Comments
 (0)