RIDING BYTES
← Alle Insights

5. August 2026 · 6 min Lesezeit

Listings 2.0: gespeicherte Filter, Label-Chips und ein durchsuchbares Spalten-Popover

senaite.app.listing hat gespeicherte Filter-Presets, klickbare Label-Chips, entfernbare Filter-Chips in der Werkzeugleiste und ein neu gestaltetes Column-Config bekommen. Was sich geändert hat und warum es sich lohnt.

Listings 2.0: gespeicherte Filter, Label-Chips und ein durchsuchbares Spalten-Popover

Jede SENAITE-Nutzerin verbringt den grössten Teil des Tages in einem Listing. Proben, Worksheets, Batches, Rechnungen. Die Listings sehen schmucklos aus, weil sie es müssen: die Dichte der Information ist das Feature. Kleine ergonomische Gewinne summieren sich schnell auf. In diesem Halbjahr hat senaite.app.listing gleich mehrere davon ausgeliefert.

Gespeicherte Filter-Presets

#174 setzt eine Lesezeichen-Pille neben das Suchfeld. Stellen Sie Ihre Ansicht ein (Review-State, Spaltenfilter, Sortierung, Seitengrösse, Suchbegriff), klicken Sie die Pille, speichern Sie sie als “Überfällige Serologie” oder “Wasserproben dieser Woche”. Am Montag ist das Preset ein Klick entfernt.

Der Storage-Key nutzt den listing_identifier der Ansicht (den serverseitig berechneten Wert, den auch das Spaltenkonfig-Feature verwendet), mit form_id als Fallback. Das zählt, wenn dieselbe form_id in mehreren Kontexten verwendet wird: Ihr kundenbezogenes Samples-Listing und das globale Samples-Listing teilen sich Presets nicht mehr aus Versehen.

Jedes Preset erfasst review_state, column_filters, sort_on, sort_order, pagesize und filter. Umbenennen, Löschen und Speichern läuft über Inline-Editoren (kein window.prompt mehr), jeweils mit Enter zum Bestätigen und Esc zum Abbrechen. Weicht die Live-Ansicht vom gespeicherten Payload ab, bekommt das Preset einen “modified”-Tag mit inline save und undo. Wählt man ein Default-Preset, wird es beim Öffnen automatisch angewendet, sofern keine URL-Parameter aktiv sind.

Derselbe PR hat einen subtileren Bug behoben: Die Dropdowns der Spaltenfilter zeigten früher jeden möglichen Wert, ohne die schon aktiven Filter zu berücksichtigen. Man wählte einen Wert und landete in einer leeren Tabelle, weil zwei Filter einander ausschlossen. Die neue Signatur apply_column_filters(query, exclude=None) verengt jedes Dropdown um alle übrigen aktiven Filter. Was man sieht, kann man auch anwählen.

Label-Chips, click-to-filter

Als Gegenstück zu senaite.core#2958 rendert #178 Proben-Labels als farbige Chips unter der Primärspalte. Ein Klick auf einen Chip, die URL gewinnt ?labels=<name>, das Listing filtert. Zweiter Chip, beide filtern. Denselben nochmal klicken, er verschwindet. Eine Aktive-Filter-Zeile über dem Suchfeld zeigt jeden ?labels=-Wert mit X zum Entfernen.

Der Reset-Button (der kleine Kreispfeil) räumt jetzt auch ?labels= ab. Gespeicherte Presets erfassen und rewenden Label-Zustand per Navigation, damit ein geteilter Link mit ?labels= nicht von einem automatisch angewandten Default-Preset überschrieben wird.

Entfernbare Filter-Chips in der Werkzeugleiste

Aktive Spaltenfilter waren nur als eingefärbtes Trichter-Icon in der Kopfzeile sichtbar. Setzte man drei Filter und vergass zwei davon, sah man eine leere Tabelle und musste die Trichter jagen. #180 rendert jeden aktiven Spaltenfilter als Chip <Spalte>: <Wert> × in der Werkzeugleiste. Klick auf X, der Filter fällt weg, das Listing lädt nach, alles andere bleibt. Das ist generisch: jedes Listing mit Spaltenfiltern bekommt es umsonst.

Samples-Listing mit der Review-State-Pill-Zeile (Active, Due, Received, To be verified, Verified, Published, Stored, Past Retention, Dispatched, Disposed, Cancelled, Invalid, All, Rejected) oben. Darunter zwei entfernbare Filter-Chips 'Client: Riding Bytes ×' und 'State: sample_received ×'. Die Tabelle zeigt eine gefilterte Zeile für SDM-0002-P01 mit Riding Bytes / Sediment / Received.
Jeder aktive Filter als entfernbarer Chip. Klick auf × entfernt genau diesen Filter, alles andere bleibt.

Column-Config als durchsuchbares Popover

Dreissig Spalten in einer horizontalen Chip-Zeile waren Alt-Erbe. #176 ersetzt das durch einen kleinen [⊟ Configure]-Button, der ein strukturiertes Popover öffnet: Suchfeld oben mit Autofocus, Show all / Hide all als Massenaktionen, ein Visible-Bereich (Drag- Handles links, Augen-Icon zum Ausblenden rechts) und ein Hidden-Bereich (alphabetisch, + stellt am Ende von Visible wieder her).

Der Drop-Indikator ist eine 2-Pixel-Akzentlinie ober- oder unterhalb der Zielreihe, berechnet aus der Cursor-Y-Position in der Reihe. Kein Raten mehr, wo die Spalte landet. Das Popover rendert per ReactDOM.createPortal an document.body, entkommt dem overflow-x: auto der Table-Responsive-Hülle, folgt dem Trigger bei Scroll und Resize und schliesst per Aussenklick oder Esc.

Samples-Listing mit geöffnetem CONFIGURE TABLE COLUMNS Popover. Header zeigt 13 von 35 Spalten konfiguriert. Suchfeld, Show all und Hide all. Ein VISIBLE-Bereich listet Priority, Progress, Sample ID, Creator, Date Sampled, Client, Client ID, Lab Sample ID, Sample Type, State, Date stored, Storage, Retain Until mit Drag-Handles und Ausblenden-Toggles. Darunter ein HIDDEN-Bereich mit 22 weiteren Spalten (Analyses, Batch ID, Client Order, Client Ref) und Plus-Buttons zum Wiederherstellen.
Column-Popover, 13 von 35 Spalten sichtbar. Suche, Drag, Show all, Hide all oder einzelne Spalten aus dem Hidden-Bereich wiederherstellen.

Unter der Haube ist die gesamte Farbpalette in --sf-*, --listing-* und --listing-bs-*-Tokens in einem einzigen :root-Block gewandert. Add-ons, die eine Theme wollen, können diese Tokens ohne Bundle-Rebuild überschreiben. Ein zukünftiger [data-theme]-Selector kann die Ansicht zur Laufzeit umskinnen.

Kleine Gewinne, die es wert sind

#179 hat KeywordIndex-Spaltenfilter dazu gebracht, ihre Autocomplete-Liste aus den tatsächlich indexierten Werten zu befüllen und mehrere Auswahlen mit UND zu verknüpfen statt mit ODER. Wählt man “Ca” und “Mg” im Analyse-Keyword-Filter, bekommt man Zeilen, die beides tragen, nicht mehr eines von beiden.

Zwei Personen prüfen Notizen auf Papier neben einem Laptop

Bringen Sie das in Ihr Labor

Ob Sie SENAITE evaluieren, über mehrere Standorte skalieren oder Geräte und Monitoring anbinden — das Team, das die Plattform geschrieben hat, ist das Team, mit dem Sie sprechen.