"use client"; import React, { Component, ErrorInfo, ReactNode } from "react"; interface Props { children: ReactNode; fallback?: ReactNode; } interface State { hasError: boolean; error: Error | null; } /** * Error Boundary para capturar erros React e enviar ao Rybbit */ export class ErrorBoundary extends Component { constructor(props: Props) { super(props); this.state = { hasError: false, error: null }; } static getDerivedStateFromError(error: Error): State { return { hasError: true, error }; } componentDidCatch(error: Error, errorInfo: ErrorInfo) { // Enviar erro ao Rybbit se disponível if (typeof window !== "undefined" && window.rybbit) { try { window.rybbit.track("error", { message: error.message, stack: error.stack || undefined, componentStack: errorInfo.componentStack || undefined, errorName: error.name, timestamp: new Date().toISOString(), }); } catch (trackingError) { console.error("[ErrorBoundary] Falha ao enviar erro ao Rybbit:", trackingError); } } console.error("[ErrorBoundary] Erro capturado:", error, errorInfo); } render() { if (this.state.hasError) { if (this.props.fallback) { return this.props.fallback; } return (

Erro Inesperado

{this.state.error?.message || "Algo deu errado. Por favor, recarregue a página."}

); } return this.props.children; } }