From e291efb144d7022ec65f41c2dcb8eb876c0de323 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Mon, 2 Feb 2026 13:26:09 +0530 Subject: [PATCH] feat(project-detail): loading/errors + safer member/actions --- frontend/src/app/projects/[id]/page.tsx | 32 +++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/projects/[id]/page.tsx b/frontend/src/app/projects/[id]/page.tsx index 78326342..3c733852 100644 --- a/frontend/src/app/projects/[id]/page.tsx +++ b/frontend/src/app/projects/[id]/page.tsx @@ -27,6 +27,18 @@ import { useUpdateProjectMemberProjectsProjectIdMembersMemberIdPatch, } from "@/api/generated/projects/projects"; +function getActorEmployeeId(): number | null { + if (typeof window === "undefined") return null; + try { + const v = window.localStorage.getItem("actor_employee_id"); + if (!v) return null; + const n = Number(v); + return Number.isFinite(n) ? n : null; + } catch { + return null; + } +} + const STATUSES = ["backlog", "ready", "in_progress", "review", "done", "blocked"] as const; export default function ProjectDetailPage() { @@ -103,12 +115,22 @@ export default function ProjectDetailPage() { return (
+ {!Number.isFinite(projectId) ? ( +
Invalid project id in URL.
+ ) : null} + {projects.isLoading || employees.isLoading || members.isLoading || tasks.isLoading ? ( +
Loading…
+ ) : null} + {projects.error ?
{(projects.error as Error).message}
: null} + {employees.error ?
{(employees.error as Error).message}
: null} + {members.error ?
{(members.error as Error).message}
: null} + {tasks.error ?
{(tasks.error as Error).message}
: null}

{project?.name ?? `Project #${projectId}`}

Project detail: staffing + tasks.

-
@@ -120,6 +142,7 @@ export default function ProjectDetailPage() { Project-scoped tasks + {createTask.error ?
{(createTask.error as Error).message}
: null} setTitle(e.target.value)} />