klg-asutk-app/hooks/useErrorHandler.ts
Yuriy 0150aba4f5 Consolidation: KLG ASUTK + PAPA integration
- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites)
- Remove localhost refs: openapi, inbox page
- Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI
- Add stub routes: knowledge/insights, recommendations, search, log-error
- Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests
- Fix inbox-server: ORDER BY created_at, package.json
- Remove redundant app/api/inbox/files route (rewrites handle it)
- knowledge/ in gitignore (large PDFs)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 17:18:31 +03:00

66 lines
1.9 KiB
TypeScript

/**
* Хук для обработки ошибок в компонентах
*/
'use client';
import { useState, useCallback } from 'react';
import { logError } from '@/lib/logger';
import { getUserFriendlyError, getContextualErrorMessage } from '@/lib/errors/user-friendly-messages';
import { captureException } from '@/lib/monitoring/sentry';
interface UseErrorHandlerOptions {
onError?: (error: Error) => void;
logError?: boolean;
sendToSentry?: boolean;
}
export function useErrorHandler(options: UseErrorHandlerOptions = {}) {
const [error, setError] = useState<Error | null>(null);
const [userFriendlyError, setUserFriendlyError] = useState<ReturnType<typeof getUserFriendlyError> | null>(null);
const handleError = useCallback((error: unknown, context?: { action?: string; resource?: string }) => {
const errorObj = error instanceof Error ? error : new Error(String(error));
// Логирование
if (options.logError !== false) {
logError('Component error', errorObj, context);
}
// Отправка в Sentry
if (options.sendToSentry !== false && process.env.NEXT_PUBLIC_SENTRY_DSN) {
try {
captureException(errorObj, context);
} catch (e) {
// Игнорируем ошибки Sentry
}
}
// Установка ошибки
setError(errorObj);
// Получение понятного сообщения
const friendlyError = context
? getContextualErrorMessage(errorObj, context)
: getUserFriendlyError(errorObj);
setUserFriendlyError(friendlyError);
// Вызов пользовательского обработчика
if (options.onError) {
options.onError(errorObj);
}
}, [options]);
const clearError = useCallback(() => {
setError(null);
setUserFriendlyError(null);
}, []);
return {
error,
userFriendlyError,
handleError,
clearError,
hasError: error !== null,
};
}