feat(scholars): add multiselect and bulk actions #49

Closed
JustinZeus wants to merge 7 commits from feat/scholar-multiselect-bulk-actions into main
JustinZeus commented 2026-03-07 14:26:39 +01:00 (Migrated from github.com)

Summary

  • Backend: New POST /scholars/bulk-delete, POST /scholars/bulk-toggle endpoints + optional ?ids= filter on export
  • Frontend composable: useScholarBulkActions with Set-based selection, dynamic action menu, confirm dialogs
  • ScholarsPage: Checkbox column (desktop table + mobile cards), select all, bulk action bar with AppSelect dropdown
  • Actions: Bulk delete (with confirm), bulk enable/disable, bulk export (JSON download), clear/select all

Follows existing PublicationsPage multiselect pattern. All endpoints are user-scoped.

Includes cherry-picks from feat/live-scholar-progress-counter:

  • Run/cancel buttons visible to all users
  • Hours interval + PDF queue for all users

Test plan

  • Select multiple scholars → bulk action bar appears with correct count
  • Bulk delete → confirmation → scholars removed, selection cleared
  • Bulk enable/disable → scholars toggled, list updates
  • Bulk export → JSON file with only selected scholars + publications
  • Select all → all scholars selected
  • Run npm run test:run (frontend tests pass)
  • Run ruff check . + ruff format --check . (all pass)
  • Run integration tests for bulk endpoints

🤖 Generated with Claude Code

## Summary - **Backend**: New `POST /scholars/bulk-delete`, `POST /scholars/bulk-toggle` endpoints + optional `?ids=` filter on export - **Frontend composable**: `useScholarBulkActions` with Set-based selection, dynamic action menu, confirm dialogs - **ScholarsPage**: Checkbox column (desktop table + mobile cards), select all, bulk action bar with AppSelect dropdown - **Actions**: Bulk delete (with confirm), bulk enable/disable, bulk export (JSON download), clear/select all Follows existing PublicationsPage multiselect pattern. All endpoints are user-scoped. Includes cherry-picks from `feat/live-scholar-progress-counter`: - Run/cancel buttons visible to all users - Hours interval + PDF queue for all users ## Test plan - [ ] Select multiple scholars → bulk action bar appears with correct count - [ ] Bulk delete → confirmation → scholars removed, selection cleared - [ ] Bulk enable/disable → scholars toggled, list updates - [ ] Bulk export → JSON file with only selected scholars + publications - [ ] Select all → all scholars selected - [ ] Run `npm run test:run` (frontend tests pass) - [ ] Run `ruff check .` + `ruff format --check .` (all pass) - [ ] Run integration tests for bulk endpoints 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Owner

Closing as stale: imported with the repository in March 2026 and untouched since. scholarr-legacy is the legacy repo; the branch stays, so the work can be reopened or ported if it's wanted.

Closing as stale: imported with the repository in March 2026 and untouched since. scholarr-legacy is the legacy repo; the branch stays, so the work can be reopened or ported if it's wanted.
justinzeus closed this pull request 2026-09-24 01:35:45 +02:00

Pull request closed

Sign in to join this conversation.
No description provided.