From 7a0d7d29f9447fb3a30e3a9f1f68b998baef0fe2 Mon Sep 17 00:00:00 2001 From: Michael Bauer <michael-bauer@posteo.de> Date: Wed, 27 Mar 2024 17:57:08 +0100 Subject: [PATCH] Integrate fetchMore The first working endless scroll. But update of visible is broken now. --- .../components/coursebook/Coursebook.vue | 51 ++++++++----------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue b/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue index f8aaec4ca..9936fada5 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue @@ -254,35 +254,20 @@ export default { // sorting is necessary since backend can send docs unordered }, // docsByDay: {dt: [dt doc ...] ...} - assureDate(date) { - if (!this.knownDates[date]) { - console.log(this.lastQuery); - console.log('unknown date', date.toISODate()); - console.log(this.knownDates); - // find missing & fetch missing range - const missing = this.dateRange(date) - .filter((ts) => !this.knownDates[ts]); - // ask for first to last - this.lastQuery.fetchMore({ - variables: { - dateStart: missing[0].toISODate(), - dateEnd: missing[missing.length - 1].toISODate(), - }, - // Transform the previous result with new data - updateQuery: (previousResult, { fetchMoreResult }) => { - console.log('previousResult', previousResult); - console.log('fetchMoreResult', fetchMoreResult); - return { - items: [...previousResult.items, - ...fetchMoreResult.items.filter((doc) => { - return previousResult.items.find((prev) => prev.id === doc.id) - }), - ], - }; - } - }) - // integrate into docsByDay - } + fetchMore(from, to) { + console.log('fetching', from, to); + this.lastQuery.fetchMore({ + variables: { + dateStart: from, + dateEnd: to, + }, + // Transform the previous result with new data + updateQuery: (previousResult, { fetchMoreResult }) => { + console.log('previousResult', previousResult); + console.log('fetchMoreResult', fetchMoreResult); + return { items: previousResult.items.concat(fetchMoreResult.items) }; + } + }); }, setDate(date) { this.$router.replace({ hash: date }) @@ -306,8 +291,16 @@ export default { // load more if (entry.target.dataset.first) { console.log('load up'); + entry.target.dataset.first = false; + const date = DateTime.fromISO(entry.target.dataset.date); + this.fetchMore(date.minus({ days: 4 }).toISODate(), + date.minus({ days: 1 }).toISODate()); } else if (entry.target.dataset.last) { console.log('load down'); + entry.target.dataset.last = false; + const date = DateTime.fromISO(entry.target.dataset.date); + this.fetchMore(date.plus({ days: 1 }).toISODate(), + date.plus({ days: 5 }).toISODate()); } } else if (this.visible[0] === entry.target.dataset.date) { // first (top) visible date is going -- GitLab