Conversation
There was a problem hiding this comment.
Pull request overview
Adds a new Project Timesheet page that renders timesheet data grouped by Week → Project → Member → Task, using a temporary “live data” workaround pending the dedicated aggregation API (#828).
Changes:
- Introduces a Project Timesheet provider/context that loads compact-view weeks and then fetches member timesheets to build week/project/member groupings.
- Adds the Project Timesheet table UI with infinite scrolling and a grouped row layout.
- Extends shared timesheet-row utilities and exports a new
ProjectTimesheetRowcomponent.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/packages/app/src/pages/timesheet/project/provider.tsx | Fetches/aggregates project + compact-view + per-member timesheets into week/project/member groupings. |
| frontend/packages/app/src/pages/timesheet/project/projectTimesheetTable.tsx | Renders the Project Timesheet UI (filters header, infinite scroll, grouped rows). |
| frontend/packages/app/src/pages/timesheet/project/index.tsx | Wires the new provider + table into the route/page. |
| frontend/packages/app/src/pages/timesheet/project/context.ts | Defines Project Timesheet context and grouping types. |
| frontend/packages/app/src/components/timesheet-row/utils.ts | Adds helper to merge tasks across members for project-level totals. |
| frontend/packages/app/src/components/timesheet-row/projectTimesheetRow.tsx | Implements Week → Project → Member → Task row rendering for the project view. |
| frontend/packages/app/src/components/timesheet-row/index.ts | Exports ProjectTimesheetRow. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
frontend/packages/app/src/pages/timesheet/project/projectTimesheetTable.tsx
Outdated
Show resolved
Hide resolved
frontend/packages/app/src/components/timesheet-row/projectTimesheetRow.tsx
Outdated
Show resolved
Hide resolved
| const hasMoreWeeks = useProjectTimesheet(({ state }) => state.hasMoreWeeks); | ||
| const isLoadingProjectData = useProjectTimesheet( | ||
| ({ state }) => state.isLoadingProjectData, | ||
| ); |
There was a problem hiding this comment.
Looks like this thing. Loading more entries and appending them can used to encapsulated into a hook. This can be used in all project pages atleast.
We may also want to use a virtual list in the future but thats overkill for now.
There was a problem hiding this comment.
Looks like this thing. Loading more entries and appending them can used to encapsulated into a hook. This can be used in all project pages atleast.
Okay, since we will need to refactor once we have the API anyway, we can handle everything together and use an improved infinite scroll with all the loading logic abstracted away.
Description
This PR adds Project Timesheet page, displaying data grouped by
Week/Project/Member/Task.Note for reviewer: This PR uses a workaround to display live data, which will be replaced with the newly introduced API endpoint from #828.
Screenshots
This PR also simplifies the sidebar and header options for users with limited access.
Checklist
Fixes #826