Files
cobble/src/functions/backend/database/clamp-page.ts
T
tben 41bb4aaac2 Let a super admin read the database from the app
A new super admin settings page, /admin/settings/database, lists every
table with its record count and size, and one page of the open table's
records newest key first. Values are cut inside SQL (400 characters, with
a flag saying so) and a record opens whole in a modal, so a table of long
texts reads without shipping it all. A search matches every column's
text, word by word or as a phrase, which is the one thing that also works
on a virtual table. Nothing in it writes: the catalog, the records and
the single record are all reads, GET only.
2026-10-23 06:03:42 +01:00

24 lines
704 B
TypeScript

type Params = {
/**
* The page asked for, from 1.
*/
page: number;
/**
* How many records the table holds (or how many matched a search).
*/
total: number;
page_size: number;
};
/**
* The page that actually gets read: a page past the end of the table lands
* on its last one (so a stale link or a deleted record never shows an empty
* page), and a table with nothing in it still has a first page.
*/
export default function clampPage({ page, total, page_size }: Params): number {
const size = Math.max(1, Math.trunc(page_size) || 1);
const last = Math.max(1, Math.ceil(total / size));
return Math.min(Math.max(1, Math.trunc(page) || 1), last);
}