feat(projects): wire Project detail + tasks pages (MAPPS-127) #89
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/mapps-127-wire-project-detail-tasks"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Follow-up to MAPPS-126. Wires the last two hardcoded surfaces on the Projects page:
ProjectDetailPage(fixed overview, fake John Smith / Jane Doe tasks + activity, hardcoded Details / Budget / Time sidebars) andProjectTasksPage(static five-row table).Closes MAPPS-127.
How
GET /api/v1/projects/:iddrives the header (project name), Overview (real description), and the sidebar (status badge; task-completion progress; start / due dates; project-manager name; Budget =budget_amountvsactual_amountwith a utilization bar; Time =budget_hoursestimated vsactual_hourslogged). The Tasks card comes fromGET /api/v1/projects/:id/tasks. Statuses resolve viaGET /api/v1/task-statuses(is_completeddrives the green badge + the progress %), users viaGET /api/v1/auth/users. Dropped the fake Recent Activity card (no activity-feed endpoint exists). Loading / load-failed states.Paginated,de_flex_f64,status_badge,fmt_date,fmt_money); addsRemoteTask/RemoteTaskStatus/RemoteUser+task_status_badge,user_name,fmt_hours. Removed the deadTaskItem/ActivityItemcomponents.Stacked on #88
This branch builds on the MAPPS-126 branch (reuses those helpers), so until #88 merges this PR's diff also shows #88's changes. Merge #88 first, then this.
Verification
cargo fmt --checkclean;cargo clippy --target wasm32-unknown-unknown --all-targets -- -D warningsclean.GET /projects/:idand/projects/:id/tasksreturn the expected fields (decimals as strings, handled). Test data cleaned up.GET /auth/usersrequires admin/manager; a lower-privilege session gets an empty list and assignee/PM names fall back to "Unassigned" / "Unknown" rather than erroring - the page degrades gracefully because the fetch is best-effort.🤖 Generated with Claude Code