Files
MABEA/frontend/src/pages/admin/StandortSection.tsx
T
patrickandClaude Sonnet 5 f6084e2d5a
CI / backend-tests (push) Successful in 53s
CI / frontend-build (push) Successful in 34s
Refactor: große Dateien in kleinere Module/Komponenten aufgeteilt
Explizite Vorgabe: keine wachsenden Monolith-Dateien. AdminPage.tsx (349
Zeilen) in pages/admin/{Standort,Material,Objekt}Section.tsx aufgeteilt,
KontrollPage.tsx (277 Zeilen) in pages/kontrolle/{useKontrolle,
PositionCard,StatusBadge,types} aufgeteilt, services/kontrolle.py (332
Zeilen) in ein Package (lifecycle/erfassung/exceptions) aufgeteilt -
öffentliche API bleibt über __init__.py unverändert re-exportiert, kein
bestehender Import musste angepasst werden. Reines Refactoring, keine
Verhaltensänderung.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
2026-09-04 00:45:18 +02:00

57 lines
1.6 KiB
TypeScript

import { useState } from "react";
import { apiRequest } from "../../api/client";
import type { Standort } from "../../api/types";
interface Props {
standorte: Standort[];
onGeaendert: () => Promise<void>;
onFehler: (text: string) => void;
}
export function StandortSection({ standorte, onGeaendert, onFehler }: Props) {
const [name, setName] = useState("");
const [wirdAngelegt, setWirdAngelegt] = useState(false);
async function anlegen() {
setWirdAngelegt(true);
try {
await apiRequest("/standorte", { method: "POST", body: { name } });
setName("");
await onGeaendert();
} catch {
onFehler("Standort konnte nicht angelegt werden.");
} finally {
setWirdAngelegt(false);
}
}
return (
<section className="section">
<h2>Standort anlegen</h2>
<div className="card">
<div className="row" style={{ marginBottom: standorte.length ? "1rem" : 0 }}>
<input
className="input"
value={name}
onChange={(e) => setName(e.target.value)}
placeholder="Name des Standorts"
/>
<button className="btn btn-primary" onClick={anlegen} disabled={!name || wirdAngelegt}>
Anlegen
</button>
</div>
{standorte.length > 0 && (
<ul className="card-list">
{standorte.map((s) => (
<li key={s.id} className="row-between" style={{ padding: "0.4rem 0" }}>
<span>{s.name}</span>
</li>
))}
</ul>
)}
</div>
</section>
);
}