Component Inventory — Mobile
239 fichiers .tsx dans mobile-staging/components/. Organisés par domaine.
Vue d'ensemble
mobile-staging/components/
├── ui/ # Building blocks réutilisables (18 fichiers)
├── navigation/ # AnimatedTabBar + StickySearchBar + SearchOverlay
├── home/ # Accueil : SectionHeader, banners
├── boutique/ # BoutiqueCard
├── produit/ # Cards + galerie + sélecteur variantes + CTAs + ContactVendeur
├── vitrine/ # Header vitrine + CanauxRow
├── activite/ # Row compactes (commandes, RDV, accès)
├── compte/ # Profil + MaVitrineButton
├── panier/ # PanierRepasFlottant (restau)
├── search/ # SearchOverlay + ResultRow
├── stories/ # Bandeau + viewer + composer
├── chat/ # MessageBubble + QuickReplies + ChatComposer
├── restaurant/ # CarteMenu + PlatCard + OptionsModal + SuiviCommandeRepas
├── reviews/ # ReviewCard + RatingStars
├── notif/ # InboxBadge + NotifList
├── feedback/ # Toasts + snackbars
├── acces/ # AccesRequis + DemandeAccesBanner
├── onboarding/ # OnboardingWizard + SetupChecklist
└── vitrine-pro/ # **Espace gérant** (60+ fichiers, sous-dossiers par feature)Building blocks components/ui/ (18)
| Composant | Usage |
|---|---|
Badge.tsx | Pastilles compteurs / statuts |
Button.tsx | Bouton principal/secondaire/danger |
FilterChip.tsx | Pill [Icon · Label · Badge?] — 2 sizes (sm 36px / md 44px), 2 variants (filter / cta brandColor). DEC-137 |
FilterSheet.tsx | Bottom-sheet Modal slide-up + sections pliables LayoutAnimation + sticky CTA. DEC-138 |
CategorieTile.tsx | Tile catégorie (Accueil) |
CategoriesChips.tsx | Chips catégories sticky-ready avec accent themeCouleur |
EmptyState.tsx | Icône 48px light + titre + texte + CTA optionnel |
LoadingSkeleton.tsx | Skeleton placeholder |
OfflineBanner.tsx | Banner offline NetInfo |
RatingStars.tsx | Étoiles avis |
SafeImage.tsx | expo-image wrapper avec fallback + blurRadius pour photos masquées |
SearchInput.tsx | Input recherche (loupe + X clear) |
SectionHeader.tsx | Titre + "Voir tout" |
SuivreButton.tsx | Bouton follow/unfollow (vitrines/produits/clients) |
TopBar.tsx | TopBar utilitaire écrans détail |
VideoPlayer.tsx + VideoUploader.tsx | Lecture + upload vidéos prestations |
WizardSteps.tsx | Dots + barre + label "Étape N/total" (DEC-168) |
Navigation components/navigation/
AnimatedTabBar.tsx— tabbar 5 onglets client (animations Reanimated)StickySearchBar.tsx— TopBar absolute glass (DEC-153)SearchOverlay.tsx— overlay résultats au-dessus du contenu
Produit components/produit/
| Composant | Usage |
|---|---|
ProduitCard.tsx | Card grille catalogue — masque prix/photo si configAcces le requiert (DEC-213, BUG-131) |
ProduitGalerie.tsx | Galerie horizontale fiche détail avec zoom + blurRadius 25 si masquée (BUG-132) |
VarianteSelector.tsx | Sélecteur axes (Taille/Couleur...) — grouped par axe (DEC-159) |
CTAsDynamiques.tsx | Boutons CTA selon canaux tenant configurés (priorité Paiement > Panier > Messaging > Devis) |
ContactVendeur.tsx | Chips canaux brand-color (WhatsApp/Snap/Insta/Telegram/Email/Phone) via FilterChip variant cta |
WhatsAppCTA.tsx | Deep link wa.me/<num>?text=... |
ProduitGalerieModal.tsx | Zoom plein écran |
PrestationCard.tsx | Card prestation (5 cas affichage prix DEC-175) |
Vitrine components/vitrine/
VitrineHeader.tsx— Header vitrine (logo + bannière + CanauxRow + badges)CanauxRow.tsx— Scrollview horizontale boutons icon+label canaux
Activité components/activite/
CommandeRowCompact.tsx— Photo + tenant + produit + statut coloré + date + totalRdvRowCompact.tsx— Avec bouton Annuler (Alert confirm) + Calendrier (iCal)DemandeAccesRowCompact.tsx
Restaurant components/restaurant/
CarteMenu.tsx— Sections + plats avec chips modes en hautPlatCard.tsx— Card plat avec bouton + ajout panierOptionsModal.tsx— Modal options obligatoires/facultativesSuiviCommandeRepas.tsx— Stepper 4 ou 5 étapes (LIVRAISON)PanierRepasFlottant.tsx(souspanier/) — Flottant conditionnel sur panierSlug
Stories components/stories/
StoryBandeau.tsx— Carousel horizontal Avatar+ring (client)StoryViewer.tsx— Plein écran auto-advance + barres de progressionStoryComposer.tsx— Composer gérant (caption + média picker)
Espace gérant components/vitrine-pro/ (60+ fichiers)
components/vitrine-pro/
├── GerantLayout.tsx # Animated.View overlay (zIndex 200) + header + slot
├── GerantTabBar.tsx # TabBar custom dynamique selon modulesActifs + badges
├── GerantLoginForm.tsx
├── GerantPlaceholder.tsx
├── GerantReglages.tsx # 4 tabs WP-232 (Vitrine / Contact / Accès / Avancé)
├── BoutiqueActivite.tsx # Pivot sous-tabs Commandes/RDV (DEC-200)
├── BoutiqueCatalogue.tsx # Pivot sous-tabs Produits/Services (DEC-179)
├── BoutiqueClientes.tsx
├── BoutiqueMessagesContent.tsx
├── BoutiqueServices.tsx
├── StatutBadge.tsx # Badge coloré par enum statut (avec icônes Phosphor depuis WP-X)
├── StatutSheet.tsx # Bottom sheet transitions valides
│
├── acces/ # DemandesAccesList + AccesRow approve-refuse
├── arrivages/ # Modal arrivage + composer
├── builder/ # WebView builder embed
├── carte/ # CRUD carte restau (sections + PlatFormModal)
├── catalogue/ # ProduitFormModal + VariantesSheet + ModeleSheet + ProduitRow
├── categories/ # CategorieRow + Modal create/edit
├── clientes/ # InviterClienteForm + ClienteRow
├── cuisine/ # CuisineKanban (3 colonnes scrollables) + CommandeRepasCard
├── dashboard/ # KpiCard + Sparkline + TopProduits + Alerts (DEC-188/189/190)
├── dashboard-v2/ # Evolution dashboard (V2)
├── disponibilites/ # CreneauSheet + IndispoSheet + SectionList LUN-DIM
├── evenements/ # CRUD événements
├── inbox/ # Inbox SLA gérant (5 sprints correctifs)
├── medias/ # Médiathèque (upload + albums)
├── modeles/ # ModeleSheet wizard 3 étapes
├── parametres/ # Sections Réglages (LogoUploader, BanniereSection, BoutiqueSection,
│ # CategoriesWariSection, ChartGraphiqueSection, CanauxSection,
│ # SiteWebSection, SynchronisationSection, BoutiqueAccesModal,
│ # AccesVisibiliteSection, PaiementSection, RestaurantConfigSection,
│ # VisibiliteSection, CompteSection)
├── prestations/ # PrestationFormModal + PrestationRow + DureeSheet + RangePrixSheet
├── produits/ # ProduitRow + ProduitFormModal
└── ... (catalogue-pricing, snap-bulk, story, tables, tags)Patterns notables
- Bottom sheet clavier-safe : DEC-170/174 —
keyboardShouldPersistTaps="handled", pas deKeyboardAvoidingViewsur position absolute, padding dynamique 2 variantes (Modal vs GerantLayout). - Save sticky en bas : Réglages = 1 bouton CTA global (bundlé PATCH parametres + diff dirty). Sections self-contained ont leurs propres saves internes (CanauxSection, PaiementSection, RestaurantConfigSection, SynchronisationSection).
- Forms : pattern PrestationFormModal / ProduitFormModal — bottom sheet plein écran avec sections empilées (photos + nom + prix + variantes + catégories + tags + description + disponibilité).
- Wizard :
<WizardSteps />pour multi-step (VariantesSheet 2 étapes, ModeleSheet 3 étapes). - Kanban Cuisine : 3 colonnes horizontales scrollables (RECUE / EN_PREPARATION / PRETE), drag-or-tap pour transition.
Hooks (mobile-staging/hooks/ — ~60)
Pattern : 1 fichier par domaine. Tous basés sur React Query.
| Hook | Domaine |
|---|---|
useAuth | sendMagicLink, verifyMagicToken, logout |
useNotifications | register push token + tap handler |
useCart | Panier produits Zustand-bridge |
useCheckout | usePaiementVitrine + useCreerCommande |
useBoutiques | LIST vitrines + DETAIL |
useProduits | useCatalogueInfini + useProduit |
usePrestations | LIST prestations |
usePrestationDetail | DETAIL + modeContact aware |
useVitrine | Hooks gérant (dashboard, commandes, catalogue, mutations) |
useRdv | Réservations gérant (transition + push) |
useReservations | Côté client |
useDisponibilites | Créneaux dispo public |
useCreneaux + useIndisponibilites | Gérant CRUD |
useConfigReservation | Per-prestation |
useRestaurant | 17 hooks restau (config, sections, plats, tables, commandes polling 30s, transitions, table info, suivi) |
useAcces | Demandes accès SUR_DEMANDE (mes-demandes + demander + annuler) |
useCanauxVitrine | CRUD TenantCanal + sync TenantCanal[]→Tenant.whatsapp |
usePaiementConfig | ConfigPaiementGerant |
useIcalSync | iCal token gérant + génération |
useStoriesFeed | Bandeau stories client |
useVitrineStories | Composer gérant |
useStoryDuJour | Story matin 7h push |
useExplorerFeed | Explorer 3 tabs |
useHomeData / useHomeV15 | /api/mobile/home |
useActivite | Mes commandes en cours + nouveautés + favoris |
useFavoris | Favoris store sync |
useInvitation | Acceptation magic link invitation |
useMessagerie + useRealtimeChat + useQuickReplies | Chat |
useReviews | Avis |
useTags + useArrivagesGerant + useEvenements + useMediatheque + useClienteDetail + useClientsAgreges + useCategoriesAdmin + useCategoriesVitrines + useModelesAdmin + useTablesStats | CRUD divers gérant |
useTheme + useReduceMotion + useNetworkStatus + useOfflineSync + useScrollTabBar + useGlobalTick | Utilitaires |
useOnboardingGerant + useSetupScore + useRushHour + useChatFunnel + useSnapBulk + useSnapToList + usePanierAssistant + useInboxActions + useNotifs + useResetPassword + useParrainage + useGeolocation + useHeatmapClients + useCataloguePricing + useBuilder + useCompte + useLogout | Features avancées (sagas refonte gérant A-E + V1.5 + V2) |
Stores Zustand (mobile-staging/store/ — 16)
Voir architecture-mobile.md section "State management".