Mission 2: Die Oberfläche bauen

Planzeit: 4 Stunden. Achievement: A03 Erste Oberfläche (100 XP) bei 4 von 4 Tests.

Ziel

Aus den Beispieldaten wird eine bedienbare Oberfläche: eine Liste aller Leads und eine Detailansicht mit Zurück-Weg. Du lernst, wie React aus Daten Bildschirme macht und was ein data-testid ist.

Was du baust

Zwei Komponenten, die der Starter nur als Platzhalter enthält:

src/App.tsx ist schon so verdrahtet, dass ein Klick in der Liste die Detailansicht öffnet und der Zurück-Button zur Liste führt. Lies App.tsx mit deinem Agenten, bevor du anfängst; dort siehst du, wie view den Bildschirm steuert.

Der Vertrag mit den Tests

Die Tests rendern <App repository={...} /> mit vier Test-Leads und suchen Elemente über data-testid. Diese Werte müssen exakt stimmen.

Elementdata-testidPflicht
Container der Listelead-listNur sichtbar, wenn es Leads gibt
Eine Zeile pro Leadlead-row-<id>, z.B. lead-row-T-002Zeigt Firma, Kontaktname und Status als Text; Klick ruft onSelect(lead.id)
Leerzustandempty-stateStatt der Liste, wenn keine Leads da sind; mindestens ein verständlicher Satz
Container der Detailansichtlead-detailZeigt Firma, E-Mail und Follow-up-Datum (oder "kein Termin")
Zurück-Buttonback-to-listRuft onBack()
KriteriumWas geprüft wird
C02-M2-01Alle vier Test-Leads erscheinen mit Firma, Kontakt und Status in lead-list.
C02-M2-02Klick auf lead-row-T-002 zeigt lead-detail mit "Rhein Logistik GmbH", der E-Mail und "2026-04-02"; die Liste ist dann nicht mehr sichtbar.
C02-M2-03back-to-list führt zurück zur Liste.
C02-M2-04Ohne Leads erscheint empty-state und keine Zeile.

Schritte

  1. npm run dev starten und die Seite offen lassen. Jede Änderung ist sofort sichtbar.
  2. Bitte deinen Agenten: "Erkläre mir in fünf Sätzen, was App.tsx macht und was props.leads in LeadList ist."
  3. Baue LeadList: Ein <table data-testid="lead-list"> mit einer <tr> pro Lead. Beginne mit zwei Spalten, dann erweitern. Teste im Browser.
  4. Leerzustand: Wenn leads.length === 0, gib stattdessen ein <p data-testid="empty-state"> mit einem hilfreichen Satz zurück. Keine leere Tabelle.
  5. Baue LeadDetail: Zurück-Button zuerst, dann die Felder. Wenn lead undefined ist: "Lead nicht gefunden" und trotzdem der Zurück-Button.
  6. npm run bic -- check 2. Lies jede rote Zeile. Ein Unable to find an element by: [data-testid="lead-list"] heisst: Das Element fehlt oder heisst anders.
  7. Tastatur: Kannst du mit Tab und Enter einen Lead öffnen? Wenn nicht, ergänze einen Button in der Zeile. Das prüft kein Test, aber die Prüfung fragt danach.
  8. git commit -am "Mission 2: Liste und Detail", Eintrag im KI-PROTOKOLL, npm run bic -- submit 2.

Typische Stolpersteine

Erklären

Hinweise

missions/hints/02-1.md (Liste), missions/hints/02-2.md (Leerzustand), missions/hints/02-3.md (Detail und Zurück).

Weiter mit missions/03-daten-und-regeln.md.