import { AlertTriangle, RefreshCw } from "lucide-react" import React, { Component, ErrorInfo, ReactNode } from "react" interface Props { children: ReactNode fallback?: ReactNode } interface State { hasError: boolean error?: Error } /** * Error Boundary для стилистических шаблонов * Перехватывает ошибки и показывает fallback UI */ export class StyleTemplateErrorBoundary extends Component { constructor(props: Props) { super(props) this.state = { hasError: false } } static getDerivedStateFromError(error: Error): State { // Обновляем состояние, чтобы показать fallback UI return { hasError: true, error } } componentDidCatch(error: Error, errorInfo: ErrorInfo) { // Логируем ошибку для отладки console.error("StyleTemplateErrorBoundary caught an error:", error, errorInfo) } handleRetry = () => { // Сбрасываем состояние ошибки для повторной попытки this.setState({ hasError: false, error: undefined }) } render() { if (this.state.hasError) { // Показываем fallback UI если есть ошибка if (this.props.fallback) { return this.props.fallback } return (

Ошибка загрузки шаблонов

{this.state.error?.message || "Произошла неизвестная ошибка"}

) } return this.props.children } } /** * HOC для оборачивания компонентов в Error Boundary */ export function withStyleTemplateErrorBoundary

( Component: React.ComponentType

, fallback?: ReactNode, ) { return function WrappedComponent(props: P) { return ( ) } }