diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue b/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue index f8aaec4ca6e457d26a8edac466b2db388d44df91..9936fada5299b84f0f398e106d966e9f5b0b9691 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