feat(lists): bulk-actions primitive + Tickets bulk-delete opt-in (MAPPS-290) #310

Merged
YousifShkara merged 1 commit from feat/MAPPS-290-bulk-actions-primitive into main 2026-06-21 12:18:49 +02:00
Owner

Adds src/components/bulk_actions.rs: a BulkSelection signal type plus three components (SelectAllHeader, SelectRowCell, BulkActionsBar) and a few helpers (use_bulk_selection, toggle_selected, clear_selection). Pages opt in by mounting a use_bulk_selection() signal at component scope, adding a SelectAllHeader as the first column, swapping their row component's first cell for a SelectRowCell, and mounting BulkActionsBar above the table with the verb buttons as children. The bar renders only when at least one row is selected and pluralises the count.

The Tickets list is the first opt-in and ships with a Delete selected verb that fires parallel DELETE calls and surfaces a success / partial-failure toast, then clears the selection and restarts the resource. Other list views (Companies, Contacts, Projects, Contracts, Invoices, Assets) follow the same shape and are tracked as follow-up PRs under this ticket; MAPPS-303 (asset bulk-edit) builds on this primitive directly.

#MAPPS-290

Adds `src/components/bulk_actions.rs`: a `BulkSelection` signal type plus three components (`SelectAllHeader`, `SelectRowCell`, `BulkActionsBar`) and a few helpers (`use_bulk_selection`, `toggle_selected`, `clear_selection`). Pages opt in by mounting a `use_bulk_selection()` signal at component scope, adding a `SelectAllHeader` as the first column, swapping their row component's first cell for a `SelectRowCell`, and mounting `BulkActionsBar` above the table with the verb buttons as children. The bar renders only when at least one row is selected and pluralises the count. The Tickets list is the first opt-in and ships with a `Delete selected` verb that fires parallel DELETE calls and surfaces a success / partial-failure toast, then clears the selection and restarts the resource. Other list views (Companies, Contacts, Projects, Contracts, Invoices, Assets) follow the same shape and are tracked as follow-up PRs under this ticket; MAPPS-303 (asset bulk-edit) builds on this primitive directly. #MAPPS-290
feat(lists): bulk-actions primitive + Tickets bulk-delete opt-in (MAPPS-290)
All checks were successful
Create release / Create release from merged PR (pull_request) Has been skipped
Check / clippy + fmt + tests (pull_request) Successful in 1m15s
89a2183f88
Adds `src/components/bulk_actions.rs`: a `BulkSelection` signal type plus three components (`SelectAllHeader`, `SelectRowCell`, `BulkActionsBar`) and a few helpers (`use_bulk_selection`, `toggle_selected`, `clear_selection`). Pages opt in by mounting a `use_bulk_selection()` signal at component scope, adding a `SelectAllHeader` as the first column, swapping their row component's first cell for a `SelectRowCell`, and mounting `BulkActionsBar` above the table with the verb buttons as children. The bar renders only when at least one row is selected and pluralises the count.

The Tickets list is the first opt-in and ships with a `Delete selected` verb that fires parallel DELETE calls and surfaces a success / partial-failure toast, then clears the selection and restarts the resource. Other list views (Companies, Contacts, Projects, Contracts, Invoices, Assets) follow the same shape and are tracked as follow-up PRs under this ticket; MAPPS-303 (asset bulk-edit) builds on this primitive directly.

#MAPPS-290
YousifShkara deleted branch feat/MAPPS-290-bulk-actions-primitive 2026-06-21 12:18:50 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/mokosh-apps!310
No description provided.