import React, { useState } from 'react' import { newCatalogRuleKey } from '../constants/exerciseListFilters' /** * Kompakte +/- Regeln für Katalogwerte (numerische IDs oder Slugs). * Chips oben, schmales Dropdown, Schalter nur „+“ und „−“. */ export default function CatalogRulePicker({ label, hint, options = [], rules = [], rulesFieldName, disabled = false, placeholder = 'Auswählen …', idKind = 'numeric', onPatch, }) { const [pendingId, setPendingId] = useState('') const labelFor = (id) => options.find((o) => String(o.id) === String(id))?.label ?? id const addRule = (mode) => { const raw = String(pendingId || '').trim() if (!raw || disabled) return if (idKind === 'numeric') { const n = Number(raw) if (!Number.isFinite(n) || n < 1) return } const dup = (rules || []).some((r) => String(r.id) === raw && r.mode === mode) if (dup) return onPatch({ [rulesFieldName]: [ ...(rules || []), { key: newCatalogRuleKey(rulesFieldName), id: raw, mode }, ], }) setPendingId('') } const removeRule = (key) => { onPatch({ [rulesFieldName]: (rules || []).filter((r) => r.key !== key), }) } return (
{hint ? (

{hint}

) : null}
{(rules || []).map((r) => ( {r.mode === 'forbid' ? '−' : '+'} {labelFor(r.id)} ))}
) }