List page
People spend most of their day on this screen. They find records, narrow
them down and act on several at once. This page is composed from the same parts
as CollectionList: a title and CTA, then the list card with its toolbar,
the table and a paging footer. Search, selection, the filter panel and the
menus all work.
This is a list page you compose yourself inside AuthenticatedShell, with
<CollectionList enableSelection enableFilter bulkActions={…} renderCell={…} />.
buildpad add content-routes renders CollectionList inside ContentLayout
instead: a collection sidebar and a breadcrumb header, with no app shell.
It enables search and selection with an inline Delete bulk action, VTable rows
and a “Per page” footer. The filter toggle appears only with enableFilter,
and it opens an inline panel, not a drawer. See the CollectionList Storybook.
The frames are static compositions of the same Mantine parts with sample data.
Purchase orders
The page adds a title and the ink New order CTA. Inside the card, the toolbar has search, the filter toggle and refresh. Two rows are selected, so the bulk actions appear on the toolbar’s right. Click the filter toggle to open the inline panel. Hover an owner avatar to see the name.
Northwind Ops
/
Purchase orders
Purchase orders
Raise, approve and track supplier orders.
| Order | Supplier | Owner | Status | Amount | ||
|---|---|---|---|---|---|---|
PO-2041 | Atlas Packaging | DO | Pending approval | $12,840 | ||
PO-2040 | Keystone Logistics | PR | Approved | $48,200 | ||
PO-2039 | Brightline Electrical | MS | Draft | $3,150 | ||
PO-2038 | Meridian Foods | DO | Shipped | $7,425 | ||
PO-2037 | Cobalt IT Services | AH | Approved | $21,600 | ||
PO-2036 | Harbor Office Supply | HK | Cancelled | $980 | ||
PO-2035 | Atlas Packaging | DO | Shipped | $15,300 | ||
PO-2034 | Harbor Office Supply | HK | Approved | $1,240 | ||
PO-2033 | Keystone Logistics | PR | Shipped | $36,900 | ||
PO-2032 | Northgate Workwear | MS | Pending approval | $5,480 |
Filters open
The panel opens under the toolbar. It has two rules, an ALL / ANY match toggle and “Add filter”. The toggle turns filled ember with a red count, and the footer says what was filtered out.
Northwind Ops
/
Purchase orders
Purchase orders
Raise, approve and track supplier orders.
Filters
Match
| Order | Supplier | Owner | Status | Amount | ||
|---|---|---|---|---|---|---|
PO-2040 | Keystone Logistics | PR | Approved | $48,200 | ||
PO-2037 | Cobalt IT Services | AH | Approved | $21,600 | ||
PO-2035 | Atlas Packaging | DO | Shipped | $15,300 | ||
PO-2033 | Keystone Logistics | PR | Shipped | $36,900 |
No results
A search that matches nothing keeps the toolbar and table header. VTable shows one dimmed line. Clear the search to bring the rows back.
Northwind Ops
/
Purchase orders
Purchase orders
Raise, approve and track supplier orders.
| Order | Supplier | Owner | Status | Amount | ||
|---|---|---|---|---|---|---|
No results — try adjusting your search or filters | ||||||
Loading
On first load the toolbar is ready. VTable shows “Loading items…” over three 48px Skeleton rows, and the footer reads “Loading…”.
Northwind Ops
/
Purchase orders
Purchase orders
Raise, approve and track supplier orders.
| Order | Supplier | Owner | Status | Amount | ||
|---|---|---|---|---|---|---|
Loading items... | ||||||
First run
The collection has no records yet. The page renders its own empty state in place of the list, with the ink CTA and a docs link. CollectionList on its own keeps its toolbar and shows “No items in this collection”.
Northwind Ops
/
Purchase orders
Purchase orders
Raise, approve and track supplier orders.
No purchase orders yet
Raise your first order to send it for approval. Everything your team orders will be listed here.
How approvals workLoad error
If a fetch fails, a red Alert appears under the toolbar. The toolbar stays usable, and Refresh tries again.
Northwind Ops
/
Purchase orders
Purchase orders
Raise, approve and track supplier orders.
| Order | Supplier | Owner | Status | Amount | ||
|---|---|---|---|---|---|---|
No items in this collection | ||||||
On a phone
At 390px, CollectionList keeps its columns and the table scrolls sideways. For field staff, your page can render a stacked card list below sm instead.
Purchase orders
Purchase orders
| Order | Supplier | Owner | Status | Amount | ||
|---|---|---|---|---|---|---|
PO-2041 | Atlas Packaging | DO | Pending approval | $12,840 | ||
PO-2040 | Keystone Logistics | PR | Approved | $48,200 | ||
PO-2039 | Brightline Electrical | MS | Draft | $3,150 | ||
PO-2038 | Meridian Foods | DO | Shipped | $7,425 | ||
PO-2037 | Cobalt IT Services | AH | Approved | $21,600 | ||
PO-2036 | Harbor Office Supply | HK | Cancelled | $980 |
CollectionList as shipped. The toolbar wraps, the table keeps its columns and scrolls sideways, and the footer wraps under the count.
Purchase orders
Purchase orders
PO-2041
Atlas Packaging
$12,840
PO-2040
Keystone Logistics
$48,200
PO-2039
Brightline Electrical
$3,150
PO-2038
Meridian Foods
$7,425
PO-2037
Cobalt IT Services
$21,600
PO-2036
Harbor Office Supply
$980
1–10 of 128 items
Card list, composed. Below sm your page can render one card per order (number, status, owner, supplier, amount) with the pager underneath.
Menus and toolbar states
The list’s overlays pinned open, and the toolbar controls in each state.
enableAddField): a subtle size="sm" ActionIcon opening a Menu of the hidden fields.--mantine-radius-sm, shadow-md). It is shown here as a Menu.BulkActionsBar sits on the toolbar's right while rows are selected: a light Badge size="lg", then each bulkActions entry as a light compact-sm Button, then a clear button. Approve is this page's action, and Delete passes color="red".Idle
2 rules
primary and a red Badge circle shows the count.Per page
Select size="xs" with bare numbers, after a dimmed "Per page" label./permissions/me fails, the list still loads but turns off writes. A red Alert explains why and offers a light red Retry.Built from
- App shell: sidebar, glass header and user menu from the CLI’s
AuthenticatedShell. - Page headers: a
Title, a dimmed description and the ink CTA, which the page adds above the list. - Data views: the
CollectionListcard. Its toolbar (.collection-list-toolbar), inline filter panel, table and footer copyCollectionList.css. VTable is drawn here with MantineTable. Its checkboxes use the defaultsmsize, and selected rows get no tint. - Badges for status, through the page’s
renderCell.ORDER_STATUSmaps each status togray,yellow,blue,greenorred, and the theme resolves those to the neutral, warning, info, success and danger scales. WithoutrenderCell,CollectionListprints the choice label as text. - Avatar for owners, also through
renderCell. As inUserAvatar, active users getprimaryand everyone else getsgray. - Inputs in the filter rules:
Selects for the field and operator, aNumberInputfor amounts and aTextInputfor dates. - Feedback:
Skeletonrows while loading, and the redAlertfor load and permission errors.
Why the date rule is a text input. FilterPanel gives date fields a
TextInput with a YYYY-MM-DD placeholder, not a date picker, so the
“Due before” rule looks the same in your app. Record forms use the datetime
interface from @buildpad/ui-interfaces, which is built on the @mantine/dates
pickers shown on Inputs.