Web: Kategorie-Filter - Oberkategorie subtil + als eigener Eintrag waehlbar
Die DataTable kann jetzt je Spalte mehrere Filter-Werte pro Zeile (filterValues/Tokens) und eine eigene Option-Darstellung (filterOptionLabel). Die Kategorie-Spalte liefert als Tokens jede Ebene kumuliert (Klamotten, Klamotten -> kurze Hosen); so erscheint die Oberkategorie als eigener, anklickbarer Eintrag und selektiert alle Unterkategorien. Ober-Ebenen werden in Zelle und Dropdown kleiner/gedaempft dargestellt (CategoryPathLabel), das Blatt normal. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
23
web/src/components/CategoryPathLabel.jsx
Normal file
23
web/src/components/CategoryPathLabel.jsx
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Kategorie-Pfad mit subtil dargestellten Oberkategorien und normalem Blatt,
|
||||
* z.B. „Klamotten →" klein/gedämpft und „kurze Hosen" normal. Wird in der
|
||||
* Tabellenzelle und im Filter-Dropdown verwendet.
|
||||
*/
|
||||
export default function CategoryPathLabel({ parts, fallback = "–" }) {
|
||||
if (!parts || parts.length === 0) return <span className="muted">{fallback}</span>;
|
||||
const ancestors = parts.slice(0, -1);
|
||||
const leaf = parts[parts.length - 1];
|
||||
return (
|
||||
<span className="cat-path">
|
||||
{ancestors.length > 0 && (
|
||||
<span className="cat-ancestors">{ancestors.join(" → ")} → </span>
|
||||
)}
|
||||
<span className="cat-leaf">{leaf}</span>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
/** Aus einem Token-/Pfad-String die Teile gewinnen (Trenner " → "). */
|
||||
export function pathParts(value) {
|
||||
return String(value ?? "").split(" → ");
|
||||
}
|
||||
Reference in New Issue
Block a user