feat(shopping-list): coche les articles « dans le panier » (#109) #121
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/shopping-list-check-items"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Closes #109.La liste de courses était volontairement en lecture seule. L'issue (validée avec l'auteur) revient sur ce choix : elle gagne un état « acheté » par article, utile en magasin (au doigt sur mobile).
Changements
apps/web/src/pages/shopping-list/shopping-list-progress.ts(nouveau) :ShoppingListProgressStore, calqué une-pour-une surCookingProgressStore—localStorageuniquement, par semaine (clébatchcooking:shoppingListChecked:<weekStart>), aucun état serveur. La liste est recalculée depuis le planning à chaque visite, donc une coche n'est jamais autoritaire et se perd sans dommage quand le planning change (au pire, on recoche).ShoppingListPage.tsx: chaque ligne devient unCheckboxOption;<ShoppingListItems key={weekKey}>remonte à chaque changement de semaine (checklist réinitialisée pour cette semaine). Clé d'article =ingredientId-unitId(déjà lakeyReact de la ligne).shopping-list-page.scss: override scopé (sous.shopping-list__items, pour battrelabel:has(> input[type="checkbox"])deglobal.scssen spécificité) du look « carte sélectionnable » — un article coché est barré et estompé, pas surligné en primary. Cible tactile ≥ 44 px sous le breakpoint phone.specs/frontend-architecture.md: la note « délibérément en lecture seule » est remplacée.Tests
shopping-list.feature: nouveau scénario « cocher un article » (coché → barré, persiste au reload, n'affecte pas les autres articles).shopping-list-page.cy.ts: la cible tactile de la ligne (le labelCheckboxOption) fait 16 px de padding + ≥ 44 px de haut sur téléphone.pnpm lint+pnpm --filter web buildOK ;shopping-list.feature4/4,shopping-list-page.cy.ts1/1.🤖 Generated with Claude Code
La liste de courses était volontairement en lecture seule. Elle gagne un état « acheté » par article, utile en magasin (au doigt sur mobile). - `shopping-list-progress.ts` (nouveau) : `ShoppingListProgressStore`, calqué sur `CookingProgressStore` — `localStorage` uniquement, par semaine (clé `batchcooking:shoppingListChecked:<weekStart>`), aucun état serveur. Une coche n'est jamais autoritaire (la liste est recalculée depuis le planning à chaque visite) et se perd sans dommage. - `ShoppingListPage.tsx` : chaque ligne devient un `CheckboxOption` ; `<ShoppingListItems key={weekKey}>` remonte à chaque changement de semaine (checklist réinitialisée). Clé d'article = `ingredientId-unitId` (déjà la `key` React de la ligne). - `shopping-list-page.scss` : override scopé du look « carte sélectionnable » global — un article coché est barré et estompé, pas surligné en primary. Cible tactile ≥ 44 px sous le breakpoint phone. - `specs/frontend-architecture.md` : la note « délibérément en lecture seule » est remplacée. Tests : `shopping-list.feature` — nouveau scénario « cocher un article » (coché → barré, persiste au reload, n'affecte pas les autres). `shopping-list-page.cy.ts` — la cible tactile de la ligne (le label `CheckboxOption`) fait 16 px de padding + ≥ 44 px de haut sur téléphone. Local : `pnpm lint` + `pnpm --filter web build` OK, `shopping-list.feature` 4/4, `shopping-list-page.cy.ts` 1/1. Closes #109 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>