"use client"; import { useState, useEffect } from "react"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import { Loader2, HelpCircle } from "lucide-react"; import { Dictionary } from "@/lib/IDict"; import { pb } from "@/lib/pb"; interface PBFaq { id: string; question: string; answer: string; lang: string; order: number; } export function FAQ({ dict, lang }: { dict: Dictionary["faq"]; lang: string }) { const [faqs, setFaqs] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function fetchFaqs() { try { setLoading(true); const records = await pb.collection(`faqs_${lang}`).getFullList({ sort: "order", requestKey: null, }); setFaqs(records); } catch (error) { console.error("Ошибка загрузки FAQ:", error); } finally { setLoading(false); } } fetchFaqs(); }, [lang]); // Функция для красивого рендеринга текста с поддержкой переносов и буллитов const formatAnswer = (text: string) => { return text.split("\n").map((line, i) => { const trimmedLine = line.trim(); // Если строка начинается с буллита if (trimmedLine.startsWith("•")) { return (
{trimmedLine.replace("•", "").trim()}
); } // Если строка пустая — это отступ между абзацами if (!trimmedLine) return
; // Обычный параграф return (

{line}

); }); }; return (
{/* Мягкий фон */}

{dict.title}

{loading ? (
Synchronizing_Knowledge...
) : faqs.length === 0 ? (

0 protocols found in cache.

) : ( {faqs.map((faq) => ( {faq.question}
{formatAnswer(faq.answer)}
))}
)}
); }