"use client"; import { type FormEvent, useState } from "react"; import { FormModal } from "../components/form-modal"; import type { CreateEstimateBalanceInput, EstimateBalanceDto, EstimateBalanceTemplate, } from "../types"; import { estimateTextLimits } from "./estimate-balance-document"; import { getTodayIsoDate } from "./estimate-balance-format"; export interface EstimateBalanceCreateDefaults { name?: string; workStage?: string | null; template?: EstimateBalanceTemplate; copyFromBalanceId?: string; } interface EstimateBalanceCreateModalProps { balances: EstimateBalanceDto[]; defaults: EstimateBalanceCreateDefaults; isSaving: boolean; onClose: () => void; onCreate: (input: CreateEstimateBalanceInput) => void; } /** "Neuer Stand": name, LPH, date and the starting content. */ export function EstimateBalanceCreateModal({ balances, defaults, isSaving, onClose, onCreate, }: EstimateBalanceCreateModalProps) { const [name, setName] = useState(defaults.name ?? ""); const [workStage, setWorkStage] = useState(defaults.workStage ?? ""); const [dateIso, setDateIso] = useState(getTodayIsoDate()); const [template, setTemplate] = useState( defaults.template ?? "kg400" ); const [copyFromBalanceId, setCopyFromBalanceId] = useState( defaults.copyFromBalanceId ?? balances[0]?.id ?? "" ); const isCopyInvalid = template === "copy" && !copyFromBalanceId; function handleSubmit(event: FormEvent) { event.preventDefault(); if (!name.trim() || isCopyInvalid) { return; } onCreate({ name: name.trim(), workStage: workStage.trim() || null, dateIso: dateIso || null, template, ...(template === "copy" ? { copyFromBalanceId } : {}), }); } return (
setName(event.target.value)} placeholder="z. B. Entwurfsplanung" required value={name} />
setWorkStage(event.target.value)} placeholder="z. B. LPH 3" value={workStage} />
setDateIso(event.target.value)} type="date" value={dateIso} />
{template === "copy" ? (
) : null}

{template === "kg400" ? "Legt die Kostengruppen 410 bis 480 und „Allgemein“ ohne Einträge an." : template === "empty" ? "Legt einen Stand ohne Kostengruppen an." : "Übernimmt alle Kostengruppen und Zeilen des gewählten Stands."}

); }