"use client"; import type { ReactElement, SyntheticEvent } from "react"; import { useCallback, useEffect, useState } from "react"; import { WorkspaceCard } from "@/components/workspace/WorkspaceCard"; import { createWorkspace, fetchUserWorkspaces, type UserWorkspace } from "@/lib/api/workspaces"; import Link from "next/link"; function getErrorMessage(error: unknown, fallback: string): string { if (error instanceof Error) { return error.message; } return fallback; } /** * Workspaces Page * Fetches and creates workspaces through the real API. */ export default function WorkspacesPage(): ReactElement { const [workspaces, setWorkspaces] = useState([]); const [isLoading, setIsLoading] = useState(true); const [loadError, setLoadError] = useState(null); const [isCreating, setIsCreating] = useState(false); const [newWorkspaceName, setNewWorkspaceName] = useState(""); const [createError, setCreateError] = useState(null); const loadWorkspaces = useCallback(async (): Promise => { setIsLoading(true); try { const data = await fetchUserWorkspaces(); setWorkspaces(data); setLoadError(null); } catch (error) { setLoadError(getErrorMessage(error, "Failed to load workspaces")); } finally { setIsLoading(false); } }, []); useEffect(() => { void loadWorkspaces(); }, [loadWorkspaces]); const workspacesWithRoles = workspaces.map((workspace) => ({ ...workspace, settings: {}, createdAt: new Date(workspace.createdAt), updatedAt: new Date(workspace.createdAt), userRole: workspace.role, memberCount: 1, })); const handleCreateWorkspace = async (e: SyntheticEvent): Promise => { e.preventDefault(); const workspaceName = newWorkspaceName.trim(); if (!workspaceName) return; setIsCreating(true); setCreateError(null); try { await createWorkspace({ name: workspaceName }); setNewWorkspaceName(""); await loadWorkspaces(); } catch (error) { setCreateError(getErrorMessage(error, "Failed to create workspace")); } finally { setIsCreating(false); } }; return (

Workspaces

← Back to Settings

Manage your workspaces and collaborate with your team

{/* Create New Workspace */}

Create New Workspace

{ setNewWorkspaceName(e.target.value); }} placeholder="Enter workspace name..." disabled={isCreating} className="flex-1 px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:bg-gray-100" />
{createError !== null && (
{createError}
)}
{/* Workspace List */}

Your Workspaces ({isLoading ? "..." : workspacesWithRoles.length})

{loadError !== null ? (
{loadError}
) : isLoading ? (
Loading workspaces...
) : workspacesWithRoles.length === 0 ? (

No workspaces yet

Create your first workspace to get started

) : (
{workspacesWithRoles.map((workspace) => ( ))}
)}
); }