import React, { useEffect, useMemo, useRef, useState } from 'react' import { skillCatalogPathLabel } from '../utils/skillCatalogTree' import SkillTreePickerPanel from './SkillTreePickerPanel' /** * Einzelauswahl einer Fähigkeit als hierarchische Treeview. */ export default function SkillTreeSelect({ value = '', onChange, skills = [], excludeIds, placeholder = 'Fähigkeit wählen…', disabled = false, className = '', searchPlaceholder = 'Fähigkeit suchen…', }) { const [open, setOpen] = useState(false) const [query, setQuery] = useState('') const rootRef = useRef(null) const selected = useMemo(() => { const id = value ? Number(value) : NaN if (!Number.isFinite(id)) return null return skills.find((s) => Number(s.id) === id) || null }, [value, skills]) const displayLabel = selected ? skillCatalogPathLabel(selected) : '' useEffect(() => { const onDoc = (e) => { if (!rootRef.current?.contains(e.target)) { setOpen(false) setQuery('') } } document.addEventListener('mousedown', onDoc) return () => document.removeEventListener('mousedown', onDoc) }, []) const pick = (skillId) => { onChange(String(skillId)) setOpen(false) setQuery('') } return (
{open ? (
setQuery(e.target.value)} autoComplete="off" />
) : null}
) }