# Lists, records and forms

> How your data shows in the app: lists that the server filters and counts, a page per record, forms, related lists, safe deletes and exports.

Most screens of a business app are lists of things and pages about one thing. The toolkit gives your app both, built from the shape of your data.

## Lists

A list shows one kind of record (orders, clients, tickets) one page at a time. It has:

- **Search** over the columns that make sense to search. Every word must match.
- **Filters** on a column's values: pick one value or several.
- **Sort** by a click on a column header.
- **Pages** of up to 500 rows, and a count of all matching rows.
- **Selection**: tick rows, or shift click to tick a range, then act on all of them.
- **Export** of every row that matches the current search and filters (not only the page on screen) to a CSV file that any spreadsheet opens.

The search, the filters, the sort and the count all run on the server. The browser receives one page at a time, never the whole table, and the count is always the real one.

The list's search, filters and sort live in the page address. A bookmark or a link to a colleague opens the same view.

## A page per record

A record page shows one record's fields with their labels, and the lists that belong to it: the orders of one client, the lines of one order. Each related list is a full list, with its own search and pages.

## Forms

A form shows one input per field, in the order you asked for: text, numbers, yes or no switches, dates, a pick from a list of values, a pick of another record (the form searches as you type), and files. Required fields are checked before the form sends. If the server refuses a value, its reason shows under that field. A form saves only the fields you changed.

## Safe deletes

Before a record goes, the app counts what still points at it. A client with orders cannot be deleted by mistake: the app says why, and the delete stops. Otherwise it asks you to confirm.

## Numbers you can trust

A total, a count or a sum on a screen comes from the server, over the same filters as the list. When a number cannot be complete (a very large set the screen chose not to read in full), the app says so instead of showing a number that looks exact.

## Who sees what

What a user can list, open, create, change or delete is decided by server rules, written for your app from your requests. The screens follow the rules. They never replace them. See [Trust](https://golocomotive.fr/docs/trust.md).
