Bulk Actions on List Pages
Bulk Actions on List Pages
From v0.1.73, all major list pages support bulk selection and contextual bulk actions. This is designed for agencies managing large portfolios where performing the same operation across many records one-by-one is impractical.
Supported Pages
Bulk-action support is available on:
- Properties
- Tenancies
- Check-In
- Check-Out
- Tenants
- Archives
How It Works
Selecting Items
When a list page has the selectable prop enabled, each card or row displays a leading checkbox. You can:
- Click an individual checkbox to select that record.
- Use a select-all control to select every visible item on the current page.
- Click a selected checkbox again to deselect it.
Contextual Action Bar
Once one or more items are selected, a contextual action bar slides in above the list. The actions shown depend on which page you are on:
| Page | Available Bulk Actions |
|---|---|
| Tenancies | Run compliance check, Export selected |
| Properties | Bulk assign to branch, Bulk mark as archived |
| Archives | Bulk delete |
| Tenants | Bulk send reminders |
| Check-In / Check-Out | (actions contextual to workflow stage) |
The action bar dismisses automatically when the selection is cleared.
Technical Notes
selectable Prop
List pages accept an optional boolean selectable prop. When true, the selection UI is activated:
<TenanciesList selectable />
When omitted or false, list pages render exactly as before — there is no change to the default behaviour.
useSelectable Hook
Selection state is managed by the shared useSelectable hook. Use it directly if you are building a custom list view that needs the same selection pattern:
const {
selectedIds,
isSelected,
toggleItem,
selectAll,
clearSelection,
} = useSelectable(items);
| Return value | Type | Description |
|---|---|---|
selectedIds | Set<string> | IDs of currently selected items |
isSelected(id) | (id: string) => boolean | Whether a given item is selected |
toggleItem(id) | (id: string) => void | Select or deselect a single item |
selectAll() | () => void | Select all items passed to the hook |
clearSelection() | () => void | Deselect all items |
FilterToolbar Integration
The bulk-selection pattern lives inside src/components/filter-toolbar.tsx. The FilterToolbar renders the checkbox controls and the contextual action bar as part of its existing toolbar layout, keeping the UI consistent with search and filter controls already present on every list page.