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

Open
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)
This pull request has changes conflicting with the target branch.
  • app/api/routers/scholars.py
  • app/services/scholars/application.py
  • frontend/src/features/scholars/composables/useScholarBulkActions.test.ts
  • frontend/src/features/scholars/composables/useScholarBulkActions.ts
  • frontend/src/features/settings/SettingsAdminPanel.vue
  • frontend/src/pages/SettingsPage.vue
  • tests/integration/test_api_scholars_bulk.py
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/scholar-multiselect-bulk-actions:feat/scholar-multiselect-bulk-actions
git checkout feat/scholar-multiselect-bulk-actions

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git checkout main
git merge --no-ff feat/scholar-multiselect-bulk-actions
git checkout feat/scholar-multiselect-bulk-actions
git rebase main
git checkout main
git merge --ff-only feat/scholar-multiselect-bulk-actions
git checkout feat/scholar-multiselect-bulk-actions
git rebase main
git checkout main
git merge --no-ff feat/scholar-multiselect-bulk-actions
git checkout main
git merge --squash feat/scholar-multiselect-bulk-actions
git checkout main
git merge --ff-only feat/scholar-multiselect-bulk-actions
git checkout main
git merge feat/scholar-multiselect-bulk-actions
git push origin main
Sign in to join this conversation.
No description provided.