fix(logos): „Mehr laden“ beginnt von vorn, wenn der Cursor nicht mehr existiert
Schlussreview F2. Hat jemand das Logo gelöscht oder ausgeblendet, hinter dem „Mehr laden“ ansetzt (der Cursor), antwortet Appwrite mit
400 `general_cursor_not_found`. „Nochmal versuchen“ wiederholte dann denselben Cursor und scheiterte immer wieder.
- Dieser Fehlertyp beim Nachladen löst jetzt `load('reset')` aus: die erste Seite der aktuellen Ansicht (gleiche Sortierung, gleicher Filter)
wird neu geladen, die Kachel des gewählten Logos bleibt stehen. Kein Fehlertext, kein „Nochmal versuchen“ für den toten Cursor.
- Jeder andere Fehler beim Nachladen und jeder Fehler beim Laden der ersten Seite bleibt wie bisher (Meldung und „Nochmal versuchen“);
die erste Seite hat keinen Cursor, ein Neuladen im Kreis ist ausgeschlossen.
- Tests mit einem Fehler {code: 400, type: 'general_cursor_not_found'}: Neuladen von Seite 1 mit Anfragefolge, Ansicht „Gemeldet“ bleibt,
gewählte Kachel bleibt, Neuladen scheitert selbst, anderer Fehlertyp, Fehlertyp beim ersten Laden.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
202254c09e
commit
ec4e80c62c
2 files changed
+111
-1
No files matched your search
@@ -43,6 +43,14 @@ export interface LogoPicker {
|
||||
|
||||
const LOAD_ERROR = msg('Die Logos konnten nicht geladen werden.');
|
||||
|
||||
/**
|
||||
* Das Logo, hinter dem „Mehr laden“ ansetzt (der Cursor), gibt es nicht mehr, weil jemand es gelöscht oder ausgeblendet hat: Appwrite
|
||||
* antwortet mit 400 `general_cursor_not_found`. Ein Wiederholen mit demselben Cursor scheitert dann immer wieder.
|
||||
*/
|
||||
function isCursorGone(err: unknown): boolean {
|
||||
return typeof err === 'object' && err !== null && (err as { type?: unknown }).type === 'general_cursor_not_found';
|
||||
}
|
||||
|
||||
/**
|
||||
* Die Ansichten des Umschalters. „Beliebt“ und „Neu“ sind öffentlich, „Gemeldet“ und „Ausgeblendet“ nur für Admins (der Server prüft
|
||||
* die Rechte; hier erscheinen die Knöpfe nur für sie). Die Admin-Ansichten zeigen die neuesten zuerst.
|
||||
@@ -337,9 +345,14 @@ export function createLogoPicker(handlers: { onSelect(id: string | null): void }
|
||||
nextCursor = page.nextCursor;
|
||||
addLogos(page.logos);
|
||||
void loadHearts(page.logos.map((logo) => logo.id));
|
||||
} catch {
|
||||
} catch (err) {
|
||||
if (disposed || token !== loadToken) return;
|
||||
loading = false;
|
||||
if (mode === 'more' && isCursorGone(err)) {
|
||||
// Die Liste hat sich unter dem Cursor verändert: statt eines Fehlers, den „Nochmal versuchen“ nicht beheben kann, von vorn laden.
|
||||
void load('reset');
|
||||
return;
|
||||
}
|
||||
failed = mode;
|
||||
statusEl.textContent = t(LOAD_ERROR);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user