/** * Oveyo PWA V7.8.1 — Page FAQ (fix bouton WhatsApp accessible) * ================================================================ * Bug v7.8 : le bouton WhatsApp en bas était caché derrière la TabBar fixée. * * Fix : * - paddingBottom suffisante (110px) pour que le contenu scrollable réserve * l'espace sous la TabBar (96px) + safe-area iOS * - height: 100dvh pour iOS Safari (dynamic viewport) * - WebkitOverflowScrolling: 'touch' pour scroll fluide iOS * - overscrollBehavior: 'contain' pour empêcher le bounce */ const FAQPage = ({ onClose, onOpenSheet }) => { const { ArrowLeft, Search, ChevronDown, ChevronUp, ExternalLink, MessageCircle } = window.LucideReact || {}; const [categories, setCategories] = React.useState([]); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(null); const [search, setSearch] = React.useState(''); const [expanded, setExpanded] = React.useState(new Set()); React.useEffect(() => { const load = async () => { try { const r = await fetch('/api/pwa/faq'); if (!r.ok) { setError('Impossible de charger la FAQ'); setLoading(false); return; } const data = await r.json(); setCategories(data.categories || []); } catch (e) { setError('Erreur de connexion'); } finally { setLoading(false); } }; load(); }, []); const toggleEntry = (id) => { const next = new Set(expanded); if (next.has(id)) next.delete(id); else next.add(id); setExpanded(next); }; const normalize = (s) => (s || '').toLowerCase() .normalize('NFD').replace(/[\u0300-\u036f]/g, ''); const filtered = React.useMemo(() => { if (!search.trim()) return categories; const q = normalize(search); return categories .map((cat) => ({ ...cat, entries: cat.entries.filter((e) => normalize(e.question).includes(q) || normalize(e.answer).includes(q) ), })) .filter((cat) => cat.entries.length > 0); }, [categories, search]); const totalFiltered = filtered.reduce((sum, c) => sum + c.entries.length, 0); const handleAction = (entry) => { if (entry.action_url) { if (entry.action_url.startsWith('http')) { window.open(entry.action_url, '_blank'); } else { window.location.href = entry.action_url; } } }; return (
{/* V9.0.2 : header avec bande dégradée — cohérent avec les autres pages */}

Aide & FAQ

Réponses aux questions courantes

{/* V9.0 : loupe supprimée. Input semi-transparent sur le dégradé. */}
setSearch(e.target.value)} placeholder="Rechercher dans la FAQ…" className="w-full px-3 py-2.5 rounded-xl text-sm outline-none" style={{ background: 'rgba(255,255,255,0.95)', border: '1px solid rgba(255,255,255,0.4)', color: '#102A43', }} />
{/* Contenu scrollable — paddingBottom pour TabBar + safe-area */}
{loading && (
Chargement…
)} {error && !loading && (

{error}

)} {!loading && !error && search.trim() && totalFiltered === 0 && (
🔍

Aucun résultat pour "{search}"

Essaie d'autres mots ou contacte-nous via le bot WhatsApp.

Bot WhatsApp
)} {!loading && !error && filtered.map((cat) => (
{cat.icon}

{cat.label}

{cat.entries.length}
{cat.entries.map((entry, idx) => { const isExpanded = expanded.has(entry.id) || !!search.trim(); return (
{isExpanded && (
{entry.answer.split('**').map((part, i) => i % 2 === 0 ? part : {part} )}
{entry.action_url && entry.action_label && ( )}
)}
); })}
{/* V9.5.8 — Trait dégradé en bas de chaque section FAQ (style Espace Commerçant) */}
))} {/* CTA en bas : encore des questions ? */} {!loading && !error && !search.trim() && (

Pas trouvé ta réponse ?

Le bot Oveyo te répond sur WhatsApp

Discuter avec le bot
{/* V9.5.8 — Trait dégradé en bas du CTA */}
)}
); }; window.FAQPage = FAQPage;