import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import { 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; } // Теперь это Server Component export async function FAQ({ dict, lang, }: { dict: Dictionary["faq"]; lang: string; }) { let faqs: PBFaq[] = []; // Различаем "PocketBase ответил, но для этого языка коллекции ещё нет" (штатно, // это и есть fallback на en ниже) от "PocketBase вообще не ответил ни разу" — // раньше оба случая одинаково показывали "0 protocols found", что вводит в // заблуждение при реальном сбое инфраструктуры (выглядит как "у нас нет FAQ", // а не "сейчас не грузится"). let hadFetchError = false; for (const fallbackLang of Array.from(new Set([lang, "en"]))) { try { faqs = await pb.collection(`faqs_${fallbackLang}`).getFullList({ sort: "order", fetch: (url, config) => fetch(url, { ...config, next: { revalidate: 86400 } }), // Кэшируем на сутки }); hadFetchError = false; break; } catch (error) { hadFetchError = true; console.error(`Ошибка загрузки FAQ (${fallbackLang}):`, error); } } 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}

{faqs.length === 0 ? (

{hadFetchError ? dict.loadError : "0 protocols found in cache."}

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