diff --git a/dashboard/src/views/BackupSitesView.vue b/dashboard/src/views/BackupSitesView.vue
index e680fd3de..3335d4241 100644
--- a/dashboard/src/views/BackupSitesView.vue
+++ b/dashboard/src/views/BackupSitesView.vue
@@ -5,7 +5,7 @@ const i18n = useI18n();
const t = i18n.t;
import { ref, onMounted, useTemplateRef, reactive, inject } from 'vue';
-import { Button, Menu, ProgressBar, InputDialog } from '@cloudron/pankow';
+import { Button, Menu, ProgressBar, InputDialog, Spinner } from '@cloudron/pankow';
import { prettyLongDate } from '@cloudron/pankow/utils';
import Section from '../components/Section.vue';
import StateLED from '../components/StateLED.vue';
@@ -211,6 +211,28 @@ async function onCancelTask(taskId) {
if (error) console.error('Failed to cancel task:', error);
}
+async function refreshStatusForSite(site) {
+ const [error, status] = await backupSitesModels.status(site.id);
+ if (error) return console.error(error);
+
+ site.status.state = status?.state === 'active' ? 'success' : 'danger';
+ site.status.busy = false;
+}
+
+async function refreshTaskForSite(site) {
+ const [error, tasks] = await tasksModel.getByType(TASK_TYPES.TASK_FULL_BACKUP_PREFIX + site.id);
+ if (error) return console.error(error);
+
+ if (tasks[0]) {
+ site.task = tasks[0];
+ if (site.task.active) setTimeout(waitForSiteTask.bind(null, site), 2000);
+ } else {
+ site.task = null;
+ }
+
+ site.taskLoaded = true;
+}
+
async function refresh() {
busy.value = true;
@@ -224,22 +246,12 @@ async function refresh() {
// have to make it a reactive object as we manipulate property objects
const site = reactive(result);
site.status = { busy: true, state: '', message: '' };
+ site.task = null;
+ site.taskLoaded = false;
- const [error, status] = await backupSitesModels.status(site.id);
- if (error) console.error(error);
-
- site.status.state = status?.state === 'active' ? 'success' : 'danger';
- site.status.busy = false;
-
- const [taskError, tasks] = await tasksModel.getByType(TASK_TYPES.TASK_FULL_BACKUP_PREFIX + site.id);
- if (taskError) {
- console.error(error);
- continue;
- }
-
- site.task = tasks[0] || null;
-
- if (site.task && site.task.active) setTimeout(waitForSiteTask.bind(null, site), 2000);
+ // do not wait for it
+ refreshStatusForSite(site);
+ refreshTaskForSite(site);
sitesWithDetails.push(site);
}
@@ -272,8 +284,8 @@ onMounted(async () => {