Mehrfachauswahl (mehrere Produkte auf einmal loeschen) fuer Einkaufsliste und Vorratsschrank #187

Closed
opened 2026-09-10 21:42:47 +02:00 by lena · 2 comments
Collaborator

Story: Mehrfachauswahl (mehrere Produkte auf einmal loeschen) fuer Einkaufsliste und Vorratsschrank

As a Mitglied, das nach dem Grosseinkauf/Aufraeumen mehrere veraltete oder falsch erfasste Produkte gleichzeitig entfernen will,
I want to mehrere Produkte einer Einkaufsliste oder eines Vorratsschranks per Checkbox auswaehlen und gemeinsam loeschen koennen,
so that ich nicht jedes einzeln ueber sein eigenes Aktionsmenue entfernen muss.

Kontext (verifiziert im Code): ShoppingProductItem.tsx und PantryProductItem.tsx bieten Loeschen aktuell nur einzeln ueber ein Pro-Zeile-Aktionsmenue ("..." -> Loeschen -> Bestaetigungsdialog). Es gibt keine Mehrfachauswahl-UI in der gesamten App - auch nicht bei Todos. DeleteShoppingProductCommand/DeletePantryProductCommand-artige Einzel-Befehle existieren bereits und koennen pro ausgewaehltem Produkt sequenziell aufgerufen werden (gleiches Muster wie das mehrzeilige Erstellen aus #108/#184 - dort sequenziell erstellen, hier sequenziell loeschen).

Acceptance criteria:

  • Ein neuer "Auswaehlen"-Modus (Umschalter im Options-Menue, analog zu bestehenden Menuepunkten) zeigt pro Produktzeile eine Checkbox statt/neben dem normalen Aktionsmenue.
  • Eine Aktionsleiste zeigt die Anzahl ausgewaehlter Produkte und einen "Loeschen"-Button, der nach Bestaetigung (ein Dialog, nicht pro Produkt einzeln) alle ausgewaehlten Produkte entfernt.
  • Verlassen des Auswahl-Modus (erneuter Umschalter-Klick oder nach erfolgreichem Loeschen) setzt die Auswahl zurueck.
  • Ohne aktiven Auswahl-Modus verhaelt sich jede Produktzeile exakt wie bisher (Tap oeffnet weiterhin den Bearbeiten-Dialog, kein Regressionrisiko fuer den heutigen Einzel-Anwendungsfall).
  • Umgesetzt fuer Einkaufsliste und Vorratsschrank (die zwei Listentypen mit der laengsten typischen Produktliste); Masterpackliste und Todo-Listen bleiben aussen vor.

Out of scope for this story:

  • Weitere Bulk-Aktionen ausser Loeschen (z. B. Mehrfach-Verschieben in eine Kategorie, Mehrfach-Labeln) - koennen als eigene Folge-Story aufgenommen werden, falls gewuenscht.
  • Mehrfachauswahl fuer Masterpackliste oder Todo-Listen.

Open questions: (escalate to human if unanswered)

  • Keine - reine additive UI-Erweiterung, die bestehende Einzel-Loesch-Befehle sequenziell wiederverwendet, ohne bestehendes Verhalten zu aendern.
## Story: Mehrfachauswahl (mehrere Produkte auf einmal loeschen) fuer Einkaufsliste und Vorratsschrank **As a** Mitglied, das nach dem Grosseinkauf/Aufraeumen mehrere veraltete oder falsch erfasste Produkte gleichzeitig entfernen will, **I want to** mehrere Produkte einer Einkaufsliste oder eines Vorratsschranks per Checkbox auswaehlen und gemeinsam loeschen koennen, **so that** ich nicht jedes einzeln ueber sein eigenes Aktionsmenue entfernen muss. **Kontext (verifiziert im Code):** `ShoppingProductItem.tsx` und `PantryProductItem.tsx` bieten Loeschen aktuell nur einzeln ueber ein Pro-Zeile-Aktionsmenue ("..." -> Loeschen -> Bestaetigungsdialog). Es gibt keine Mehrfachauswahl-UI in der gesamten App - auch nicht bei Todos. `DeleteShoppingProductCommand`/`DeletePantryProductCommand`-artige Einzel-Befehle existieren bereits und koennen pro ausgewaehltem Produkt sequenziell aufgerufen werden (gleiches Muster wie das mehrzeilige Erstellen aus #108/#184 - dort sequenziell erstellen, hier sequenziell loeschen). **Acceptance criteria:** - [ ] Ein neuer "Auswaehlen"-Modus (Umschalter im Options-Menue, analog zu bestehenden Menuepunkten) zeigt pro Produktzeile eine Checkbox statt/neben dem normalen Aktionsmenue. - [ ] Eine Aktionsleiste zeigt die Anzahl ausgewaehlter Produkte und einen "Loeschen"-Button, der nach Bestaetigung (ein Dialog, nicht pro Produkt einzeln) alle ausgewaehlten Produkte entfernt. - [ ] Verlassen des Auswahl-Modus (erneuter Umschalter-Klick oder nach erfolgreichem Loeschen) setzt die Auswahl zurueck. - [ ] Ohne aktiven Auswahl-Modus verhaelt sich jede Produktzeile exakt wie bisher (Tap oeffnet weiterhin den Bearbeiten-Dialog, kein Regressionrisiko fuer den heutigen Einzel-Anwendungsfall). - [ ] Umgesetzt fuer Einkaufsliste und Vorratsschrank (die zwei Listentypen mit der laengsten typischen Produktliste); Masterpackliste und Todo-Listen bleiben aussen vor. **Out of scope for this story:** - Weitere Bulk-Aktionen ausser Loeschen (z. B. Mehrfach-Verschieben in eine Kategorie, Mehrfach-Labeln) - koennen als eigene Folge-Story aufgenommen werden, falls gewuenscht. - Mehrfachauswahl fuer Masterpackliste oder Todo-Listen. **Open questions:** (escalate to human if unanswered) - Keine - reine additive UI-Erweiterung, die bestehende Einzel-Loesch-Befehle sequenziell wiederverwendet, ohne bestehendes Verhalten zu aendern.
lena self-assigned this 2026-09-10 22:42:13 +02:00
Author
Collaborator

Claiming this for the current autonomous cycle. Plan: a per-list-type Selection mode toggle in the options menu shows a checkbox per product row instead of the normal row interaction; a small action bar shows the selected count and a Delete button; confirming deletes all selected products sequentially via the existing single-item DeleteShoppingProductCommand/DeletePantryProductCommand, mirroring the sequential-call pattern from #108/#184s multi-line create. No backend changes needed. Note: this is the last cycle of this go session per explicit human instruction - will close out and stop after this one.

Claiming this for the current autonomous cycle. Plan: a per-list-type Selection mode toggle in the options menu shows a checkbox per product row instead of the normal row interaction; a small action bar shows the selected count and a Delete button; confirming deletes all selected products sequentially via the existing single-item DeleteShoppingProductCommand/DeletePantryProductCommand, mirroring the sequential-call pattern from #108/#184s multi-line create. No backend changes needed. Note: this is the last cycle of this go session per explicit human instruction - will close out and stop after this one.
Author
Collaborator

Done. Implemented in 9c29b73a.

Scope: Einkaufsliste and Vorratsschrank each have a new "Auswaehlen" (Select) entry in their options menu. Active Selection mode replaces each row's normal check-off-checkbox/quantity-click and "..." actions menu with a plain selection checkbox (tapping anywhere on the row also toggles it) and disables drag-to-reorder; an action bar shows the selected count plus Cancel/Delete. Confirming deletes every selected product sequentially through the existing single-item DeleteShoppingProductCommand/DeletePantryProductCommand - no new backend command needed, same sequential-call pattern already used for multi-line create (#108/#184). Outside Selection mode every row behaves exactly as before.

Tests: 12 new frontend tests across ShoppingListPage/PantryPage (row rendering with/without Selection mode, count updates, Delete disabled with nothing selected, confirm deletes every selected id and exits Selection mode, Cancel deletes nothing). Full suite green: 135 files / 1310 tests. Backend suite unaffected but re-verified anyway since another session's work had landed in between: 119+52+922 tests green against real Postgres (Docker stayed available this whole session). Self-review + security-review skill: no findings (frontend-only, reuses the existing already-authorized delete commands, no new input surface). Local review container rebuilt and health-checked with today's code.

This was the last cycle of this go session (explicit human instruction to stop after this one) - backlog left open for the next session: #183 (recurring shopping items) and #185 (comment notifications on Shopping/Pantry/MasterPack products), plus #155/#138 still status/blocked.

Done. Implemented in `9c29b73a`. Scope: Einkaufsliste and Vorratsschrank each have a new "Auswaehlen" (Select) entry in their options menu. Active Selection mode replaces each row's normal check-off-checkbox/quantity-click and "..." actions menu with a plain selection checkbox (tapping anywhere on the row also toggles it) and disables drag-to-reorder; an action bar shows the selected count plus Cancel/Delete. Confirming deletes every selected product sequentially through the existing single-item DeleteShoppingProductCommand/DeletePantryProductCommand - no new backend command needed, same sequential-call pattern already used for multi-line create (#108/#184). Outside Selection mode every row behaves exactly as before. Tests: 12 new frontend tests across ShoppingListPage/PantryPage (row rendering with/without Selection mode, count updates, Delete disabled with nothing selected, confirm deletes every selected id and exits Selection mode, Cancel deletes nothing). Full suite green: 135 files / 1310 tests. Backend suite unaffected but re-verified anyway since another session's work had landed in between: 119+52+922 tests green against real Postgres (Docker stayed available this whole session). Self-review + security-review skill: no findings (frontend-only, reuses the existing already-authorized delete commands, no new input surface). Local review container rebuilt and health-checked with today's code. This was the last cycle of this go session (explicit human instruction to stop after this one) - backlog left open for the next session: #183 (recurring shopping items) and #185 (comment notifications on Shopping/Pantry/MasterPack products), plus #155/#138 still status/blocked.
lena closed this issue 2026-09-11 22:14:13 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
robert/todo#187
No description provided.