batchCooking/apps/web/src/layouts/nav-icons.tsx
Nicolas e1589e63d0
Some checks failed
CI / lint (push) Successful in 2m54s
CI / build (push) Successful in 2m56s
CI / intent-service-test (push) Successful in 4m44s
CI / e2e (push) Successful in 9m40s
CI / test (push) Failing after 17m34s
CI / build-android (push) Has been skipped
feat(settings): onglet "Paramètres d'application" (#86)
Nouvelle route /parametres/application + entrée dans SETTINGS_ITEMS
(desktop et sheet mobile, un seul tableau partagé). Thème et "rejouer
un tutoriel" restent inchangés dans /parametres/preferences-utilisateur
(décision explicite du chantier).

Le contenu affiché diffère réellement selon la plateforme, pas par
simple choix cosmétique — chaque moitié de la page est inerte sur
l'autre plateforme, pas juste hors-sujet :

- Version installée + "Vérifier les mises à jour" (natif seulement) :
  useAppUpdateCheck (déjà utilisé par la bannière silencieuse
  existante) gagne un checkNow() qui relance la même comparaison sans
  attendre le throttle de 6h, réutilisant la logique existante plutôt
  que de la dupliquer (fetchLatestVersionResult extraite en fonction
  partagée). Nouveau hook useInstalledVersion (App.getInfo() natif,
  __APP_VERSION__ web).

- "Toujours rester sur le site web" (web seulement, tout appareil) :
  pilote STAY_ON_WEB_PREFERENCE_KEY (déjà exporté par
  mobile-app-redirect.ts, ticket #84). Volontairement masqué côté natif
  : le WebView Capacitor tourne sur sa propre origine https://localhost,
  un localStorage totalement séparé de celui du vrai site web que lit
  attemptOpenNativeApp — modifier la préférence depuis l'app ne
  changerait donc jamais rien pour un visiteur mobile réel. Documenté
  explicitement dans le commentaire de la page pour ne pas réintroduire
  ce contrôle-fantôme plus tard.

Couverture Cypress : nouveau app-settings-page.cy.ts (contenu web,
persistance du toggle après reload) ; sidebar.cy.ts étendu pour couvrir
le nouveau lien. Le déclenchement natif réel (App.getInfo(), l'appel
réseau de checkNow) n'a pas de point d'entrée testable depuis un run
Cypress web — même posture déjà acceptée pour useAppUpdateCheck/
UpdateBanner, la logique de comparaison pure reste couverte par
version-compare.cy.tsx (inchangé). Suite complète : biome check,
tsc -b --force, build, 146/146 e2e, 71/71 composants — tous verts.

Closes #86

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-07 17:19:36 +02:00

40 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Sidebar/nav icon set — thin, named re-exports of lucide-react glyphs
// rather than importing `lucide-react` directly in every consumer. Keeps a
// single place documenting "which glyph stands for which app concept"
// (the mapping itself, decided once, isn't obvious from a bare `Settings`
// or `Home` import) and keeps consumer diffs small if a glyph ever needs
// to change. Previously a hand-drawn custom SVG set (24×24, stroke-based,
// no fill) — lucide-react uses the same stroke-based "line icon" language
// (default `strokeWidth={2}`, round caps/joins) so the switch is visually
// a no-op, just swaps who draws the paths.
//
// Every one of these is always paired with visible text (the nav label, or
// a `title` tooltip when the sidebar is collapsed) — purely decorative, so
// every consumer passes `aria-hidden="true"` itself (unlike the old custom
// `Icon` wrapper, lucide doesn't set this by default).
export {
BookOpen as RecipesIcon,
Calendar as PlanningIcon,
ChevronLeft as ChevronLeftIcon,
ExternalLink as SourceLinkIcon,
Globe as PublicIcon,
Home as HouseholdIcon,
Info as CreditsIcon,
Leaf as DietPreferencesIcon,
// The mobile bottom nav's catch-all "Plus" tab (Paramètres + Compte,
// see AppLayout.tsx's `MobileBottomNav`) — a hamburger reads as "more"
// even in a bottom-tab position, unlike on desktop where it usually
// means "open a side drawer".
Menu as MoreIcon,
Palette as UserPreferencesIcon,
Rss as SourcesIcon,
Settings as SettingsIcon,
ShoppingCart as ShoppingListIcon,
// "Paramètres d'application" (issue #86) — distinct from the generic
// Settings glyph (already the "Paramètres" section toggle itself) and
// from UserPreferencesIcon (theme/tutorials): this one is specifically
// about the app installation (version, updates, app-open behavior).
Smartphone as AppSettingsIcon,
Star as FavoriteIcon,
User as AccountIcon,
} from "lucide-react";