Skip to content

ux(users): surface bulk-actions toolbar (delete + add-to-group) - #977

Merged
cristim merged 1 commit into
feat/multicloud-web-frontendfrom
ux/974-users-bulk-toolbar
Jun 5, 2026
Merged

ux(users): surface bulk-actions toolbar (delete + add-to-group)#977
cristim merged 1 commit into
feat/multicloud-web-frontendfrom
ux/974-users-bulk-toolbar

Conversation

@cristim

@cristim cristim commented Jun 5, 2026

Copy link
Copy Markdown
Member

Summary

  • The Users tab checkboxes had no visible target: checking a row changed nothing visible from the user's perspective.
  • Adds a #bulk-actions-bar toolbar to index.html that appears on first selection and hides when selection is cleared.
  • Toolbar contains a selection counter, a Delete selected button, and an "Add to group..." select; all wired to the existing bulkDeleteUsers() / bulkAddToGroup() functions.
  • Adds populateBulkGroupSelect() to userList.ts (called by loadUsers()) so the select stays in sync after every refresh.
  • No bulk-change-role button added (removed in PR feat(auth): group-membership-only authorization, remove roles, require >=1 group (closes #907) #912).

closes #974

Test plan

  • Open Settings > Users, verify toolbar is hidden with no rows checked
  • Check one row: toolbar appears, count shows "1 users selected"
  • Check two more rows: count updates to "3 users selected"
  • Uncheck all rows: toolbar hides
  • With rows selected, click "Delete selected", confirm dialog, verify rows are removed
  • With rows selected, choose a group from "Add to group..." select, verify users are added and select resets to placeholder
  • All 1940 tests pass (node_modules/.bin/jest --no-coverage)
  • TypeScript: no new errors (tsc --noEmit)
  • Build succeeds (webpack)

@cristim cristim added triaged Item has been triaged priority/p3 Polish / idea / may never ship severity/low Minor harm urgency/this-sprint Within the current sprint impact/few Limited audience effort/s Hours type/bug Defect labels Jun 5, 2026
@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e24e7247-c2a1-4d2c-b29c-4331a5a3cbf9

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • ✅ Review completed - (🔄 Check again to review again)
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ux/974-users-bulk-toolbar

Comment @coderabbitai help to get the list of available commands and usage tips.

@cristim

cristim commented Jun 5, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

…#974

Render a bulk-actions toolbar inside the Users fieldset that becomes
visible when one or more user rows are checked and hides again when
the selection is cleared.

The toolbar contains:
- a selection counter ("N users selected")
- a Delete selected button wired to the existing bulkDeleteUsers()
- an "Add to group..." select populated with available groups, wired
  to the existing bulkAddToGroup(); resets to the placeholder after
  each operation completes

Implementation notes:
- toolbar HTML added to frontend/src/index.html (id=bulk-actions-bar,
  hidden class by default; matches the idiom already used by
  updateBulkActionsBar in userList.ts)
- populateBulkGroupSelect() added to userList.ts (alongside
  updateBulkActionsBar) and called by loadUsers() so options stay
  in sync after every refresh
- handlers.ts wires the bulk-group-select change event and calls
  populateBulkGroupSelect() at setup time
- bulk-change-role button intentionally absent (removed in PR #912)
- 8 new tests covering: toolbar hidden/shown/count on selection
  changes, unchecking all hides toolbar, delete btn calls API,
  select populates with groups, select change calls bulkAddToGroup,
  placeholder selection is a no-op
@cristim
cristim force-pushed the ux/974-users-bulk-toolbar branch from a2c8b6d to 7ebcb28 Compare June 5, 2026 11:30
@cristim

cristim commented Jun 5, 2026

Copy link
Copy Markdown
Member Author

Rebased on feat/multicloud-web-frontend. Resolved conflict in frontend/src/users/handlers.ts (additive: kept base's removal of bulkChangeRole import, added populateBulkGroupSelect import from this PR).

@cristim

cristim commented Jun 5, 2026

Copy link
Copy Markdown
Member Author

pr-iterate: CR appears to be blocked by org-level usage limits; this PR is otherwise progressing (rebase complete, mergeStateStatus=UNSTABLE with CI pending). Re-invoke /pr-iterate 977 after the org's CR billing is topped up to get a substantive CR pass. To clear the billing block marker after billing is fixed: rm ~/.claude/agent-comms/cr-rate-limit-deadline.txt

@cristim
cristim merged commit feb2009 into feat/multicloud-web-frontend Jun 5, 2026
5 checks passed
@cristim
cristim deleted the ux/974-users-bulk-toolbar branch June 5, 2026 11:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/s Hours impact/few Limited audience priority/p3 Polish / idea / may never ship severity/low Minor harm triaged Item has been triaged type/bug Defect urgency/this-sprint Within the current sprint

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant