Feste Fächer-Liste je Objekttyp (Vorlagen-Positionen: Dropdown + Sonstiges)
Nutzer-Vorgabe: Rucksack-Fächer sollen aus einer festen, je Objekttyp gepflegten Liste gewählt werden können statt jedes Mal Freitext einzutippen. Neue Tabelle fach (Migration 0004), CRUD-Endpoints /faecher, Admin-Tab Struktur bekommt Fach-Verwaltung, Vorlagen-Editor nutzt Dropdown mit "Sonstiges"-Freitext-Fallback. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { useState } from "react";
|
||||
|
||||
import { apiRequest } from "../../api/client";
|
||||
import type { Beladungsvorlage, Material, Objekttyp } from "../../api/types";
|
||||
import type { Beladungsvorlage, Fach, Material, Objekttyp } from "../../api/types";
|
||||
import { FachAuswahl } from "./FachAuswahl";
|
||||
|
||||
interface PositionZeile {
|
||||
materialId: number | "";
|
||||
@@ -15,11 +16,12 @@ interface Props {
|
||||
vorlagen: Beladungsvorlage[];
|
||||
objekttypen: Objekttyp[];
|
||||
materialien: Material[];
|
||||
faecher: Fach[];
|
||||
onGeaendert: () => Promise<void>;
|
||||
onFehler: (text: string) => void;
|
||||
}
|
||||
|
||||
export function VorlageSection({ vorlagen, objekttypen, materialien, onGeaendert, onFehler }: Props) {
|
||||
export function VorlageSection({ vorlagen, objekttypen, materialien, faecher, onGeaendert, onFehler }: Props) {
|
||||
const [name, setName] = useState("");
|
||||
const [objekttypId, setObjekttypId] = useState<number | "">("");
|
||||
const [zeilen, setZeilen] = useState<PositionZeile[]>([LEERE_ZEILE]);
|
||||
@@ -129,12 +131,10 @@ export function VorlageSection({ vorlagen, objekttypen, materialien, onGeaendert
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
<input
|
||||
className="input"
|
||||
style={{ width: "8rem" }}
|
||||
value={zeile.fach}
|
||||
onChange={(e) => zeileAendern(i, { fach: e.target.value })}
|
||||
placeholder="Fach"
|
||||
<FachAuswahl
|
||||
faecher={faecher.filter((f) => f.objekttyp_id === objekttypId)}
|
||||
wert={zeile.fach}
|
||||
onAendern={(wert) => zeileAendern(i, { fach: wert })}
|
||||
/>
|
||||
<input
|
||||
className="input"
|
||||
@@ -189,12 +189,10 @@ export function VorlageSection({ vorlagen, objekttypen, materialien, onGeaendert
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
<input
|
||||
className="input"
|
||||
style={{ width: "8rem" }}
|
||||
value={zeile.fach}
|
||||
onChange={(e) => neueVersionZeileAendern(i, { fach: e.target.value })}
|
||||
placeholder="Fach"
|
||||
<FachAuswahl
|
||||
faecher={faecher.filter((f) => f.objekttyp_id === v.objekttyp_id)}
|
||||
wert={zeile.fach}
|
||||
onAendern={(wert) => neueVersionZeileAendern(i, { fach: wert })}
|
||||
/>
|
||||
<input
|
||||
className="input"
|
||||
|
||||
Reference in New Issue
Block a user