'use client'; import { useActionState } from 'react'; import { Absenden, Meldung } from '@/komponenten/Formularmeldung'; import { gespraechBestaetigen, gespraechSpeichern, type Rueckmeldung } from './aktionen'; import { liegtWeitAuseinander, type Gespraechsinhalt } from '@/lib/feedback/inhalt'; /** * Der Bogen für das Gespräch. * * Jede Seite trägt ihre eigene Spalte ein: der Ausbilder seine Einschätzung * und die Freitexte, der Azubi seine Selbsteinschätzung. Wo beide deutlich * auseinanderliegen, wird das hervorgehoben – genau darüber lohnt das * Gespräch. */ export function Gespraechsformular({ gespraechId, inhalt, leitfaden, istAzubi, gesperrt, datum, bereitsBestaetigt, }: { gespraechId: string; inhalt: Gespraechsinhalt; leitfaden: { abschnitt: string; fragen: string[] }[]; istAzubi: boolean; gesperrt: boolean; datum: string; bereitsBestaetigt: boolean; }) { const [speicherstand, speichern] = useActionState(gespraechSpeichern, {}); const [bestaetigungsstand, bestaetigen] = useActionState(gespraechBestaetigen, {}); const eigeneSpalte = istAzubi ? 'azubi' : 'ausbilder'; return (
{/* Nach Abschluss steht das Datum schon groß im Kopf – ein zweites, gesperrtes Feld daneben sagt nichts dazu. */} {!istAzubi && !gesperrt ? (
) : null} {/* --- Bewertungsbogen --- */}

Bewertungsbogen

{inhalt.skala[0]?.wert} = {inhalt.skala[0]?.text} bis {inhalt.skala.at(-1)?.wert} ={' '} {inhalt.skala.at(-1)?.text}.{' '} {istAzubi ? 'Du trägst deine Selbsteinschätzung ein – die Spalte des Ausbilders ist für dich gesperrt.' : 'Du trägst deine Einschätzung ein; die Selbsteinschätzung kommt vom Azubi.'}

    {inhalt.kriterien.map((kriterium) => { const bewertung = inhalt.bewertungen.find((b) => b.kriteriumId === kriterium.id); const eigener = eigeneSpalte === 'azubi' ? bewertung?.azubi : bewertung?.ausbilder; const anderer = eigeneSpalte === 'azubi' ? bewertung?.ausbilder : bewertung?.azubi; const weitAuseinander = liegtWeitAuseinander(bewertung); return (
  • {kriterium.titel} {kriterium.erlaeuterung}
    {istAzubi ? 'Deine Selbsteinschätzung' : 'Deine Einschätzung'} für {kriterium.titel} {inhalt.skala.map((stufe) => ( ))}
    {anderer === null || anderer === undefined ? `${istAzubi ? 'Ausbilder' : 'Azubi'}: noch offen` : `${istAzubi ? 'Ausbilder' : 'Selbsteinschätzung'}: ${anderer} (${ inhalt.skala.find((s) => s.wert === anderer)?.text ?? '' })`} {weitAuseinander ? ( ! unterschiedliche Sicht ) : null}
    {/* Wer nicht schreiben darf oder kann, sieht die Bemerkung als Text – und ein leeres Feld gar nicht. Ein abgeschlossenes Blatt für die Akte soll nicht voller Platzhalter stehen. */} {istAzubi || gesperrt ? ( bewertung?.bemerkung ? (

    {bewertung.bemerkung}

    ) : null ) : ( )}
  • ); })}
{/* --- Freitexte --- */} {/* Nach Abschluss liest auch der Ausbilder nur noch – ein gesperrtes Eingabefeld sieht aus, als könnte man es doch noch benutzen. */} {istAzubi || gesperrt ? (

Stärken, Entwicklungsfelder, Ziele

{inhalt.sonstiges ? : null}
) : (

Stärken, Entwicklungsfelder, Ziele