Skip to content

Commit c8e2419

Browse files
Cloud/gate topup on subscription (#6399)
## Summary Gate the Top up buttons in the user dropdown and credits page of the settings. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6399-Cloud-gate-topup-on-subscription-29c6d73d36508127866cdcbcfda66c46) by [Unito](https://www.unito.io) --------- Co-authored-by: DrJKL <[email protected]>
1 parent 6fc5748 commit c8e2419

File tree

4 files changed

+18
-4
lines changed

4 files changed

+18
-4
lines changed

src/components/dialog/content/setting/CreditsPanel.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<UserCredit text-class="text-3xl font-bold" />
1616
<Skeleton v-if="loading" width="2rem" height="2rem" />
1717
<Button
18-
v-else
18+
v-else-if="isActiveSubscription"
1919
:label="$t('credits.purchaseCredits')"
2020
:loading="loading"
2121
@click="handlePurchaseCreditsClick"
@@ -123,6 +123,7 @@ import { computed, ref, watch } from 'vue'
123123
import UserCredit from '@/components/common/UserCredit.vue'
124124
import UsageLogsTable from '@/components/dialog/content/setting/UsageLogsTable.vue'
125125
import { useFirebaseAuthActions } from '@/composables/auth/useFirebaseAuthActions'
126+
import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription'
126127
import { useDialogService } from '@/services/dialogService'
127128
import { useCommandStore } from '@/stores/commandStore'
128129
import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore'
@@ -139,6 +140,7 @@ const dialogService = useDialogService()
139140
const authStore = useFirebaseAuthStore()
140141
const authActions = useFirebaseAuthActions()
141142
const commandStore = useCommandStore()
143+
const { isActiveSubscription } = useSubscription()
142144
const loading = computed(() => authStore.loading)
143145
const balanceLoading = computed(() => authStore.isFetchingBalance)
144146

src/composables/auth/useFirebaseAuthActions.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { useErrorHandling } from '@/composables/useErrorHandling'
77
import type { ErrorRecoveryStrategy } from '@/composables/useErrorHandling'
88
import { t } from '@/i18n'
99
import { isCloud } from '@/platform/distribution/types'
10+
import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription'
1011
import { useToastStore } from '@/platform/updates/common/toastStore'
1112
import { useDialogService } from '@/services/dialogService'
1213
import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore'
@@ -82,6 +83,9 @@ export const useFirebaseAuthActions = () => {
8283
)
8384

8485
const purchaseCredits = wrapWithErrorHandlingAsync(async (amount: number) => {
86+
const { isActiveSubscription } = useSubscription()
87+
if (!isActiveSubscription.value) return
88+
8589
const response = await authStore.initiateCreditPurchase({
8690
amount_micros: usdToMicros(amount),
8791
currency: 'usd'

src/scripts/app.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import { getMp3Metadata } from '@/scripts/metadata/mp3'
4949
import { getOggMetadata } from '@/scripts/metadata/ogg'
5050
import { getSvgMetadata } from '@/scripts/metadata/svg'
5151
import { useDialogService } from '@/services/dialogService'
52+
import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription'
5253
import { useExtensionService } from '@/services/extensionService'
5354
import { useLitegraphService } from '@/services/litegraphService'
5455
import { useSubgraphService } from '@/services/subgraphService'
@@ -703,9 +704,12 @@ export class ComfyApp {
703704
'Payment Required: Please add credits to your account to use this node.'
704705
)
705706
) {
706-
useDialogService().showTopUpCreditsDialog({
707-
isInsufficientCredits: true
708-
})
707+
const { isActiveSubscription } = useSubscription()
708+
if (isActiveSubscription.value) {
709+
useDialogService().showTopUpCreditsDialog({
710+
isInsufficientCredits: true
711+
})
712+
}
709713
} else {
710714
useDialogService().showExecutionErrorDialog(detail)
711715
}

src/services/dialogService.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import ComfyOrgHeader from '@/components/dialog/header/ComfyOrgHeader.vue'
1414
import SettingDialogHeader from '@/components/dialog/header/SettingDialogHeader.vue'
1515
import { t } from '@/i18n'
1616
import { isCloud } from '@/platform/distribution/types'
17+
import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription'
1718
import SettingDialogContent from '@/platform/settings/components/SettingDialogContent.vue'
1819
import type { ExecutionErrorWsMessage } from '@/schemas/apiSchema'
1920
import { useDialogStore } from '@/stores/dialogStore'
@@ -341,6 +342,9 @@ export const useDialogService = () => {
341342
function showTopUpCreditsDialog(options?: {
342343
isInsufficientCredits?: boolean
343344
}) {
345+
const { isActiveSubscription } = useSubscription()
346+
if (!isActiveSubscription.value) return
347+
344348
return dialogStore.showDialog({
345349
key: 'top-up-credits',
346350
component: TopUpCreditsDialogContent,

0 commit comments

Comments
 (0)