From 239b0698c6eb5c6de8b1261a7f56a78fb6f2632f Mon Sep 17 00:00:00 2001 From: --list <18093452+simula-r@users.noreply.github.com> Date: Mon, 19 Jan 2026 18:41:23 -0800 Subject: [PATCH] refactor: debug naming and misc --- .../content/setting/MembersPanelContent.vue | 6 +- .../content/setting/WorkspacePanelContent.vue | 4 +- .../content/setting/WorkspaceSidebarItem.vue | 4 +- .../CreateWorkspaceDialogContent.vue | 4 +- .../DeleteWorkspaceDialogContent.vue | 4 +- .../workspace/EditWorkspaceDialogContent.vue | 4 +- .../workspace/InviteMemberDialogContent.vue | 4 +- .../workspace/LeaveWorkspaceDialogContent.vue | 4 +- .../workspace/RemoveMemberDialogContent.vue | 4 +- .../workspace/RevokeInviteDialogContent.vue | 4 +- src/components/topbar/CurrentUserButton.vue | 4 +- src/components/topbar/CurrentUserPopover.vue | 4 +- .../topbar/WorkspaceSwitcherPopover.vue | 4 +- .../auth/workspace/useWorkspaceSwitch.test.ts | 6 +- .../auth/workspace/useWorkspaceSwitch.ts | 4 +- src/platform/auth/workspace/workspaceTypes.ts | 6 -- .../components/SubscriptionPanelContent.vue | 4 +- src/platform/workspace/api/workspaceApi.ts | 24 +++--- .../composables/useInviteUrlLoader.ts | 23 +---- .../workspace/composables/useWorkspaceUI.ts | 4 +- ...orkspaceStore.ts => teamWorkspaceStore.ts} | 83 +------------------ src/router.ts | 6 +- 22 files changed, 53 insertions(+), 161 deletions(-) delete mode 100644 src/platform/auth/workspace/workspaceTypes.ts rename src/platform/workspace/stores/{workspaceStore.ts => teamWorkspaceStore.ts} (88%) diff --git a/src/components/dialog/content/setting/MembersPanelContent.vue b/src/components/dialog/content/setting/MembersPanelContent.vue index 9e95b97dab..0056ce2b55 100644 --- a/src/components/dialog/content/setting/MembersPanelContent.vue +++ b/src/components/dialog/content/setting/MembersPanelContent.vue @@ -324,8 +324,8 @@ import { useWorkspaceUI } from '@/platform/workspace/composables/useWorkspaceUI' import type { PendingInvite, WorkspaceMember -} from '@/platform/workspace/stores/workspaceStore' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +} from '@/platform/workspace/stores/teamWorkspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogService } from '@/services/dialogService' import { cn } from '@/utils/tailwindUtil' @@ -337,7 +337,7 @@ const { showRevokeInviteDialog, showCreateWorkspaceDialog } = useDialogService() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const { members, pendingInvites, diff --git a/src/components/dialog/content/setting/WorkspacePanelContent.vue b/src/components/dialog/content/setting/WorkspacePanelContent.vue index 35ad458481..146c6eb6c5 100644 --- a/src/components/dialog/content/setting/WorkspacePanelContent.vue +++ b/src/components/dialog/content/setting/WorkspacePanelContent.vue @@ -100,7 +100,7 @@ import MembersPanelContent from '@/components/dialog/content/setting/MembersPane import Button from '@/components/ui/button/Button.vue' import SubscriptionPanelContent from '@/platform/cloud/subscription/components/SubscriptionPanelContent.vue' import { useWorkspaceUI } from '@/platform/workspace/composables/useWorkspaceUI' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogService } from '@/services/dialogService' const { defaultTab = 'plan' } = defineProps<{ @@ -113,7 +113,7 @@ const { showDeleteWorkspaceDialog, showInviteMemberDialog } = useDialogService() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const { workspaceName, members, isInviteLimitReached, isWorkspaceSubscribed } = storeToRefs(workspaceStore) const { fetchMembers, fetchPendingInvites } = workspaceStore diff --git a/src/components/dialog/content/setting/WorkspaceSidebarItem.vue b/src/components/dialog/content/setting/WorkspaceSidebarItem.vue index 5b08998880..cab92c7a8f 100644 --- a/src/components/dialog/content/setting/WorkspaceSidebarItem.vue +++ b/src/components/dialog/content/setting/WorkspaceSidebarItem.vue @@ -13,7 +13,7 @@ import { storeToRefs } from 'pinia' import WorkspaceProfilePic from '@/components/common/WorkspaceProfilePic.vue' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' -const { workspaceName } = storeToRefs(useWorkspaceStore()) +const { workspaceName } = storeToRefs(useTeamWorkspaceStore()) diff --git a/src/components/dialog/content/workspace/CreateWorkspaceDialogContent.vue b/src/components/dialog/content/workspace/CreateWorkspaceDialogContent.vue index 0ec8ceb5df..b9444ce58c 100644 --- a/src/components/dialog/content/workspace/CreateWorkspaceDialogContent.vue +++ b/src/components/dialog/content/workspace/CreateWorkspaceDialogContent.vue @@ -63,7 +63,7 @@ import { computed, ref } from 'vue' import { useI18n } from 'vue-i18n' import Button from '@/components/ui/button/Button.vue' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogStore } from '@/stores/dialogStore' const { onConfirm } = defineProps<{ @@ -73,7 +73,7 @@ const { onConfirm } = defineProps<{ const { t } = useI18n() const dialogStore = useDialogStore() const toast = useToast() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const loading = ref(false) const workspaceName = ref('') diff --git a/src/components/dialog/content/workspace/DeleteWorkspaceDialogContent.vue b/src/components/dialog/content/workspace/DeleteWorkspaceDialogContent.vue index afb9216d08..dea2da18d9 100644 --- a/src/components/dialog/content/workspace/DeleteWorkspaceDialogContent.vue +++ b/src/components/dialog/content/workspace/DeleteWorkspaceDialogContent.vue @@ -49,7 +49,7 @@ import { ref } from 'vue' import { useI18n } from 'vue-i18n' import Button from '@/components/ui/button/Button.vue' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogStore } from '@/stores/dialogStore' const { workspaceId, workspaceName } = defineProps<{ @@ -60,7 +60,7 @@ const { workspaceId, workspaceName } = defineProps<{ const { t } = useI18n() const toast = useToast() const dialogStore = useDialogStore() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const loading = ref(false) function onCancel() { diff --git a/src/components/dialog/content/workspace/EditWorkspaceDialogContent.vue b/src/components/dialog/content/workspace/EditWorkspaceDialogContent.vue index ca43e9f586..62b650a4e2 100644 --- a/src/components/dialog/content/workspace/EditWorkspaceDialogContent.vue +++ b/src/components/dialog/content/workspace/EditWorkspaceDialogContent.vue @@ -57,13 +57,13 @@ import { computed, ref } from 'vue' import { useI18n } from 'vue-i18n' import Button from '@/components/ui/button/Button.vue' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogStore } from '@/stores/dialogStore' const { t } = useI18n() const toast = useToast() const dialogStore = useDialogStore() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const loading = ref(false) const newWorkspaceName = ref(workspaceStore.workspaceName) diff --git a/src/components/dialog/content/workspace/InviteMemberDialogContent.vue b/src/components/dialog/content/workspace/InviteMemberDialogContent.vue index b3f5ce2ee7..021775acf3 100644 --- a/src/components/dialog/content/workspace/InviteMemberDialogContent.vue +++ b/src/components/dialog/content/workspace/InviteMemberDialogContent.vue @@ -117,7 +117,7 @@ import { useToast } from 'primevue/usetoast' import { computed, ref } from 'vue' import Button from '@/components/ui/button/Button.vue' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogStore } from '@/stores/dialogStore' const { onConfirm } = defineProps<{ @@ -126,7 +126,7 @@ const { onConfirm } = defineProps<{ const dialogStore = useDialogStore() const toast = useToast() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const loading = ref(false) const email = ref('') diff --git a/src/components/dialog/content/workspace/LeaveWorkspaceDialogContent.vue b/src/components/dialog/content/workspace/LeaveWorkspaceDialogContent.vue index e38bb28431..6a3d16c363 100644 --- a/src/components/dialog/content/workspace/LeaveWorkspaceDialogContent.vue +++ b/src/components/dialog/content/workspace/LeaveWorkspaceDialogContent.vue @@ -43,13 +43,13 @@ import { ref } from 'vue' import { useI18n } from 'vue-i18n' import Button from '@/components/ui/button/Button.vue' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogStore } from '@/stores/dialogStore' const { t } = useI18n() const toast = useToast() const dialogStore = useDialogStore() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const loading = ref(false) function onCancel() { diff --git a/src/components/dialog/content/workspace/RemoveMemberDialogContent.vue b/src/components/dialog/content/workspace/RemoveMemberDialogContent.vue index 2f8c08dd31..6d20b6b8cf 100644 --- a/src/components/dialog/content/workspace/RemoveMemberDialogContent.vue +++ b/src/components/dialog/content/workspace/RemoveMemberDialogContent.vue @@ -41,7 +41,7 @@ import { ref } from 'vue' import Button from '@/components/ui/button/Button.vue' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogStore } from '@/stores/dialogStore' const { memberId } = defineProps<{ @@ -49,7 +49,7 @@ const { memberId } = defineProps<{ }>() const dialogStore = useDialogStore() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const loading = ref(false) function onCancel() { diff --git a/src/components/dialog/content/workspace/RevokeInviteDialogContent.vue b/src/components/dialog/content/workspace/RevokeInviteDialogContent.vue index 2555ec760c..c0e2149cd5 100644 --- a/src/components/dialog/content/workspace/RevokeInviteDialogContent.vue +++ b/src/components/dialog/content/workspace/RevokeInviteDialogContent.vue @@ -41,7 +41,7 @@ import { ref } from 'vue' import Button from '@/components/ui/button/Button.vue' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogStore } from '@/stores/dialogStore' const { inviteId } = defineProps<{ @@ -49,7 +49,7 @@ const { inviteId } = defineProps<{ }>() const dialogStore = useDialogStore() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const loading = ref(false) function onCancel() { diff --git a/src/components/topbar/CurrentUserButton.vue b/src/components/topbar/CurrentUserButton.vue index c8cdbe9181..c3c9777bb9 100644 --- a/src/components/topbar/CurrentUserButton.vue +++ b/src/components/topbar/CurrentUserButton.vue @@ -47,7 +47,7 @@ import { ref } from 'vue' import WorkspaceProfilePic from '@/components/common/WorkspaceProfilePic.vue' import Button from '@/components/ui/button/Button.vue' import { useCurrentUser } from '@/composables/auth/useCurrentUser' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { cn } from '@/utils/tailwindUtil' import CurrentUserPopover from './CurrentUserPopover.vue' @@ -58,7 +58,7 @@ const { showArrow = true, compact = false } = defineProps<{ }>() const { isLoggedIn } = useCurrentUser() -const { workspaceName } = storeToRefs(useWorkspaceStore()) +const { workspaceName } = storeToRefs(useTeamWorkspaceStore()) const popover = ref | null>(null) diff --git a/src/components/topbar/CurrentUserPopover.vue b/src/components/topbar/CurrentUserPopover.vue index b0221f225e..67787f21fa 100644 --- a/src/components/topbar/CurrentUserPopover.vue +++ b/src/components/topbar/CurrentUserPopover.vue @@ -240,11 +240,11 @@ import { useSubscriptionDialog } from '@/platform/cloud/subscription/composables import { isCloud } from '@/platform/distribution/types' import { useTelemetry } from '@/platform/telemetry' import { useWorkspaceUI } from '@/platform/workspace/composables/useWorkspaceUI' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogService } from '@/services/dialogService' import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore' -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const { workspaceName, isInPersonalWorkspace: isPersonalWorkspace, diff --git a/src/components/topbar/WorkspaceSwitcherPopover.vue b/src/components/topbar/WorkspaceSwitcherPopover.vue index e6639b0d33..68d6941db4 100644 --- a/src/components/topbar/WorkspaceSwitcherPopover.vue +++ b/src/components/topbar/WorkspaceSwitcherPopover.vue @@ -120,7 +120,7 @@ import type { WorkspaceRole, WorkspaceType } from '@/platform/workspace/api/workspaceApi' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogService } from '@/services/dialogService' import { cn } from '@/utils/tailwindUtil' @@ -140,7 +140,7 @@ const emit = defineEmits<{ const { t } = useI18n() const { switchWithConfirmation } = useWorkspaceSwitch() const { showDeleteWorkspaceDialog } = useDialogService() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const { workspaceId, workspaces, canCreateWorkspace, isFetchingWorkspaces } = storeToRefs(workspaceStore) diff --git a/src/platform/auth/workspace/useWorkspaceSwitch.test.ts b/src/platform/auth/workspace/useWorkspaceSwitch.test.ts index 45ebe981d6..914c8bf9af 100644 --- a/src/platform/auth/workspace/useWorkspaceSwitch.test.ts +++ b/src/platform/auth/workspace/useWorkspaceSwitch.test.ts @@ -1,15 +1,15 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useWorkspaceSwitch } from '@/platform/auth/workspace/useWorkspaceSwitch' -import type { WorkspaceWithRole } from '@/platform/auth/workspace/workspaceTypes' +import type { WorkspaceWithRole } from '@/platform/workspace/api/workspaceApi' const mockSwitchWorkspace = vi.hoisted(() => vi.fn()) const mockActiveWorkspace = vi.hoisted(() => ({ value: null as WorkspaceWithRole | null })) -vi.mock('@/platform/workspace/stores/workspaceStore', () => ({ - useWorkspaceStore: () => ({ +vi.mock('@/platform/workspace/stores/teamWorkspaceStore', () => ({ + useTeamWorkspaceStore: () => ({ switchWorkspace: mockSwitchWorkspace }) })) diff --git a/src/platform/auth/workspace/useWorkspaceSwitch.ts b/src/platform/auth/workspace/useWorkspaceSwitch.ts index 5303bdba06..e8983ce41e 100644 --- a/src/platform/auth/workspace/useWorkspaceSwitch.ts +++ b/src/platform/auth/workspace/useWorkspaceSwitch.ts @@ -2,12 +2,12 @@ import { storeToRefs } from 'pinia' import { useI18n } from 'vue-i18n' import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { useDialogService } from '@/services/dialogService' export function useWorkspaceSwitch() { const { t } = useI18n() - const workspaceStore = useWorkspaceStore() + const workspaceStore = useTeamWorkspaceStore() const { activeWorkspace } = storeToRefs(workspaceStore) const workflowStore = useWorkflowStore() const dialogService = useDialogService() diff --git a/src/platform/auth/workspace/workspaceTypes.ts b/src/platform/auth/workspace/workspaceTypes.ts deleted file mode 100644 index 30774aef3b..0000000000 --- a/src/platform/auth/workspace/workspaceTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface WorkspaceWithRole { - id: string - name: string - type: 'personal' | 'team' - role: 'owner' | 'member' -} diff --git a/src/platform/cloud/subscription/components/SubscriptionPanelContent.vue b/src/platform/cloud/subscription/components/SubscriptionPanelContent.vue index 4c60eb6fb6..5640887770 100644 --- a/src/platform/cloud/subscription/components/SubscriptionPanelContent.vue +++ b/src/platform/cloud/subscription/components/SubscriptionPanelContent.vue @@ -257,11 +257,11 @@ import { getTierPrice } from '@/platform/cloud/subscription/constants/tierPricing' import { useWorkspaceUI } from '@/platform/workspace/composables/useWorkspaceUI' -import { useWorkspaceStore } from '@/platform/workspace/stores/workspaceStore' +import { useTeamWorkspaceStore } from '@/platform/workspace/stores/teamWorkspaceStore' import { cn } from '@/utils/tailwindUtil' const authActions = useFirebaseAuthActions() -const workspaceStore = useWorkspaceStore() +const workspaceStore = useTeamWorkspaceStore() const { isWorkspaceSubscribed } = storeToRefs(workspaceStore) const { subscribeWorkspace } = workspaceStore const { permissions, workspaceRole } = useWorkspaceUI() diff --git a/src/platform/workspace/api/workspaceApi.ts b/src/platform/workspace/api/workspaceApi.ts index c2ebf5cefa..1b5ec7dc98 100644 --- a/src/platform/workspace/api/workspaceApi.ts +++ b/src/platform/workspace/api/workspaceApi.ts @@ -142,12 +142,6 @@ async function withAuth( } } -/** - * Wrapper for workspace-scoped endpoints (e.g., /api/workspace/members). - * The workspace context is determined from the Bearer token. - */ -const withWorkspaceAuth = withAuth - /** * Wrapper that uses Firebase ID token directly (not workspace token). * Used for token exchange where we need the Firebase token to get a workspace token. @@ -236,7 +230,7 @@ export const workspaceApi = { * POST /api/workspace/leave */ leave: (): Promise => - withWorkspaceAuth((headers) => + withAuth((headers) => workspaceApiClient.post(api.apiURL('/workspace/leave'), null, { headers }) ), @@ -245,7 +239,7 @@ export const workspaceApi = { * GET /api/workspace/members */ listMembers: (params?: ListMembersParams): Promise => - withWorkspaceAuth((headers) => + withAuth((headers) => workspaceApiClient.get(api.apiURL('/workspace/members'), { headers, params @@ -257,7 +251,7 @@ export const workspaceApi = { * DELETE /api/workspace/members/:userId */ removeMember: (userId: string): Promise => - withWorkspaceAuth((headers) => + withAuth((headers) => workspaceApiClient.delete(api.apiURL(`/workspace/members/${userId}`), { headers }) @@ -268,7 +262,7 @@ export const workspaceApi = { * GET /api/workspace/invites */ listInvites: (): Promise => - withWorkspaceAuth((headers) => + withAuth((headers) => workspaceApiClient.get(api.apiURL('/workspace/invites'), { headers }) ), @@ -277,7 +271,7 @@ export const workspaceApi = { * POST /api/workspace/invites */ createInvite: (payload: CreateInviteRequest): Promise => - withWorkspaceAuth((headers) => + withAuth((headers) => workspaceApiClient.post(api.apiURL('/workspace/invites'), payload, { headers }) @@ -288,7 +282,7 @@ export const workspaceApi = { * DELETE /api/workspace/invites/:inviteId */ revokeInvite: (inviteId: string): Promise => - withWorkspaceAuth((headers) => + withAuth((headers) => workspaceApiClient.delete(api.apiURL(`/workspace/invites/${inviteId}`), { headers }) @@ -328,10 +322,12 @@ export const workspaceApi = { * Uses workspace-scoped token to get billing portal URL. */ accessBillingPortal: (returnUrl?: string): Promise => - withWorkspaceAuth((headers) => + withAuth((headers) => workspaceApiClient.post( api.apiURL('/billing/portal'), - { return_url: returnUrl ?? window.location.href } satisfies BillingPortalRequest, + { + return_url: returnUrl ?? window.location.href + } satisfies BillingPortalRequest, { headers } ) ) diff --git a/src/platform/workspace/composables/useInviteUrlLoader.ts b/src/platform/workspace/composables/useInviteUrlLoader.ts index 99ec75a31e..5e087e165b 100644 --- a/src/platform/workspace/composables/useInviteUrlLoader.ts +++ b/src/platform/workspace/composables/useInviteUrlLoader.ts @@ -9,9 +9,7 @@ import { } from '@/platform/navigation/preservedQueryManager' import { PRESERVED_QUERY_NAMESPACES } from '@/platform/navigation/preservedQueryNamespaces' -import { useWorkspaceStore } from '../stores/workspaceStore' - -const LOG_PREFIX = '[useInviteUrlLoader]' +import { useTeamWorkspaceStore } from '../stores/teamWorkspaceStore' /** * Composable for loading workspace invites from URL query parameters @@ -28,7 +26,7 @@ export function useInviteUrlLoader() { const router = useRouter() const { t } = useI18n() const toast = useToast() - const workspaceStore = useWorkspaceStore() + const workspaceStore = useTeamWorkspaceStore() const INVITE_NAMESPACE = PRESERVED_QUERY_NAMESPACES.INVITE /** @@ -70,32 +68,16 @@ export function useInviteUrlLoader() { * 5. Clean up URL and preserved query */ const loadInviteFromUrl = async () => { - console.log(LOG_PREFIX, 'Starting invite URL loading') - console.log(LOG_PREFIX, 'Current route.query:', route.query) - // Restore preserved query from sessionStorage (handles login redirect case) const query = await ensureInviteQueryFromIntent() - console.log(LOG_PREFIX, 'Query after hydration:', query) const inviteParam = query.invite - console.log( - LOG_PREFIX, - 'Invite param:', - inviteParam, - 'type:', - typeof inviteParam - ) - if (!inviteParam || typeof inviteParam !== 'string') { - console.log(LOG_PREFIX, 'No valid invite param found, skipping') return } - console.log(LOG_PREFIX, 'Accepting invite with token:', inviteParam) - try { const result = await workspaceStore.acceptInvite(inviteParam) - console.log(LOG_PREFIX, 'Invite accepted successfully:', result) toast.add({ severity: 'success', @@ -106,7 +88,6 @@ export function useInviteUrlLoader() { life: 5000 }) } catch (error) { - console.error(LOG_PREFIX, 'Failed to accept invite:', error) toast.add({ severity: 'error', summary: t('workspace.inviteFailed'), diff --git a/src/platform/workspace/composables/useWorkspaceUI.ts b/src/platform/workspace/composables/useWorkspaceUI.ts index ef1aaf7316..55a5536a39 100644 --- a/src/platform/workspace/composables/useWorkspaceUI.ts +++ b/src/platform/workspace/composables/useWorkspaceUI.ts @@ -2,7 +2,7 @@ import { computed, ref } from 'vue' import { createSharedComposable } from '@vueuse/core' import type { WorkspaceRole, WorkspaceType } from '../api/workspaceApi' -import { useWorkspaceStore } from '../stores/workspaceStore' +import { useTeamWorkspaceStore } from '../stores/teamWorkspaceStore' /** Permission flags for workspace actions */ export interface WorkspacePermissions { @@ -131,7 +131,7 @@ function getUIConfig( * Internal implementation of UI configuration composable. */ function useWorkspaceUIInternal() { - const store = useWorkspaceStore() + const store = useTeamWorkspaceStore() // Tab management (shared UI state) const activeTab = ref('plan') diff --git a/src/platform/workspace/stores/workspaceStore.ts b/src/platform/workspace/stores/teamWorkspaceStore.ts similarity index 88% rename from src/platform/workspace/stores/workspaceStore.ts rename to src/platform/workspace/stores/teamWorkspaceStore.ts index a7cc0321fd..42cfdeb6ee 100644 --- a/src/platform/workspace/stores/workspaceStore.ts +++ b/src/platform/workspace/stores/teamWorkspaceStore.ts @@ -74,7 +74,7 @@ function createWorkspaceState(workspace: WorkspaceWithRole): WorkspaceState { const MAX_OWNED_WORKSPACES = 10 const MAX_WORKSPACE_MEMBERS = 50 -export const useWorkspaceStore = defineStore('teamWorkspace', () => { +export const useTeamWorkspaceStore = defineStore('teamWorkspace', () => { // ════════════════════════════════════════════════════════════ // STATE // ════════════════════════════════════════════════════════════ @@ -332,7 +332,6 @@ export const useWorkspaceStore = defineStore('teamWorkspace', () => { async function initialize(): Promise { if (initState.value !== 'uninitialized') return - console.log('[workspaceStore] Initializing workspace store...') initState.value = 'loading' isFetchingWorkspaces.value = true error.value = null @@ -340,16 +339,6 @@ export const useWorkspaceStore = defineStore('teamWorkspace', () => { try { // 1. Fetch all workspaces const response = await workspaceApi.list() - console.log('[workspaceStore] initialize API response:', response) - console.log( - '[workspaceStore] Workspaces from API:', - response.workspaces.map((w) => ({ - id: w.id, - name: w.name, - type: w.type, - role: w.role - })) - ) workspaces.value = response.workspaces.map(createWorkspaceState) if (workspaces.value.length === 0) { @@ -418,15 +407,6 @@ export const useWorkspaceStore = defineStore('teamWorkspace', () => { isFetchingWorkspaces.value = true try { const response = await workspaceApi.list() - console.log('[workspaceStore] refreshWorkspaces API response:', response) - console.log( - '[workspaceStore] Workspace IDs:', - response.workspaces.map((w) => w.id) - ) - console.log( - '[workspaceStore] Workspace names:', - response.workspaces.map((w) => w.name) - ) workspaces.value = response.workspaces.map(createWorkspaceState) } finally { isFetchingWorkspaces.value = false @@ -588,23 +568,10 @@ export const useWorkspaceStore = defineStore('teamWorkspace', () => { async function fetchMembers( params?: ListMembersParams ): Promise { - const sessionWorkspaceId = sessionManager.getCurrentWorkspaceId() - console.log('[workspaceStore] fetchMembers called') - console.log( - '[workspaceStore] activeWorkspaceId (store):', - activeWorkspaceId.value - ) - console.log('[workspaceStore] sessionWorkspaceId:', sessionWorkspaceId) - console.log( - '[workspaceStore] IDs match:', - activeWorkspaceId.value === sessionWorkspaceId - ) - console.log('[workspaceStore] activeWorkspace:', activeWorkspace.value) if (!activeWorkspaceId.value) return [] if (activeWorkspace.value?.type === 'personal') return [] const response = await workspaceApi.listMembers(params) - console.log('[workspaceStore] fetchMembers response:', response) const members = response.members.map(mapApiMemberToWorkspaceMember) updateActiveWorkspace({ members }) return members @@ -631,23 +598,10 @@ export const useWorkspaceStore = defineStore('teamWorkspace', () => { * Fetch pending invites for the current workspace. */ async function fetchPendingInvites(): Promise { - const sessionWorkspaceId = sessionManager.getCurrentWorkspaceId() - console.log('[workspaceStore] fetchPendingInvites called') - console.log( - '[workspaceStore] activeWorkspaceId (store):', - activeWorkspaceId.value - ) - console.log('[workspaceStore] sessionWorkspaceId:', sessionWorkspaceId) - console.log( - '[workspaceStore] IDs match:', - activeWorkspaceId.value === sessionWorkspaceId - ) - console.log('[workspaceStore] activeWorkspace:', activeWorkspace.value) if (!activeWorkspaceId.value) return [] if (activeWorkspace.value?.type === 'personal') return [] const response = await workspaceApi.listInvites() - console.log('[workspaceStore] fetchPendingInvites response:', response) const invites = response.invites.map(mapApiInviteToPendingInvite) updateActiveWorkspace({ pendingInvites: invites }) return invites @@ -690,23 +644,11 @@ export const useWorkspaceStore = defineStore('teamWorkspace', () => { async function acceptInvite( token: string ): Promise<{ workspaceId: string; workspaceName: string }> { - console.log('[workspaceStore] acceptInvite called with token:', token) - console.log( - '[workspaceStore] Workspaces BEFORE accept:', - workspaces.value.map((w) => ({ id: w.id, name: w.name, type: w.type })) - ) - const response = await workspaceApi.acceptInvite(token) - console.log('[workspaceStore] acceptInvite API response:', response) // Refresh workspace list to include newly joined workspace await refreshWorkspaces() - console.log( - '[workspaceStore] Workspaces AFTER refresh:', - workspaces.value.map((w) => ({ id: w.id, name: w.name, type: w.type })) - ) - return { workspaceId: response.workspace_id, workspaceName: response.workspace_name @@ -778,22 +720,6 @@ export const useWorkspaceStore = defineStore('teamWorkspace', () => { clearTokenContext() } - // ════════════════════════════════════════════════════════════ - // DEV HELPERS - // ════════════════════════════════════════════════════════════ - - function setMockRole(role: 'owner' | 'member') { - updateActiveWorkspace({ role }) - } - - function setMockSubscribed(subscribed: boolean) { - updateActiveWorkspace({ isSubscribed: subscribed }) - } - - function setMockType(type: 'personal' | 'team') { - updateActiveWorkspace({ type }) - } - // ════════════════════════════════════════════════════════════ // RETURN // ════════════════════════════════════════════════════════════ @@ -852,11 +778,6 @@ export const useWorkspaceStore = defineStore('teamWorkspace', () => { copyInviteLink, // Subscription - subscribeWorkspace, - - // Dev helpers - setMockRole, - setMockSubscribed, - setMockType + subscribeWorkspace } }) diff --git a/src/router.ts b/src/router.ts index af72c212a4..959c2ad8bf 100644 --- a/src/router.ts +++ b/src/router.ts @@ -187,9 +187,9 @@ if (isCloud) { // TODO: Use flags.teamWorkspacesEnabled when backend enables the flag const teamWorkspacesEnabled = true if (to.path === '/' && teamWorkspacesEnabled) { - const { useWorkspaceStore } = - await import('@/platform/workspace/stores/workspaceStore') - const workspaceStore = useWorkspaceStore() + const { useTeamWorkspaceStore } = + await import('@/platform/workspace/stores/teamWorkspaceStore') + const workspaceStore = useTeamWorkspaceStore() if (workspaceStore.initState === 'uninitialized') { try {