diff --git a/.gitignore b/.gitignore index 3e400ba39..6eddbcb53 100644 --- a/.gitignore +++ b/.gitignore @@ -96,3 +96,5 @@ vitest.config.*.timestamp* # Weekly docs check output /output.txt + +.amp \ No newline at end of file diff --git a/src/components/actionbar/ComfyRunButton/CloudRunButtonWrapper.vue b/src/components/actionbar/ComfyRunButton/CloudRunButtonWrapper.vue index c0cda19bf..6aa543eec 100644 --- a/src/components/actionbar/ComfyRunButton/CloudRunButtonWrapper.vue +++ b/src/components/actionbar/ComfyRunButton/CloudRunButtonWrapper.vue @@ -8,10 +8,10 @@ import { computed } from 'vue' import ComfyQueueButton from '@/components/actionbar/ComfyRunButton/ComfyQueueButton.vue' +import { useBillingContext } from '@/composables/billing/useBillingContext' import SubscribeToRunButton from '@/platform/cloud/subscription/components/SubscribeToRun.vue' -import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription' -const { isActiveSubscription } = useSubscription() +const { isActiveSubscription } = useBillingContext() const currentButton = computed(() => isActiveSubscription.value ? ComfyQueueButton : SubscribeToRunButton diff --git a/src/components/dialog/content/TopUpCreditsDialogContent.vue b/src/components/dialog/content/TopUpCreditsDialogContentLegacy.vue similarity index 95% rename from src/components/dialog/content/TopUpCreditsDialogContent.vue rename to src/components/dialog/content/TopUpCreditsDialogContentLegacy.vue index 51c29aaf5..03640fbfa 100644 --- a/src/components/dialog/content/TopUpCreditsDialogContent.vue +++ b/src/components/dialog/content/TopUpCreditsDialogContentLegacy.vue @@ -158,6 +158,7 @@ import Button from '@/components/ui/button/Button.vue' import FormattedNumberStepper from '@/components/ui/stepper/FormattedNumberStepper.vue' import { useFirebaseAuthActions } from '@/composables/auth/useFirebaseAuthActions' import { useExternalLink } from '@/composables/useExternalLink' +import { useFeatureFlags } from '@/composables/useFeatureFlags' import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription' import { useTelemetry } from '@/platform/telemetry' import { clearTopupTracking } from '@/platform/telemetry/topupTracker' @@ -176,8 +177,9 @@ const dialogService = useDialogService() const telemetry = useTelemetry() const toast = useToast() const { buildDocsUrl, docsPaths } = useExternalLink() -const { isSubscriptionEnabled } = useSubscription() +const { flags } = useFeatureFlags() +const { isSubscriptionEnabled } = useSubscription() // Constants const PRESET_AMOUNTS = [10, 25, 50, 100] const MIN_AMOUNT = 5 @@ -256,9 +258,15 @@ async function handleBuy() { // Close top-up dialog (keep tracking) and open credits panel to show updated balance handleClose(false) - dialogService.showSettingsDialog( - isSubscriptionEnabled() ? 'subscription' : 'credits' - ) + + // In workspace mode (personal workspace), show workspace settings panel + // Otherwise, show legacy subscription/credits panel + const settingsPanel = flags.teamWorkspacesEnabled + ? 'workspace' + : isSubscriptionEnabled() + ? 'subscription' + : 'credits' + dialogService.showSettingsDialog(settingsPanel) } catch (error) { console.error('Purchase failed:', error) diff --git a/src/components/dialog/content/TopUpCreditsDialogContentWorkspace.vue b/src/components/dialog/content/TopUpCreditsDialogContentWorkspace.vue new file mode 100644 index 000000000..1f076abe0 --- /dev/null +++ b/src/components/dialog/content/TopUpCreditsDialogContentWorkspace.vue @@ -0,0 +1,295 @@ + + + diff --git a/src/components/dialog/content/setting/LegacyCreditsPanel.vue b/src/components/dialog/content/setting/LegacyCreditsPanel.vue index c85fc4b37..69993384b 100644 --- a/src/components/dialog/content/setting/LegacyCreditsPanel.vue +++ b/src/components/dialog/content/setting/LegacyCreditsPanel.vue @@ -116,9 +116,9 @@ import { computed, ref, watch } from 'vue' import UserCredit from '@/components/common/UserCredit.vue' import UsageLogsTable from '@/components/dialog/content/setting/UsageLogsTable.vue' import Button from '@/components/ui/button/Button.vue' +import { useBillingContext } from '@/composables/billing/useBillingContext' import { useFirebaseAuthActions } from '@/composables/auth/useFirebaseAuthActions' import { useExternalLink } from '@/composables/useExternalLink' -import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription' import { useTelemetry } from '@/platform/telemetry' import { useDialogService } from '@/services/dialogService' import { useCommandStore } from '@/stores/commandStore' @@ -138,7 +138,7 @@ const authStore = useFirebaseAuthStore() const authActions = useFirebaseAuthActions() const commandStore = useCommandStore() const telemetry = useTelemetry() -const { isActiveSubscription } = useSubscription() +const { isActiveSubscription } = useBillingContext() const loading = computed(() => authStore.loading) const balanceLoading = computed(() => authStore.isFetchingBalance) diff --git a/src/components/dialog/content/subscription/CancelSubscriptionDialogContent.vue b/src/components/dialog/content/subscription/CancelSubscriptionDialogContent.vue new file mode 100644 index 000000000..f67c26d5e --- /dev/null +++ b/src/components/dialog/content/subscription/CancelSubscriptionDialogContent.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/components/dialog/header/SettingDialogHeader.vue b/src/components/dialog/header/SettingDialogHeader.vue index 959cfa14d..3c098430e 100644 --- a/src/components/dialog/header/SettingDialogHeader.vue +++ b/src/components/dialog/header/SettingDialogHeader.vue @@ -1,6 +1,6 @@