import React from 'react' /** * Kompakte Katalog-Zuordnung (Fokus, Stile, Zielgruppen …) als Chip-Zeilen. */ export default function ExerciseCatalogAssocEditor({ title, rows, setRows, options, idKey, emptyLabel, showPrimary = true, }) { const setPrimary = (idx) => { setRows(rows.map((r, i) => ({ ...r, is_primary: i === idx }))) } const updateRow = (idx, patch) => { const next = rows.map((r, i) => (i === idx ? { ...r, ...patch } : r)) if (patch.is_primary === true) { next.forEach((r, i) => { if (i !== idx) r.is_primary = false }) } setRows(next) } const addRow = () => setRows([...rows, { [idKey]: '', is_primary: rows.length === 0 }]) const removeRow = (idx) => { const next = rows.filter((_, i) => i !== idx) if (next.length && showPrimary && !next.some((r) => r.is_primary)) next[0].is_primary = true setRows(next) } const optionLabel = (o) => { const parts = [] if (o.icon) parts.push(o.icon) parts.push(o.name) if (o.abbreviation) parts.push(`(${o.abbreviation})`) return parts.join(' ') } return (
{emptyLabel}
) : (