Admin-Portal: Bearbeiten für Bereich/Kategorie/Objekttyp/Standort/Benutzer,
CI / backend-tests (push) Successful in 57s
CI / frontend-build (push) Successful in 20s

Vorlagen-Versionierung und Objekt-Duplizieren im Frontend nachgerüstet

Backend: PATCH-Endpoints für Bereich/Kategorie/Standort/Objekttyp ergänzt
(analog zu Material), die bislang fehlten und Bearbeiten grundsätzlich
unmöglich machten.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
2026-09-04 09:55:52 +02:00
co-authored by Claude Sonnet 5
parent 1987818b8c
commit 2f11011ed1
12 changed files with 786 additions and 24 deletions
+40 -2
View File
@@ -16,6 +16,23 @@ export function ObjekttypSection({ bereiche, kategorien, objekttypen, onGeaender
const [bereichId, setBereichId] = useState<number | "">("");
const [kategorieId, setKategorieId] = useState<number | "">("");
const [wirdAngelegt, setWirdAngelegt] = useState(false);
const [bearbeiteteId, setBearbeiteteId] = useState<number | null>(null);
const [bearbeitungsName, setBearbeitungsName] = useState("");
function bearbeiten(o: Objekttyp) {
setBearbeiteteId(o.id);
setBearbeitungsName(o.name);
}
async function speichern(id: number) {
try {
await apiRequest(`/objekttypen/${id}`, { method: "PATCH", body: { name: bearbeitungsName } });
setBearbeiteteId(null);
await onGeaendert();
} catch {
onFehler("Objekttyp konnte nicht geändert werden.");
}
}
async function anlegen() {
if (bereichId === "") {
@@ -74,8 +91,29 @@ export function ObjekttypSection({ bereiche, kategorien, objekttypen, onGeaender
{objekttypen.length > 0 && (
<ul className="card-list">
{objekttypen.map((o) => (
<li key={o.id} style={{ padding: "0.4rem 0" }}>
{o.name}
<li key={o.id} className="row-between" style={{ padding: "0.4rem 0" }}>
{bearbeiteteId === o.id ? (
<div className="row" style={{ flex: 1 }}>
<input
className="input"
value={bearbeitungsName}
onChange={(e) => setBearbeitungsName(e.target.value)}
/>
<button className="btn btn-primary" onClick={() => speichern(o.id)}>
Speichern
</button>
<button className="btn btn-secondary" onClick={() => setBearbeiteteId(null)}>
Abbrechen
</button>
</div>
) : (
<>
<span>{o.name}</span>
<button className="btn btn-secondary" onClick={() => bearbeiten(o)}>
Bearbeiten
</button>
</>
)}
</li>
))}
</ul>