From d6bdf4feff010ff6aa64fdcbe458ec52b01c20ec Mon Sep 17 00:00:00 2001 From: --list <18093452+simula-r@users.noreply.github.com> Date: Mon, 19 Jan 2026 15:30:20 -0800 Subject: [PATCH] feat: invite and members working --- .../content/setting/WorkspacePanelContent.vue | 8 +- src/components/graph/GraphCanvas.vue | 5 + .../topbar/WorkspaceSwitcherPopover.vue | 10 +- src/platform/auth/session/useSessionCookie.ts | 6 +- src/platform/workspace/api/workspaceApi.ts | 101 +++++-- .../composables/useInviteUrlLoader.test.ts | 270 +++++++++--------- .../composables/useInviteUrlLoader.ts | 105 ++++--- .../workspace/services/sessionManager.ts | 50 ++++ .../workspace/stores/workspaceStore.ts | 247 +++++++++++++++- src/router.ts | 7 - src/stores/firebaseAuthStore.ts | 29 +- 11 files changed, 605 insertions(+), 233 deletions(-) diff --git a/src/components/dialog/content/setting/WorkspacePanelContent.vue b/src/components/dialog/content/setting/WorkspacePanelContent.vue index 7ffc057ef..35ad45848 100644 --- a/src/components/dialog/content/setting/WorkspacePanelContent.vue +++ b/src/components/dialog/content/setting/WorkspacePanelContent.vue @@ -123,15 +123,11 @@ const { activeTab, setActiveTab, workspaceRole, permissions, uiConfig } = const menu = ref | null>(null) function handleLeaveWorkspace() { - showLeaveWorkspaceDialog(() => { - // TODO: Implement actual leave workspace API call - }) + showLeaveWorkspaceDialog() } function handleDeleteWorkspace() { - showDeleteWorkspaceDialog(() => { - // TODO: Implement actual delete workspace API call - }) + showDeleteWorkspaceDialog() } // Disable delete when workspace has an active subscription (to prevent accidental deletion) diff --git a/src/components/graph/GraphCanvas.vue b/src/components/graph/GraphCanvas.vue index 48d82e44b..206928cd8 100644 --- a/src/components/graph/GraphCanvas.vue +++ b/src/components/graph/GraphCanvas.vue @@ -139,6 +139,7 @@ import { useWorkflowService } from '@/platform/workflow/core/services/workflowSe import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' import { useWorkflowAutoSave } from '@/platform/workflow/persistence/composables/useWorkflowAutoSave' import { useWorkflowPersistence } from '@/platform/workflow/persistence/composables/useWorkflowPersistence' +import { useInviteUrlLoader } from '@/platform/workspace/composables/useInviteUrlLoader' import { useCanvasStore } from '@/renderer/core/canvas/canvasStore' import { useCanvasInteractions } from '@/renderer/core/canvas/useCanvasInteractions' import TransformPane from '@/renderer/core/layout/transform/TransformPane.vue' @@ -394,6 +395,7 @@ const loadCustomNodesI18n = async () => { const comfyAppReady = ref(false) const workflowPersistence = useWorkflowPersistence() +const inviteUrlLoader = useInviteUrlLoader() useCanvasDrop(canvasRef) useLitegraphSettings() useNodeBadge() @@ -459,6 +461,9 @@ onMounted(async () => { // Load template from URL if present await workflowPersistence.loadTemplateFromUrlIfPresent() + // Accept workspace invite from URL if present (e.g., ?invite=TOKEN) + await inviteUrlLoader.loadInviteFromUrl() + // Initialize release store to fetch releases from comfy-api (fire-and-forget) const { useReleaseStore } = await import('@/platform/updates/common/releaseStore') diff --git a/src/components/topbar/WorkspaceSwitcherPopover.vue b/src/components/topbar/WorkspaceSwitcherPopover.vue index 6f102d299..e6639b0d3 100644 --- a/src/components/topbar/WorkspaceSwitcherPopover.vue +++ b/src/components/topbar/WorkspaceSwitcherPopover.vue @@ -18,10 +18,7 @@