diff --git a/frontend/app/workspace/page.tsx b/frontend/app/workspace/page.tsx index bd5ecfe..0e10e5e 100644 --- a/frontend/app/workspace/page.tsx +++ b/frontend/app/workspace/page.tsx @@ -7,168 +7,175 @@ import { useCallback, } from "react"; import { KanbanBoard } from "../components/kanban/KanbanBoard"; +import { supabase } from "@/app/lib/supabase"; -const users = [ - { name: "Shrinivas", status: "Working on UI" }, - { name: "Rahul", status: "Fixing API bug" }, - { name: "Aman", status: "Reviewing code" }, -]; - -const activities = [ - "Shrinivas updated UI components", - "Rahul fixed login bug", - "Aman pushed new changes", -]; - -function buildWorkspaceData() { - return { - users, - activities, - activeDeveloperCount: users.length, - activityCount: activities.length, - }; -} +type Member = { + name: string; + email: string; +}; -export default function WorkspacePage() { - const [showWorkspace, setShowWorkspace] = - useState(false); - - const [showActivityFeed, setShowActivityFeed] = - useState(false); - - const [isReady, setIsReady] = - useState(false); - - const [startupPhase, setStartupPhase] = - useState< - "initializing" | - "loading" | - "ready" - >("initializing"); +type Activity = { + text: string; + time: string; +}; - const [readinessScore, setReadinessScore] = - useState(0); - - const initializeWorkspace = - useCallback(async () => { - setStartupPhase("loading"); - - await Promise.all([ - Promise.resolve(), - Promise.resolve(), - Promise.resolve(), - ]); - - setReadinessScore(100); - setIsReady(true); - setStartupPhase("ready"); - }, []); +export default function WorkspacePage() { + const [showWorkspace, setShowWorkspace] = useState(false); + const [members, setMembers] = useState([]); + const [activities, setActivities] = useState([]); + const [loading, setLoading] = useState(true); useEffect(() => { - void initializeWorkspace(); - - const workspaceTimer = - window.setTimeout(() => { - setShowWorkspace(true); - }, 50); - - const activityTimer = - window.setTimeout(() => { - setShowActivityFeed(true); - }, 50); - + const workspaceTimer = window.setTimeout(() => { + setShowWorkspace(true); + }, 50); return () => { window.clearTimeout(workspaceTimer); - window.clearTimeout(activityTimer); }; - }, [initializeWorkspace]); + }, []); - const workspaceData = useMemo( - () => buildWorkspaceData(), - [] - ); + useEffect(() => { + const fetchWorkspaceData = async () => { + try { + if (!supabase) { setLoading(false); return; } + const { data: { session } } = await supabase.auth.getSession(); + if (!session) { setLoading(false); return; } + + const { data: profilesData, error: profilesError } = await supabase + .from("profiles") + .select("name, email") + .limit(10); + + if (!profilesError && profilesData) { + setMembers(profilesData.map((p) => ({ + name: p.name || "User", + email: p.email, + }))); + } + + const { data: projectsData, error: projectsError } = await supabase + .from("projects") + .select("name, created_at") + .order("created_at", { ascending: false }) + .limit(5); + + if (!projectsError && projectsData) { + setActivities(projectsData.map((p) => ({ + text: `Project "${p.name}" created`, + time: new Date(p.created_at).toLocaleDateString(), + }))); + } + } catch (err) { + console.error("Failed to fetch workspace data:", err); + } finally { + setLoading(false); + } + }; + + fetchWorkspaceData(); + }, []); return (
+ + {/* ACTIVE MEMBERS */}

Active Developers

-

- {workspaceData.activeDeveloperCount} active contributors -

- -

- Startup: {startupPhase} - {" • "} - Readiness: {readinessScore}% + {loading ? "Loading..." : `${members.length} active contributor${members.length !== 1 ? "s" : ""}`}

-
- {workspaceData.users.map((user, i) => ( -
-

- {user.name} -

- -

- {user.status} -

-
- ))} -
+ {loading ? ( +
+ {[1, 2, 3].map((i) => ( +
+
+
+
+ ))} +
+ ) : members.length > 0 ? ( +
+ {members.map((member, i) => ( +
+

{member.name}

+

{member.email}

+
+ ))} +
+ ) : ( +
+ + + +

No members yet

+

Invite your team to get started

+
+ )}
+ {/* KANBAN BOARD */}

Workspace Tasks

-
{showWorkspace ? ( ) : (
- {isReady - ? "Workspace Ready" - : "Initializing workspace..."} + Initializing workspace...
)}
+ {/* ACTIVITY FEED */}

Activity Feed

-

- {workspaceData.activityCount} recent activities + {loading ? "Loading..." : `${activities.length} recent activit${activities.length !== 1 ? "ies" : "y"}`}

- {showActivityFeed ? ( + {loading ? ( +
+ {[1, 2, 3].map((i) => ( +
+
+
+ ))} +
+ ) : activities.length > 0 ? (
    - {workspaceData.activities.map( - (activity, i) => ( -
  • - {activity} -
  • - ) - )} + {activities.map((activity, i) => ( +
  • + + + {activity.text} + + + {activity.time} + +
  • + ))}
) : ( -
- Loading activity feed... +
+ + + +

No workspace data yet

+

Create a project to get started

)}
+
); } \ No newline at end of file