"use client"; import { useState } from "react"; import { Blocks } from "lucide-react"; import { AbteilungenWaehlen } from "@/components/vorlagen/abteilungen-waehlen"; import { KlappKarte, LoeschKnopf, TextKnopf, Textfeld } from "@/components/vorlagen/editor-felder"; import { SortierBereich, SortierZeile, VerschiebeKnoepfe } from "@/components/vorlagen/editor-sortieren"; import { SchrittKarte } from "@/components/vorlagen/editor-schritt"; import { abschnittNummer, type EditorAbschnitt, type EditorSchritt } from "@/lib/editor-aufbau"; import { GRENZEN } from "@/lib/vorlagen-format"; /** * Ein Abschnitt mit seinen Schritten (#010). * * Die Nummer links steht fuer die Position und wird nie gespeichert — wer den * Abschnitt verschiebt, bekommt sofort die neue Nummer zu sehen. * * Aufgeklappt als Standard, anders als Schritte und Variablen: man arbeitet in * aller Regel in einem Abschnitt und will seine Schritte sehen. Zugeklappt steht * die Zahl der Schritte daneben, damit beim Umsortieren klar ist, was da * gerade wandert. * * Schritte werden innerhalb ihres Abschnitts sortiert; jeder Abschnitt hat dazu * seinen eigenen Sortierbereich. Ein Schritt laesst sich damit nicht in einen * anderen Abschnitt ziehen — das braucht die Vorlagenpflege nicht, und ein * Bereich ueber alle Abschnitte hinweg haette am Handy Ziehwege von mehreren * Bildschirmhoehen. */ export function AbschnittKarte({ abschnitt, index, anzahl, lesend, abteilungen, zuletztAngelegt, anfasser, aendern, loeschen, aufSortiert, schrittAendern, schrittHinzufuegen, schrittLoeschen, schritteUmsortieren, }: { abschnitt: EditorAbschnitt; index: number; anzahl: number; lesend: boolean; /** Die gepflegten Abteilungsnamen – für die Einschränkung (#031). */ abteilungen: readonly string[]; /** Kennung der zuletzt angelegten Zeile — die wird aufgeklappt gezeigt. */ zuletztAngelegt: string | null; anfasser: React.ReactNode; aendern: (teil: Partial) => void; loeschen: () => void; aufSortiert: (von: number, nach: number) => void; schrittAendern: (kennung: string, teil: Partial) => void; schrittHinzufuegen: () => void; schrittLoeschen: (kennung: string) => void; schritteUmsortieren: (von: number, nach: number) => void; }) { const [offen, setzeOffen] = useState(true); const voll = abschnitt.schritte.length >= GRENZEN.schritteJeAbschnitt; const anzahlSchritte = abschnitt.schritte.length; const baustein = abschnitt.baustein; return ( setzeOffen((vorher) => !vorher)} flaeche="flaeche" ueberschrift anfasser={anfasser} kopf={ <> {abschnittNummer(index)} · {abschnitt.titel.trim() === "" ? "ohne Titel" : abschnitt.titel} {anzahlSchritte} {anzahlSchritte === 1 ? "Schritt" : "Schritte"} {baustein ? ( ) : null} {abschnitt.nurFuerAbteilungen.length > 0 ? ( nur {abschnitt.nurFuerAbteilungen.join(", ")} ) : null} } knoepfe={ lesend ? null : ( <> 0 ? { frage: `Abschnitt mit ${anzahlSchritte} ${ anzahlSchritte === 1 ? "Schritt" : "Schritten" } löschen?`, } : {})} aufLoeschen={loeschen} /> ) } > {/* Ein Baustein-Abschnitt ist eine **Einheit** (#030): weder Titel noch Schritte lassen sich hier aendern. Beides kommt beim Veroeffentlichen aus dem Baustein, und ein Feld, das man ausfuellen kann und das danach ueberschrieben wird, waere eine Falle. Geaendert wird am Baustein. */} {baustein ? ( <>

Dieser Abschnitt kommt aus dem Baustein{" "} {baustein.name} {baustein.version > 0 ? `, Fassung ${baustein.version}` : ""}. Titel und Schritte werden beim Veröffentlichen von dort eingesetzt — geändert wird sie am Baustein, nicht hier.

Eine neue Fassung des Bausteins wirkt erst in der nächsten veröffentlichten Version dieser Vorlage. Schon veröffentlichte Versionen und laufende Arbeiten bleiben, wie sie sind.

{anzahlSchritte} {anzahlSchritte === 1 ? "Schritt" : "Schritte"} aus dem Baustein.

) : null} {!baustein && !lesend ? ( aendern({ titel })} lesend={lesend} vorschlag="Vorbereitung" /> ) : null} {/* Die Einschraenkung gehoert zur Vorlage und nicht zum Baustein — deshalb steht sie auch bei einem Baustein-Abschnitt (#031). */} aendern({ nurFuerAbteilungen })} /> {baustein ? null : anzahlSchritte === 0 ? (

Noch kein Schritt in diesem Abschnitt.

) : ( schritt.kennung)} art="Schritt" lesend={lesend} aufSortiert={schritteUmsortieren} >
    {abschnitt.schritte.map((schritt, stelle) => ( {(schrittAnfasser) => ( schrittAendern(schritt.kennung, teil)} loeschen={() => schrittLoeschen(schritt.kennung)} aufSortiert={schritteUmsortieren} /> )} ))}
)} {baustein || lesend ? null : ( )}
); }