runs: add fetch more button and related logic
This commit is contained in:
parent
7f90c73650
commit
5d6f6b8290
|
@ -1,8 +1,8 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="item-list">
|
|
||||||
<div v-if="runs.length > 0">
|
<div v-if="runs.length > 0">
|
||||||
<div class="item" v-for="run in runs" v-bind:key="run.id" :class="runResultClass(run)">
|
<div class="item-list">
|
||||||
|
<div v-for="run in runs" v-bind:key="run.id" :class="runResultClass(run)">
|
||||||
<div class="item-content">
|
<div class="item-content">
|
||||||
<router-link
|
<router-link
|
||||||
v-if="username"
|
v-if="username"
|
||||||
|
@ -61,9 +61,16 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="item-list">No runs</div>
|
<div class="has-text-centered">
|
||||||
|
<button
|
||||||
|
v-if="hasMoreRuns"
|
||||||
|
class="button is-primary is-outlined is-fullwidth load-more-button"
|
||||||
|
@click="loadMoreRuns()"
|
||||||
|
>Load more...</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else class="item-list">No runs</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -83,6 +90,8 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
runs: [],
|
runs: [],
|
||||||
|
wantedRunsNumber: 25,
|
||||||
|
hasMoreRuns: false,
|
||||||
polling: null,
|
polling: null,
|
||||||
project: null,
|
project: null,
|
||||||
user: null
|
user: null
|
||||||
|
@ -151,6 +160,11 @@ export default {
|
||||||
|
|
||||||
this.fetchRuns();
|
this.fetchRuns();
|
||||||
},
|
},
|
||||||
|
loadMoreRuns() {
|
||||||
|
this.wantedRunsNumber += 25;
|
||||||
|
this.fetchRuns();
|
||||||
|
},
|
||||||
|
// TODO(sgotti) use run events instead of refetching all runs everytime
|
||||||
async fetchRuns() {
|
async fetchRuns() {
|
||||||
let group;
|
let group;
|
||||||
let lastrun = false;
|
let lastrun = false;
|
||||||
|
@ -171,12 +185,29 @@ export default {
|
||||||
group = "/user/" + this.user.id;
|
group = "/user/" + this.user.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
let { data, error } = await fetchRuns(group, lastrun);
|
let newRuns = [];
|
||||||
|
let hasMoreRuns = false;
|
||||||
|
let stopFetch = false;
|
||||||
|
let runCount = 0;
|
||||||
|
let startRunID = null;
|
||||||
|
while (!stopFetch) {
|
||||||
|
let { data, error } = await fetchRuns(group, startRunID, lastrun);
|
||||||
if (error) {
|
if (error) {
|
||||||
this.$store.dispatch("setError", error);
|
this.$store.dispatch("setError", error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.runs = data;
|
runCount += data.length;
|
||||||
|
if (runCount >= this.wantedRunsNumber || data.length == 0) {
|
||||||
|
hasMoreRuns = data.length != 0;
|
||||||
|
stopFetch = true;
|
||||||
|
}
|
||||||
|
newRuns = newRuns.concat(data);
|
||||||
|
if (newRuns.length) {
|
||||||
|
startRunID = newRuns[newRuns.length - 1].id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.runs = newRuns;
|
||||||
|
this.hasMoreRuns = hasMoreRuns;
|
||||||
},
|
},
|
||||||
pollData() {
|
pollData() {
|
||||||
clearInterval(this.polling);
|
clearInterval(this.polling);
|
||||||
|
@ -210,9 +241,6 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-list {
|
.item-list {
|
||||||
.item {
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-content {
|
.item-content {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
border: 1px solid $grey-lighter;
|
border: 1px solid $grey-lighter;
|
||||||
|
@ -277,4 +305,9 @@ export default {
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.load-more-button {
|
||||||
|
margin-top: 1rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -50,7 +50,8 @@ export async function fetchOrgMembers(orgref) {
|
||||||
let path = "/orgs/" + orgref + "/members"
|
let path = "/orgs/" + orgref + "/members"
|
||||||
return await fetch(apiurl(path));
|
return await fetch(apiurl(path));
|
||||||
}
|
}
|
||||||
export async function fetchRuns(group, lastrun) {
|
|
||||||
|
export async function fetchRuns(group, startRunID, lastrun) {
|
||||||
let u = apiurl("/runs");
|
let u = apiurl("/runs");
|
||||||
if (group) {
|
if (group) {
|
||||||
u.searchParams.append("group", group)
|
u.searchParams.append("group", group)
|
||||||
|
@ -58,6 +59,9 @@ export async function fetchRuns(group, lastrun) {
|
||||||
if (lastrun) {
|
if (lastrun) {
|
||||||
u.searchParams.append("lastrun", true)
|
u.searchParams.append("lastrun", true)
|
||||||
}
|
}
|
||||||
|
if (startRunID) {
|
||||||
|
u.searchParams.append("start", startRunID)
|
||||||
|
}
|
||||||
return await fetch(u)
|
return await fetch(u)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue