Load contributions from cache if present

And then fetch more from network. Also, only load 30 from network before
first render (with nothing cached), then load more after the page has
rendered.
This commit is contained in:
2020-05-28 13:59:10 +02:00
parent 69141a31c4
commit d4b546bfcd
2 changed files with 15 additions and 5 deletions
+1
View File
@@ -27,6 +27,7 @@ export default Route.extend({
if (this.kredits.contributorsNeedFetch) { if (this.kredits.contributorsNeedFetch) {
schedule('afterRender', this.kredits, this.kredits.fetchContributors); schedule('afterRender', this.kredits, this.kredits.fetchContributors);
} }
schedule('afterRender', this.kredits, this.kredits.fetchContributions);
}); });
} }
}); });
+14 -5
View File
@@ -22,7 +22,6 @@ export default Service.extend({
browserCache: service(), browserCache: service(),
contributorsNeedFetch: false, contributorsNeedFetch: false,
contributionsNeedFetch: false,
currentBlock: null, currentBlock: null,
currentUserAccounts: null, // default to not having an account. this is the wen web3 is loaded. currentUserAccounts: null, // default to not having an account. this is the wen web3 is loaded.
@@ -186,11 +185,11 @@ export default Service.extend({
} }
const numCachedContributions = await this.browserCache.contributions.length(); const numCachedContributions = await this.browserCache.contributions.length();
// if (numCachedContributions > 0) { if (numCachedContributions > 0) {
// TODO promises.push(this.loadContributionsFromCache); await this.loadContributionsFromCache();
// } else { } else {
await this.fetchContributions({ page: { size: 30 } }); await this.fetchContributions({ page: { size: 30 } });
// } }
return Promise.resolve(); return Promise.resolve();
}, },
@@ -278,6 +277,8 @@ export default Service.extend({
return contributions.map(data => { return contributions.map(data => {
const contribution = Contribution.create(processContributionData(data)); const contribution = Contribution.create(processContributionData(data));
contribution.set('contributor', this.contributors.findBy('id', data.contributorId.toString())); contribution.set('contributor', this.contributors.findBy('id', data.contributorId.toString()));
const loadedContribution = this.contributions.findBy('id', contribution.id);
if (loadedContribution) { this.contributions.removeObject(loadedContribution); }
this.contributions.pushObject(contribution); this.contributions.pushObject(contribution);
return contribution; return contribution;
}); });
@@ -300,6 +301,14 @@ export default Service.extend({
return Promise.resolve(); return Promise.resolve();
}, },
async loadContributionsFromCache () {
return this.browserCache.contributions.iterate((value/*, key , iterationNumber */) => {
this.contributions.pushObject(Contribution.create(JSON.parse(value)));
}).then((/* result */) => {
console.debug(`[kredits] Loaded ${this.contributions.length} contributions from cache`);
});
},
veto (contributionId) { veto (contributionId) {
console.debug('[kredits] veto against', contributionId); console.debug('[kredits] veto against', contributionId);
const contribution = this.contributions.findBy('id', contributionId); const contribution = this.contributions.findBy('id', contributionId);