v1.4.0: Sonderführung, Zeiterfassung, Enter-Navigation, Objektsuche

- Sonderführung: neues Feld 'Name/Gruppe' (DB-Spalte SonderName), in Liste sichtbar
- Wetter: Race-Condition behoben (API überschreibt DB-Werte beim Bearbeiten nicht mehr)
- Zeiterfassung: TimePicker5 ersetzt durch freie Texteingabe (TimeInput) mit Validierung
- Enter-Taste: navigiert zum nächsten Feld statt die Form abzuschicken; Luftdruck → zurück zu Art; Bemerkungen bleibt normal
- Objektsuche: Freitext-Suche im ObjektSelector, filtert nach Präfix (case-insensitive)
- UI-Anpassungen: kompakteres Layout (space-y-2, kleinere Abstände)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-04 08:50:51 +02:00
parent 743bebca2d
commit 8bff795247
9 changed files with 198 additions and 81 deletions
+4 -2
View File
@@ -13,9 +13,10 @@ interface Props {
placeholder: string;
onChange: (value: string) => void;
keepOpen?: boolean;
id?: string;
}
export default function CustomSelect({ options, placeholder, onChange, keepOpen = false }: Props) {
export default function CustomSelect({ options, placeholder, onChange, keepOpen = false, id }: Props) {
const [open, setOpen] = useState(false);
const ref = useRef<HTMLDivElement>(null);
@@ -37,9 +38,10 @@ export default function CustomSelect({ options, placeholder, onChange, keepOpen
return (
<div ref={ref} className="relative">
<button
id={id}
type="button"
onClick={() => setOpen((v) => !v)}
className="w-full flex items-center justify-between px-4 py-2 border-2 border-gray-400 rounded-lg bg-white text-sm text-gray-900 focus:border-blue-500 focus:outline-none"
className="w-full flex items-center justify-between px-2 py-1 border-2 border-gray-400 rounded-lg bg-white text-sm text-gray-900 focus:border-blue-500 focus:outline-none"
>
<span>{placeholder}</span>
<svg