fix(files): review round 1, the page — honest states, the keyboard, the tray's words
- A library past the list's cap is searched and sorted on the server; the count says "the newest". - Each folder and each search opens on its first page (DataTable pageScope, useCardPager scope). - A file dropped where the page takes none never reaches the browser (which would unload the app). - The viewer's arrows wait while a layer opened from it is on top, and scroll a wide text line; a text shows its first 5000 lines and says where the rest is. - Confirms name the file (no more "your downloads"); the asking menu rows end in "…". - The tray names a running step beside its bar, shows a pause mark for paused work, polls slowly while only paused work waits, and forgets a finished file that was deleted. - An unchanged rename sends nothing; a paste opens the download dialog only with nothing on top; the link box never replaces what was typed. - Honest states: folders that failed to load, a file no longer there, the storage figure; the rail says "nothing downloaded" only when there is nothing. - Focus after deleting the open folder and when the format form opens; the format name's label. - ui/Meter (one danger line for both quota bars) and ui/RenameField in the platform layer. - Copy fixes, stale comments and the speculative hub key; a contract test for the list's parameters; e2e: the Files page and the paste intake.
This commit is contained in:
@@ -19,7 +19,13 @@ export interface FileFolder {
|
||||
created_at: string | null;
|
||||
}
|
||||
|
||||
// The most files one list answers with (backend `routes/files.py` MAX_LIST, held equal by
|
||||
// files.contract.test.ts): a list this long may be missing older files, so the page asks the
|
||||
// server to search and sort it rather than doing either on the rows it got.
|
||||
export const FILES_LIST_CAP = 500;
|
||||
|
||||
export type FileSort = "added" | "name" | "size";
|
||||
export const FILE_SORTS: readonly FileSort[] = ["added", "name", "size"];
|
||||
export type FileOrder = "asc" | "desc";
|
||||
|
||||
export interface FileListParams {
|
||||
@@ -69,7 +75,8 @@ export interface StorageUsage {
|
||||
upload_max_bytes: number;
|
||||
}
|
||||
|
||||
function listQuery(p: FileListParams): string {
|
||||
/** The list's query string — exported for the contract test that holds its names to the route's. */
|
||||
export function listQuery(p: FileListParams): string {
|
||||
const q = new URLSearchParams();
|
||||
if (p.shared) q.set("scope", "shared");
|
||||
else if (p.folderId != null) q.set("folder_id", String(p.folderId));
|
||||
|
||||
Reference in New Issue
Block a user