# 🛒 Kernmodul 4: Geteilte Listen & Kollaboration Das Modul für geteilte Listen ([`SharedListsView.tsx`](../../frontend/src/features/lists/SharedListsView.tsx)) ist auf **Echtzeit-Kollaboration im Alltag** ausgelegt (z.B. gemeinsamer Wocheneinkauf im Supermarkt, Packlisten für Reisen, Inventarlisten oder schnelle Checklisten). --- ## 🛍️ 1. Listen-Typen & Kategorien Jede Liste besitzt einen Typ, ein Icon und eine Farb-Codierung: | Listen-Typ | Icon | Einsatzzweck | Typische Kategorien | | :--- | :--- | :--- | :--- | | `shopping` | 🛒 | Supermarkt- & Lebensmitteleinkauf | Obst & Gemüse, Kühlregal, Vorrat, Drogerie | | `packing` | 🎒 | Urlaubs- & Reise-Packlisten | Kleidung, Elektronik, Dokumente, Kosmetik | | `inventory` | 📦 | Vorratskammer, Keller, Homelab-Hardware | Regal 1, Gefrierschrank, Server-Rack | | `todo` | 📝 | Einfache Gruppen-Checklisten | Heute, Später, Ideen | ### Automatische Kategorisierung & Mengenangaben - Einträge können mit einer Mengenangabe (z.B. `3x`, `500g`, `1 Kasten`) versehen werden. - Die intelligente Eingabe erkennt Einheiten automatisch oder trennt Mengen über Eingabefelder. - Einträge werden übersichtlich nach Kategorien gruppiert. Jede Kategorie kann zur besseren Übersicht eingeklappt werden. --- ## ⚡ 2. Echtzeit-Abhaken (Multi-User Live Sync) Wenn mehrere Familienmitglieder oder Teammitglieder gleichzeitig im Supermarkt unterwegs sind, synchronisiert MindSift jeden Schritt in Echtzeit über WebSockets: ```mermaid sequenceDiagram autonumber actor Alice as Alice (im Markt) participant WS as WebSocket Hub actor Bob as Bob (zu Hause) Alice->>WS: PATCH /items/123 (isCompleted: true) WS->>Bob: Event: ITEM_TOGGLED (itemId: "123", completedBy: "Alice") Note over Bob: Eintrag wird sofort durchgestrichen
Grünes Badge "von Alice" erscheint ``` - **Transparenz:** Beim Abhaken speichert MindSift `completed_by_name`. Ein dezentes grünes Pillen-Badge zeigt an, wer den Artikel eingepackt hat. - **Erledigte Einträge:** Abgehakte Artikel wandern nach unten in einen einklappbaren Bereich „Erledigt". - **Liste leeren:** Ein Klick auf „Erledigte entfernen" löscht alle abgehakten Einträge (`LIST_CLEARED`) für alle Teilnehmer. --- ## 🖐️ 3. Drag & Drop Umsortierung Innerhalb einer Liste können Einträge frei per Drag & Drop sortiert werden: 1. **Innerhalb einer Kategorie:** Ändert die Reihenfolge (`sort_order`). 2. **Kategorie-Übergreifend:** Zieht der Benutzer einen Eintrag in eine andere Kategorie (z.B. von „Kühlregal" nach „Obst & Gemüse"), aktualisiert das Frontend optimistisch die Kategorie und sendet das Update ans Backend. --- ## 👥 4. Freigaben & Berechtigungen Listen können über den einheitlichen Freigabe-Dialog ([`UnifiedShareModal.tsx`](../../frontend/src/components/UnifiedShareModal.tsx)) geteilt werden: - **Freigabe für Teams:** Alle aktuellen und zukünftigen Mitglieder der gewählten Gruppe erhalten automatisch Zugriff. - **Freigabe für Einzelbenutzer:** Gezielter Zugriff für einzelne Personen. - **Rollen:** - `editor`: Darf Einträge hinzufügen, bearbeiten, abhaken und löschen. - `viewer`: Nur Lesezugriff (Einträge ansehen, aber nicht verändern).