diff --git a/dashboard/src/views/CloudronAccountView.vue b/dashboard/src/views/CloudronAccountView.vue index 888f57486..ac7d5b4af 100644 --- a/dashboard/src/views/CloudronAccountView.vue +++ b/dashboard/src/views/CloudronAccountView.vue @@ -4,9 +4,9 @@ import { useI18n } from 'vue-i18n'; const i18n = useI18n(); const t = i18n.t; -import { ref, onMounted, useTemplateRef } from 'vue'; +import { ref, onMounted, onUnmounted, useTemplateRef } from 'vue'; import { Button, Spinner, InputDialog } from 'pankow'; -import { prettyDate } from 'pankow/utils'; +import { prettyLongDate } from 'pankow/utils'; import Section from '../components/Section.vue'; import SettingsItem from '../components/SettingsItem.vue'; import AppstoreModel from '../models/AppstoreModel.js'; @@ -27,6 +27,8 @@ const planName = ref(''); const cancelAt = ref(0); const status = ref(''); +let pollTimeoutId = 0; + async function refresh() { const [error, result] = await appstoreModel.getSubscription(); if (error) { @@ -42,7 +44,7 @@ async function refresh() { cloudronId.value = result.cloudronId; planId.value = result.plan.id; planName.value = result.plan.name; - cancelAt.value = result.cancel_at || 0; + cancelAt.value = result.cancel_at; status.value = result.status; } @@ -62,6 +64,11 @@ async function onAskResetCloudron() { await onResetCloudron(); } +async function pollSubscription() { + await refresh(); + pollTimeoutId = setInterval(refresh, 3000); +} + async function onResetCloudron() { busy.value = true; @@ -81,6 +88,12 @@ onMounted(async () => { await refresh(); busy.value = false; + + await pollSubscription(); +}); + +onUnmounted(() => { + clearInterval(pollTimeoutId); }); @@ -98,7 +111,6 @@ onMounted(async () => {
{{ $t('settings.appstoreAccount.subscriptionEndsAt') }} {{ prettyDate(cancelAt*1000) }}
- -