Фолбэк на кэш при недоступности PocketBase (Pricing/FAQ)
Pricing: при полном отказе всех запросов пробует localStorage-кэш последнего успешного ответа вместо пустого состояния, пишет туда же при успехе. Faq: отличает "в кэше правда пусто" от "не смогли загрузить" — раньше оба случая показывали один и тот же текст "0 protocols found", что вводило в заблуждение при обычном сетевом сбое. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,10 +25,13 @@ export async function FAQ({
|
||||
lang: string;
|
||||
}) {
|
||||
let faqs: PBFaq[] = [];
|
||||
// Различаем "PocketBase ответил, но для этого языка коллекции ещё нет" (штатно,
|
||||
// это и есть fallback на en ниже) от "PocketBase вообще не ответил ни разу" —
|
||||
// раньше оба случая одинаково показывали "0 protocols found", что вводит в
|
||||
// заблуждение при реальном сбое инфраструктуры (выглядит как "у нас нет FAQ",
|
||||
// а не "сейчас не грузится").
|
||||
let hadFetchError = false;
|
||||
|
||||
// CMS-контент (в отличие от статичных dictionaries/*.json) переведён только
|
||||
// для части языков — коллекции `faqs_<lang>` для новых языков ещё не заведены
|
||||
// в PocketBase. Пока для них нет перевода, показываем английский, а не пустоту.
|
||||
for (const fallbackLang of Array.from(new Set([lang, "en"]))) {
|
||||
try {
|
||||
faqs = await pb.collection(`faqs_${fallbackLang}`).getFullList<PBFaq>({
|
||||
@@ -36,8 +39,10 @@ export async function FAQ({
|
||||
fetch: (url, config) =>
|
||||
fetch(url, { ...config, next: { revalidate: 86400 } }), // Кэшируем на сутки
|
||||
});
|
||||
hadFetchError = false;
|
||||
break;
|
||||
} catch (error) {
|
||||
hadFetchError = true;
|
||||
console.error(`Ошибка загрузки FAQ (${fallbackLang}):`, error);
|
||||
}
|
||||
}
|
||||
@@ -88,7 +93,7 @@ export async function FAQ({
|
||||
{faqs.length === 0 ? (
|
||||
<div className="text-center py-20 border border-dashed border-border/50 rounded-[2.5rem] bg-card/20">
|
||||
<p className="text-muted-foreground font-mono text-sm uppercase tracking-widest">
|
||||
0 protocols found in cache.
|
||||
{hadFetchError ? dict.loadError : "0 protocols found in cache."}
|
||||
</p>
|
||||
</div>
|
||||
) : (
|
||||
|
||||
Reference in New Issue
Block a user