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.
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user