forked from Tadrisino/MathApp_frontend
This reverts commit beeada6.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 lines
1.6 KiB
TypeScript
21 lines
1.6 KiB
TypeScript
import { ApiError } from '@/api';
|
|
|
|
const PERSIAN = /[\u0600-\u06FF]/;
|
|
|
|
/**
|
|
* پیامِ قابلِ فهم برای دانشآموز، از هر خطایی. کاربر هرگز متنِ فنیِ خطا را نمیبیند: «خطای ۴۰۴»،
|
|
* انگلیسیِ پیشفرضِ DRF یا پیامِ مرورگر نشان داده نمیشود. فقط جملهی فارسیِ خودِ سرور (که برای
|
|
* همین نوشته شده، مثل «کد درست نبود») یا fallback.
|
|
*/
|
|
export function friendlyError(err: unknown, fallback = 'یه مشکلی پیش اومد، دوباره امتحان کن'): string {
|
|
if (!(err instanceof ApiError)) return fallback;
|
|
if (err.isNetwork) {
|
|
if (typeof navigator !== 'undefined' && navigator.onLine === false) return 'اینترنت قطع است؛ اتصالت رو چک کن و دوباره امتحان کن';
|
|
return err.timedOut ? 'اینترنت کند است؛ کمی صبر کن و دوباره امتحان کن' : 'اینترنت قطع یا ناپایدار است؛ دوباره امتحان کن';
|
|
}
|
|
if (err.isRateLimited) return err.detail && PERSIAN.test(err.detail) && !err.detail.startsWith('خطا') ? err.detail : 'زیادی تلاش کردی؛ چند لحظه صبر کن';
|
|
if (err.isProviderDown) return 'این سرویس الان در دسترس نیست؛ کمی بعد دوباره امتحان کن';
|
|
if (err.status >= 500) return 'سرور موقتاً مشکل داره؛ کمی بعد دوباره امتحان کن';
|
|
return err.detail && PERSIAN.test(err.detail) && !err.detail.startsWith('خطای ') ? err.detail : fallback;
|
|
}
|