Removal is now blocked when a user has active drafter or peer checker assignments, which means a Project Manager needs a way to see who holds those assignments before attempting a removal. The main project table (sorted by Book, then Chapter, by default) already displays drafter, peer checker, and status columns; this ticket makes them sortable so the PM can quickly identify reassignment targets without leaving the page. All the underlying data is already in client memory, so this is a low-effort addition.
Functional Requirements
Main Project Table (Chapters)
- The main project table (sorted by Book, then Chapter, by default) already has drafter, peer checker, and status columns.
- Clicking a column header toggles its sort order: ascending → descending → back to the table's default Book/Chapter sort.
- Only one column drives the sort order at a time; sorting by a new column resets any prior sort.
Note: This supports the reassign-before-remove workflow from the removal guardrails ticket; no new API calls are needed since the data is already available in client memory.
Removal is now blocked when a user has active drafter or peer checker assignments, which means a Project Manager needs a way to see who holds those assignments before attempting a removal. The main project table (sorted by Book, then Chapter, by default) already displays drafter, peer checker, and status columns; this ticket makes them sortable so the PM can quickly identify reassignment targets without leaving the page. All the underlying data is already in client memory, so this is a low-effort addition.
Functional Requirements
Main Project Table (Chapters)