summaryrefslogtreecommitdiffstats
path: root/client/components/lists
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>2019-03-26 16:20:59 +0100
committerBenjamin Tissoires <benjamin.tissoires@redhat.com>2019-03-26 16:27:52 +0100
commitcbb6c82113782c1ef235668ffb3c708431f6b400 (patch)
treec206fb449e978be36e4288d65439a49bfa36f305 /client/components/lists
parent00376b43f82b1b751974e827931373595c40c0f7 (diff)
downloadwekan-cbb6c82113782c1ef235668ffb3c708431f6b400.tar.gz
wekan-cbb6c82113782c1ef235668ffb3c708431f6b400.tar.bz2
wekan-cbb6c82113782c1ef235668ffb3c708431f6b400.zip
list: move the spinner into its own blaze component
This way, when a list is at the maximum number of cards shown and adding a new card would make the spinner appear, the list would load the next N items. This can happen if user A and B are both looking at the same board, B adds a new cards, and A will see the spinner and will not be able to remove it.
Diffstat (limited to 'client/components/lists')
-rw-r--r--client/components/lists/listBody.jade19
-rw-r--r--client/components/lists/listBody.js65
2 files changed, 47 insertions, 37 deletions
diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade
index 876b43d6..61fec93a 100644
--- a/client/components/lists/listBody.jade
+++ b/client/components/lists/listBody.jade
@@ -13,14 +13,7 @@ template(name="listBody")
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
+minicard(this)
if (showSpinner (idOrNull ../../_id))
- .sk-spinner.sk-spinner-wave.sk-spinner-list(
- class=currentBoard.colorClass
- id="showMoreResults")
- .sk-rect1
- .sk-rect2
- .sk-rect3
- .sk-rect4
- .sk-rect5
+ +spinnerList
if canSeeAddCard
+inlinedForm(autoclose=false position="bottom")
@@ -30,6 +23,16 @@ template(name="listBody")
i.fa.fa-plus
| {{_ 'add-card'}}
+template(name="spinnerList")
+ .sk-spinner.sk-spinner-wave.sk-spinner-list(
+ class=currentBoard.colorClass
+ id="showMoreResults")
+ .sk-rect1
+ .sk-rect2
+ .sk-rect3
+ .sk-rect4
+ .sk-rect5
+
template(name="addCardForm")
.minicard.minicard-composer.js-composer
if getLabels
diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js
index d6a62cc9..2e6591e2 100644
--- a/client/components/lists/listBody.js
+++ b/client/components/lists/listBody.js
@@ -5,35 +5,6 @@ BlazeComponent.extendComponent({
onCreated() {
// for infinite scrolling
this.cardlimit = new ReactiveVar(InfiniteScrollIter);
- this.spinnerShown = false;
- },
-
- 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,
- };
-
- const observer = new IntersectionObserver((entries) => {
- entries.forEach((entry) => {
- this.spinnerShown = entry.isIntersecting;
- this.updateList();
- });
- }, options);
-
- observer.observe(spinner);
- }
- },
-
- updateList() {
- if (this.spinnerShown) {
- this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
- window.requestIdleCallback(() => this.updateList());
- }
},
mixins() {
@@ -641,3 +612,39 @@ BlazeComponent.extendComponent({
}];
},
}).register('searchElementPopup');
+
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.spinnerShown = false;
+ this.cardlimit = this.parentComponent().cardlimit;
+ },
+
+ 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,
+ };
+
+ const observer = new IntersectionObserver((entries) => {
+ entries.forEach((entry) => {
+ this.spinnerShown = entry.isIntersecting;
+ this.updateList();
+ });
+ }, options);
+
+ observer.observe(spinner);
+ }
+ },
+
+ updateList() {
+ if (this.spinnerShown) {
+ this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
+ window.requestIdleCallback(() => this.updateList());
+ }
+ },
+
+}).register('spinnerList');