'use client'; import { useEffect, useState } from 'react'; import type { ObjektOption, SelectedObjekt } from '@/types/logbuch'; import CustomSelect from './CustomSelect'; interface Props { selected: SelectedObjekt[]; onChange: (objekte: SelectedObjekt[]) => void; } export default function ObjektSelector({ selected, onChange }: Props) { const [all, setAll] = useState([]); const [newName, setNewName] = useState(''); const [showNewInput, setShowNewInput] = useState(false); useEffect(() => { fetch('/api/objekte') .then((r) => { if (!r.ok) throw new Error('Fehler'); return r.json(); }) .then(setAll) .catch(() => {}); }, []); const selectedNames = new Set(selected.map((o) => o.Name.toLowerCase())); const available = all.filter((o) => !selectedNames.has(o.Name.toLowerCase())); function add(value: string) { if (value === 'neu') { setShowNewInput(true); return; } const obj = all.find((o) => o.ID === parseInt(value)); if (obj && !selectedNames.has(obj.Name.toLowerCase())) { onChange([...selected, { ID: obj.ID, Name: obj.Name }]); } } function addNew() { const name = newName.trim(); if (!name || selectedNames.has(name.toLowerCase())) return; onChange([...selected, { ID: null, Name: name }]); setNewName(''); setShowNewInput(false); } function remove(name: string) { onChange(selected.filter((o) => o.Name !== name)); } const options = [ { value: 'neu', label: '— Neues Objekt eingeben —' }, ...available.map((o) => ({ value: String(o.ID), label: o.Name })), ]; return (
{selected.map((o) => ( {o.Name} ))}
{showNewInput && (
setNewName(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); addNew(); } }} placeholder="Objektname eingeben" className="flex-1 px-3 py-3 border-2 border-gray-400 rounded-lg bg-white text-base focus:border-blue-500 focus:outline-none" />
)}
); }