Spaces:
Running
Running
| import React from 'react' | |
| export default class ErrorBoundary extends React.Component { | |
| constructor(props) { | |
| super(props) | |
| this.state = { hasError: false, error: null } | |
| } | |
| static getDerivedStateFromError(error) { | |
| return { hasError: true, error } | |
| } | |
| componentDidCatch(error, info) { | |
| console.error('ErrorBoundary caught:', error, info) | |
| } | |
| render() { | |
| if (this.state.hasError) { | |
| return ( | |
| <div className="min-h-screen bg-atlas-bg flex items-center justify-center p-4"> | |
| <div className="glass rounded-2xl p-8 max-w-md text-center"> | |
| <div className="text-4xl mb-4">⚠️</div> | |
| <h2 className="text-xl font-bold text-atlas-text mb-2">Something went wrong</h2> | |
| <p className="text-sm text-atlas-muted mb-4"> | |
| The map encountered an error. Reloading usually fixes transient rendering/network issues. | |
| </p> | |
| <button | |
| onClick={() => { this.setState({ hasError: false, error: null }); window.location.reload(); }} | |
| className="bg-brand-500 hover:bg-brand-600 text-white px-4 py-2 rounded-lg text-sm font-medium transition-colors" | |
| > | |
| Reload Page | |
| </button> | |
| </div> | |
| </div> | |
| ) | |
| } | |
| return this.props.children | |
| } | |
| } | |