Fix state and error handling for dashboard domain

This commit is contained in:
Johannes Zellner
2025-06-12 00:54:54 +02:00
parent dbdad6fce8
commit fd1aea420e

View File

@@ -14,6 +14,8 @@ const taskModel = TasksModel.create();
const domainsModel = DomainsModel.create();
const dashboardModel = DashboardModel.create();
const formError = ref('');
const originalDomain = ref('');
const domains = ref([]);
const newDomain = ref('');
const lastTask = ref({});
@@ -62,12 +64,20 @@ async function refreshTasks() {
}
async function onSubmit() {
formError.value = '';
lastTask.value.active = true;
lastTask.value.percent = 0;
lastTask.value.message = 'Preparing dashboard domain';
const [error] = await dashboardModel.prepareDomain(newDomain.value);
if (error) return console.error(error);
if (error) {
formError.value = error.body ? error.body.message : 'Internal error';
lastTask.value = {};
return;
}
originalDomain.value = newDomain.value;
await refreshTasks();
}
@@ -82,6 +92,7 @@ onMounted(async () => {
if (error) return console.error(error);
newDomain.value = (domains.value.find(d => d.domain === result.adminDomain) || domains.value[0]).domain;
originalDomain.value = (domains.value.find(d => d.domain === result.adminDomain) || domains.value[0]).domain;
await refreshTasks();
});
@@ -94,21 +105,23 @@ onMounted(async () => {
<Button tool icon="fa-solid fa-align-left" v-tooltip="$t('domains.renewCerts.showLogsAction')" :menu="taskLogsMenu" :disabled="!taskLogsMenu.length"/>
</template>
<div v-if="lastTask.active" style="padding: 0 10px">
<ProgressBar :value="lastTask.percent" />
<div>{{ lastTask.message }}</div>
</div>
<SettingsItem wrap>
<div style="display: flex; align-items: center">
<div v-html="$t('domains.changeDashboardDomain.description')"></div>
</div>
<div style="display: flex; align-items: center">
<InputGroup>
<SingleSelect v-model="newDomain" :options="domains" option-key="domain" option-label="domain" />
<Button @click="onSubmit()" :loading="lastTask.active" :disabled="lastTask.active">{{ $t('domains.changeDashboardDomain.changeAction') }}</Button>
<SingleSelect v-model="newDomain" :disabled="lastTask.active" :options="domains" option-key="domain" option-label="domain" @select="formError = ''"/>
<Button @click="onSubmit()" :loading="lastTask.active" :disabled="lastTask.active || originalDomain === newDomain">{{ $t('domains.changeDashboardDomain.changeAction') }}</Button>
</InputGroup>
</div>
</SettingsItem>
<div class="error-label" v-if="formError">{{ formError }}</div>
<div v-if="lastTask.active" style="padding: 0 10px">
<ProgressBar :value="lastTask.percent" />
<div>{{ lastTask.message }}</div>
</div>
</Section>
</template>