Skip to content

Commit f8db217

Browse files
committed
Version bump
1 parent 69d1530 commit f8db217

File tree

5 files changed

+71
-37
lines changed

5 files changed

+71
-37
lines changed

dist/vue-virtual-scroller.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-virtual-scroller.esm.js

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,10 @@ var Scroller = {
332332
} else {
333333
scrollTop = index * this.itemHeight;
334334
}
335-
this.$el.scrollTop = scrollTop;
335+
this.scrollToPosition(scrollTop);
336+
},
337+
scrollToPosition: function scrollToPosition(position) {
338+
this.$el.scrollTop = position;
336339
}
337340
}
338341
};
@@ -341,11 +344,11 @@ var VirtualScroller = { render: function render() {
341344
var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c(_vm.mainTag, { directives: [{ name: "observe-visibility", rawName: "v-observe-visibility", value: _vm.handleVisibilityChange, expression: "handleVisibilityChange" }], tag: "component", staticClass: "virtual-scroller", class: _vm.cssClass, on: { "&scroll": function scroll($event) {
342345
_vm.handleScroll($event);
343346
} } }, [_vm._t("before-container"), _vm._v(" "), _c(_vm.containerTag, { ref: "itemContainer", tag: "component", staticClass: "item-container", class: _vm.containerClass, style: _vm.itemContainerStyle }, [_vm._t("before-content"), _vm._v(" "), _c(_vm.contentTag, { ref: "items", tag: "component", staticClass: "items", class: _vm.contentClass, style: _vm.itemsStyle }, [_vm.renderers ? _vm._l(_vm.visibleItems, function (item, index) {
344-
return _c(_vm.renderers[item[_vm.typeField]], { key: _vm.keysEnabled && item[_vm.keyField] || undefined, tag: "component", staticClass: "item", attrs: { "item": item, "item-index": _vm._startIndex + index } });
347+
return _c(_vm.renderers[item[_vm.typeField]], { key: _vm.keysEnabled && item[_vm.keyField] || undefined, tag: "component", staticClass: "item", attrs: { "item": item, "item-index": _vm.$_startIndex + index } });
345348
}) : [_vm._l(_vm.visibleItems, function (item, index) {
346-
return _vm._t("default", null, { item: item, itemIndex: _vm._startIndex + index, itemKey: _vm.keysEnabled && item[_vm.keyField] || undefined });
349+
return _vm._t("default", null, { item: item, itemIndex: _vm.$_startIndex + index, itemKey: _vm.keysEnabled && item[_vm.keyField] || undefined });
347350
})]], 2), _vm._v(" "), _vm._t("after-content")], 2), _vm._v(" "), _vm._t("after-container"), _vm._v(" "), _c('resize-observer', { on: { "notify": _vm.handleResize } })], 2);
348-
}, staticRenderFns: [], _scopeId: 'data-v-727d6836',
351+
}, staticRenderFns: [], _scopeId: 'data-v-2b1f2e05',
349352
name: 'virtual-scroller',
350353

351354
mixins: [Scroller],
@@ -601,7 +604,7 @@ var RecycleList = { render: function render() {
601604
} } }, [_c('div', { ref: "wrapper", staticClass: "item-wrapper", style: { height: _vm.totalHeight + 'px' } }, _vm._l(_vm.pool, function (view) {
602605
return _c('div', { key: view.nr.id, staticClass: "item-view", style: { transform: 'translateY(' + view.top + 'px)' } }, [_vm._t("default", null, { item: view.item, index: view.nr.index, active: view.nr.used })], 2);
603606
})), _vm._v(" "), _vm._t("after-container"), _vm._v(" "), _c('resize-observer', { on: { "notify": _vm.handleResize } })], 2);
604-
}, staticRenderFns: [], _scopeId: 'data-v-68940351',
607+
}, staticRenderFns: [], _scopeId: 'data-v-2277f571',
605608
name: 'RecycleList',
606609

607610
mixins: [Scroller],
@@ -610,6 +613,10 @@ var RecycleList = { render: function render() {
610613
itemHeight: {
611614
type: Number,
612615
default: null
616+
},
617+
keyField: {
618+
type: String,
619+
default: null
613620
}
614621
},
615622

@@ -671,28 +678,30 @@ var RecycleList = { render: function render() {
671678

672679

673680
methods: {
674-
addView: function addView(index, item) {
681+
addView: function addView(pool, index, item, key, type) {
675682
var view = {
676683
item: item,
677684
top: 0
678685
};
679686
var nonReactive = {
680687
id: uid++,
681688
index: index,
682-
used: true
689+
used: true,
690+
key: key,
691+
type: type
683692
};
684693
Object.defineProperty(view, 'nr', {
685694
configurable: false,
686695
value: nonReactive
687696
});
688-
this.pool.push(view);
697+
pool.push(view);
689698
return view;
690699
},
691700
unuseView: function unuseView(view) {
692701
var fake = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
693702

694703
var unusedViews = this.$_unusedViews;
695-
var type = view.item[this.typeField];
704+
var type = view.nr.type;
696705
var unusedPool = unusedViews.get(type);
697706
if (!unusedPool) {
698707
unusedPool = [];
@@ -702,7 +711,7 @@ var RecycleList = { render: function render() {
702711
if (!fake) {
703712
view.nr.used = false;
704713
view.top = -9999;
705-
this.$_views.delete(view.item);
714+
this.$_views.delete(view.nr.key);
706715
}
707716
},
708717
handleResize: function handleResize() {
@@ -757,6 +766,7 @@ var RecycleList = { render: function render() {
757766

758767
var itemHeight = this.itemHeight;
759768
var typeField = this.typeField;
769+
var keyField = this.keyField;
760770
var items = this.items;
761771
var count = items.length;
762772
var heights = this.heights;
@@ -821,7 +831,7 @@ var RecycleList = { render: function render() {
821831

822832
var view = void 0;
823833

824-
var continuous = startIndex < this.$_endIndex && endIndex > this.$_startIndex;
834+
var continuous = startIndex <= this.$_endIndex && endIndex >= this.$_startIndex;
825835
var unusedIndex = void 0;
826836

827837
if (this.$_continuous !== continuous) {
@@ -839,7 +849,9 @@ var RecycleList = { render: function render() {
839849
view = pool[_i2];
840850
if (view.nr.used) {
841851
// Update view item index
842-
if (checkItem) view.nr.index = items.indexOf(view.item);
852+
if (checkItem) view.nr.index = items.findIndex(function (item) {
853+
return keyField ? item[keyField] == view.item[keyField] : item === view.item;
854+
});
843855

844856
// Check if index is still in visible range
845857
if (view.nr.index === -1 || view.nr.index < startIndex || view.nr.index > endIndex) {
@@ -859,7 +871,8 @@ var RecycleList = { render: function render() {
859871
var v = void 0;
860872
for (var _i3 = startIndex; _i3 < endIndex; _i3++) {
861873
item = items[_i3];
862-
view = views.get(item);
874+
var key = keyField ? item[keyField] : item;
875+
view = views.get(key);
863876

864877
if (!itemHeight && !heights[_i3].height) {
865878
if (view) this.unuseView(view);
@@ -878,8 +891,10 @@ var RecycleList = { render: function render() {
878891
view.item = item;
879892
view.nr.used = true;
880893
view.nr.index = _i3;
894+
view.nr.key = key;
895+
view.nr.type = type;
881896
} else {
882-
view = this.addView(_i3, item, type);
897+
view = this.addView(pool, _i3, item, key, type);
883898
}
884899
} else {
885900
unusedPool = unusedViews.get(type);
@@ -892,14 +907,16 @@ var RecycleList = { render: function render() {
892907
view.item = item;
893908
view.nr.used = true;
894909
view.nr.index = _i3;
910+
view.nr.key = key;
911+
view.nr.type = type;
895912
unusedIndex.set(type, v + 1);
896913
} else {
897-
view = this.addView(_i3, item, type);
914+
view = this.addView(pool, _i3, item, key, type);
898915
this.unuseView(view, true);
899916
}
900917
v++;
901918
}
902-
views.set(item, view);
919+
views.set(key, view);
903920
} else {
904921
view.nr.used = true;
905922
}
@@ -931,7 +948,7 @@ function registerComponents(Vue, prefix) {
931948

932949
var plugin$4 = {
933950
// eslint-disable-next-line no-undef
934-
version: "0.11.5",
951+
version: "0.11.7",
935952
install: function install(Vue, options) {
936953
var finalOptions = Object.assign({}, {
937954
installComponents: true,

0 commit comments

Comments
 (0)