Files
Compagnon-du-Lagon---Marama/components/infos/FAQAccordion.tsx
syoul 115d8c05a7 Build APK Android fonctionnel - Corrections finales
- Ajout de Java 21 dans Dockerfile pour compatibilité Capacitor
- Création de fichiers de types séparés (lib/types/) pour éviter dépendances API routes
- Configuration next.config.export.js pour export statique
- Exclusion temporaire des routes API pendant le build
- Correction configuration Gradle (Java 17/21)
- Script build-apk.sh amélioré avec gestion des routes API
- APK généré avec succès (4.5MB) dans dist/compagnon-admin-debug.apk

Fichiers de types créés:
- lib/types/place.ts
- lib/types/infos.ts
- lib/types/tides.ts
- lib/types/excursions.ts
- lib/types/sun-times.ts
- lib/types/notifications.ts

Tous les imports mis à jour pour utiliser les nouveaux fichiers de types.
2025-11-23 10:07:34 +01:00

81 lines
2.2 KiB
TypeScript

"use client";
import { useEffect, useState, useMemo } from "react";
import {
Accordion,
AccordionItem,
AccordionTrigger,
AccordionContent,
} from "@/components/ui/accordion";
import { FAQItem } from "@/lib/types/infos";
export default function FAQAccordion() {
const [faqItems, setFaqItems] = useState<FAQItem[]>([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchFAQ = async () => {
try {
const response = await fetch("/api/infos?type=faq");
const data = await response.json();
setFaqItems(data);
} catch (error) {
console.error("Erreur lors du chargement de la FAQ:", error);
} finally {
setLoading(false);
}
};
fetchFAQ();
}, []);
// Grouper les FAQ par catégorie
const faqByCategory = useMemo(() => {
const grouped: Record<string, FAQItem[]> = {};
faqItems.forEach((item) => {
const category = item.category || "Autres";
if (!grouped[category]) {
grouped[category] = [];
}
grouped[category].push(item);
});
return grouped;
}, [faqItems]);
if (loading) {
return (
<div className="flex items-center justify-center py-8">
<p className="text-gray-600">Chargement...</p>
</div>
);
}
return (
<div className="space-y-6">
{Object.entries(faqByCategory).map(([category, items]) => (
<div key={category} className="space-y-3">
<h3 className="text-lg font-semibold text-primary flex items-center gap-2">
{items[0]?.icon && <span>{items[0].icon}</span>}
<span>{category}</span>
</h3>
<Accordion type="single" className="w-full">
{items.map((item) => (
<AccordionItem key={item.id} value={item.id}>
<AccordionTrigger className="text-left">
{item.question}
</AccordionTrigger>
<AccordionContent>
<p className="text-gray-700 leading-relaxed whitespace-pre-line">
{item.answer}
</p>
</AccordionContent>
</AccordionItem>
))}
</Accordion>
</div>
))}
</div>
);
}