diff --git a/src/components/tables/InstancesTable.vue b/src/components/tables/InstancesTable.vue index accbd81..a7e7ed7 100644 --- a/src/components/tables/InstancesTable.vue +++ b/src/components/tables/InstancesTable.vue @@ -166,13 +166,19 @@ class="q-ml-sm" flat dense - :disable="props.row.enabled" + :disable=" + props.row.enabled || props.row.hasActiveFiatSubscription + " > Destroy: you can only destroy a disabled instance. Please disable it first. + + Please end the subscription from /subscriptions for this + instance first + Destroy: destroying will delete your instance and every bit of data. i.id === id)?.enabled) { + const instance = this.data.find(i => i.id === id) + + if (instance?.enabled) { return this.q.notify({ message: 'You can only destroy a disabled instance. Please disable it first.', color: 'warning' }) } + if (instance?.hasActiveFiatSubscription) { + return this.q.notify({ + message: + 'Please end the subscription from /subscriptions for this instance first', + color: 'warning' + }) + } this.confirm( `Destroy ${id}`, 'Are you sure you want to destroy?' + @@ -2470,12 +2485,37 @@ export default defineComponent({ return false } }, + getActiveFiatSubscriptionInstanceIds(subscriptions = []) { + return new Set( + subscriptions + .filter(subscription => { + if (!subscription) { + return false + } + + if (+subscription.ended_at) { + return false + } + + return true + }) + .map(subscription => `${subscription.instance_id}`) + ) + }, refreshState: async function () { try { - const {data} = await saas.getInstances() + const [{data: instancesData}, {data: subscriptionsData}] = + await Promise.all([saas.getInstances(), saas.getUserSubscriptions()]) await this.serverStatus() - const tableData = (data || []).map(i => saas.mapInstance(i)) + const activeFiatSubscriptionInstanceIds = + this.getActiveFiatSubscriptionInstanceIds(subscriptionsData || []) + const tableData = (instancesData || []).map(i => ({ + ...saas.mapInstance(i), + hasActiveFiatSubscription: activeFiatSubscriptionInstanceIds.has( + `${i.id}` + ) + })) this.activityStats[0].value = tableData.length this.activityStats[1].value = tableData.filter(