|
@@ -615,40 +615,50 @@ BlazeComponent.extendComponent({
|
|
|
|
|
|
BlazeComponent.extendComponent({
|
|
BlazeComponent.extendComponent({
|
|
onCreated() {
|
|
onCreated() {
|
|
- this.spinnerShown = false;
|
|
|
|
this.cardlimit = this.parentComponent().cardlimit;
|
|
this.cardlimit = this.parentComponent().cardlimit;
|
|
|
|
+
|
|
|
|
+ this.listId = this.parentComponent().data()._id;
|
|
|
|
+ this.swimlaneId = '';
|
|
|
|
+
|
|
|
|
+ const boardView = Meteor.user().profile.boardView;
|
|
|
|
+ if (boardView === 'board-view-swimlanes')
|
|
|
|
+ this.swimlaneId = this.parentComponent().parentComponent().parentComponent().data()._id;
|
|
},
|
|
},
|
|
|
|
|
|
onRendered() {
|
|
onRendered() {
|
|
- const spinner = this.find('.sk-spinner-list');
|
|
|
|
-
|
|
|
|
- if (spinner) {
|
|
|
|
- const options = {
|
|
|
|
- root: null, // we check if the spinner is on the current viewport
|
|
|
|
- rootMargin: '0px',
|
|
|
|
- threshold: 0.25,
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- this.observer = new IntersectionObserver((entries) => {
|
|
|
|
- entries.forEach((entry) => {
|
|
|
|
- this.spinnerShown = entry.isIntersecting;
|
|
|
|
- this.updateList();
|
|
|
|
- });
|
|
|
|
- }, options);
|
|
|
|
|
|
+ this.spinner = this.find('.sk-spinner-list');
|
|
|
|
+ this.container = this.$(this.spinner).parents('.js-perfect-scrollbar')[0];
|
|
|
|
|
|
- this.observer.observe(spinner);
|
|
|
|
- }
|
|
|
|
|
|
+ $(this.container).on(`scroll.spinner_${this.swimlaneId}_${this.listId}`, () => this.updateList());
|
|
|
|
+ $(window).on(`resize.spinner_${this.swimlaneId}_${this.listId}`, () => this.updateList());
|
|
|
|
+
|
|
|
|
+ this.updateList();
|
|
},
|
|
},
|
|
|
|
|
|
onDestroyed() {
|
|
onDestroyed() {
|
|
- this.observer.disconnect();
|
|
|
|
|
|
+ $(this.container).off(`scroll.spinner_${this.swimlaneId}_${this.listId}`);
|
|
|
|
+ $(window).off(`resize.spinner_${this.swimlaneId}_${this.listId}`);
|
|
},
|
|
},
|
|
|
|
|
|
updateList() {
|
|
updateList() {
|
|
- if (this.spinnerShown) {
|
|
|
|
|
|
+ if (this.spinnerInView()) {
|
|
this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
|
|
this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
|
|
window.requestIdleCallback(() => this.updateList());
|
|
window.requestIdleCallback(() => this.updateList());
|
|
}
|
|
}
|
|
},
|
|
},
|
|
|
|
|
|
|
|
+ spinnerInView() {
|
|
|
|
+ const parentViewHeight = this.container.clientHeight;
|
|
|
|
+ const bottomViewPosition = this.container.scrollTop + parentViewHeight;
|
|
|
|
+
|
|
|
|
+ const threshold = this.spinner.offsetTop;
|
|
|
|
+
|
|
|
|
+ // spinner deleted
|
|
|
|
+ if (!this.spinner.offsetTop) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return bottomViewPosition > threshold;
|
|
|
|
+ },
|
|
|
|
+
|
|
}).register('spinnerList');
|
|
}).register('spinnerList');
|