Kontrolle: Abschnitt Aufträge lädt auch bei ausgefallenen Projektkonten

Scheitert getProjektkonten, wird die Auftragsliste trotzdem geholt; kommt sie, bleibt der
Abschnitt bedienbar und der Fehler der Projekte steht eigens daneben.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-07 15:18:03 +00:00
1 parent b556a459bb
commit 07d36f64e9
2 files changed
+60 -11

No files matched your search

+29 -8
View File
@@ -11,12 +11,30 @@ const ohneProjektLeer = () => ({ berechnetCents: 0, bezahltCents: 0, anzahl: 0 }
/**
* Lädt Projektkonten und, nur bei eingeschaltetem Schalter (`auftraegeAktiv === true`), die Aufträge des Kunden.
* Scheitert getProjektkonten, geht der Fehler weiter (keine Aufträge, sie würden ohne Schalter 404 liefern).
* Scheitert nur listAuftraege, bleiben die Projektkonten und der Fehler steht eigens da.
* -> { konten, auftraege: Liste | null, auftraegeFehler: Text | '' }
* Scheitert getProjektkonten, wird die Auftragsliste trotzdem geholt (der Server prüft den Schalter ohnehin und antwortet bei
* „aus“ mit 404): kommt sie, bleibt der Abschnitt Aufträge bedienbar und der Fehler steht als `kontenFehler` daneben;
* kommt sie nicht, geht der Fehler der Projektkonten weiter.
* -> { konten, auftraege: Liste | null, auftraegeFehler: Text | '', kontenFehler?: Text (nur bei ausgefallenen Projektkonten) }
*/
export async function ladeAuftraegeAnsicht(kundeId, { getProjektkonten, listAuftraege }) {
const antwort = await getProjektkonten(kundeId)
let antwort
try {
antwort = await getProjektkonten(kundeId)
} catch (kontenErr) {
let liste
try {
liste = await listAuftraege(kundeId)
} catch {
throw kontenErr
}
return {
konten: {},
kontenFehler: (kontenErr && kontenErr.message) || KONTEN_FEHLER,
auftraege: Array.isArray(liste?.auftraege) ? liste.auftraege : [],
auftraegeFehler: '',
}
}
const konten = istObjekt(antwort) ? antwort : {}
if (konten.auftraegeAktiv !== true) return { konten, auftraege: null, auftraegeFehler: '' }
try {
@@ -33,7 +51,8 @@ export async function ladeAuftraegeAnsicht(kundeId, { getProjektkonten, listAuft
* auftraegeAktiv, auftraegeStatus: 'aus' | 'bereit' | 'fehler', auftraegeFehler,
* konten, ohneProjekt, stripeOk, kunde, auftraege }
* Ohne Daten gibt es keinen Aufträge-Abschnitt (der Schalter ist noch unbekannt). Scheitert das Neuladen, nachdem Daten
* da sind, bleiben die alten Daten stehen und die Meldung kommt als `nachladeFehler` daneben.
* da sind, bleiben die alten Daten stehen und die Meldung kommt als `nachladeFehler` daneben. Waren die Projektkonten
* ausgefallen und die Aufträge trotzdem da (`data.kontenFehler`), ist `projekteStatus` „fehler“ und die Aufträge sind bereit.
*/
export function ansichtsZustand({ data, error } = {}) {
if (!data) {
@@ -52,12 +71,14 @@ export function ansichtsZustand({ data, error } = {}) {
}
}
const k = istObjekt(data.konten) ? data.konten : {}
const auftraegeAktiv = k.auftraegeAktiv === true
const kontenFehler = typeof data.kontenFehler === 'string' ? data.kontenFehler : ''
// Mit ausgefallenen Projektkonten gilt der Schalter als an, wenn der Server die Auftragsliste geliefert hat
const auftraegeAktiv = kontenFehler ? Array.isArray(data.auftraege) : k.auftraegeAktiv === true
const auftraegeStatus = !auftraegeAktiv ? 'aus' : data.auftraegeFehler ? 'fehler' : 'bereit'
return {
projekteStatus: 'bereit',
fehler: '',
nachladeFehler: error || '',
projekteStatus: kontenFehler ? 'fehler' : 'bereit',
fehler: kontenFehler ? error || kontenFehler : '',
nachladeFehler: kontenFehler ? '' : error || '',
auftraegeAktiv,
auftraegeStatus,
auftraegeFehler: auftraegeStatus === 'fehler' ? data.auftraegeFehler : '',