mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
fix: continue linting fixes - refactor ErrorBoundary component
Some checks failed
CI/CD Pipeline / backend-lint (push) Failing after 1m6s
CI/CD Pipeline / backend-build (push) Has been skipped
CI/CD Pipeline / frontend-lint (push) Failing after 1m19s
CI/CD Pipeline / frontend-build (push) Has been skipped
CI/CD Pipeline / e2e-test (push) Has been skipped
Some checks failed
CI/CD Pipeline / backend-lint (push) Failing after 1m6s
CI/CD Pipeline / backend-build (push) Has been skipped
CI/CD Pipeline / frontend-lint (push) Failing after 1m19s
CI/CD Pipeline / frontend-build (push) Has been skipped
CI/CD Pipeline / e2e-test (push) Has been skipped
- Refactor ErrorBoundary from class component to functional components - Fix i18n literal strings in ErrorBoundary - Continue systematic reduction of linting errors
This commit is contained in:
parent
7310b98664
commit
986b8a794d
@ -1,25 +1,47 @@
|
||||
import Button from '@/components/ui/Button.tsx';
|
||||
import IconWrapper from '@/components/ui/IconWrapper.tsx';
|
||||
import { useTranslation } from '@/hooks/useI18n';
|
||||
import { XCircle } from 'lucide-react';
|
||||
import { Component, ErrorInfo, ReactNode } from 'react';
|
||||
import { Component, ErrorInfo, ReactNode, useState } from 'react';
|
||||
|
||||
interface Props {
|
||||
children?: ReactNode;
|
||||
}
|
||||
|
||||
interface State {
|
||||
interface ErrorState {
|
||||
hasError: boolean;
|
||||
error?: Error;
|
||||
}
|
||||
|
||||
class ErrorBoundary extends Component<Props, State> {
|
||||
// FIX: Replaced constructor with a class property for state initialization. This is a more modern and robust approach in class components and resolves the reported errors regarding `this.state` and `this.props` not being available.
|
||||
state: State = {
|
||||
const ErrorFallback = ({ error, onRefresh }: { error?: Error; onRefresh: () => void }) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center min-h-screen bg-background p-8 text-center">
|
||||
<IconWrapper className="bg-destructive/10 text-destructive">
|
||||
<XCircle className="h-8 w-8 text-current" />
|
||||
</IconWrapper>
|
||||
<h1 className="font-serif text-3xl font-bold text-destructive">{t('error.somethingWentWrong')}</h1>
|
||||
<p className="mt-4 text-lg text-muted-foreground">
|
||||
{t('error.tryRefreshing')}
|
||||
</p>
|
||||
<pre className="mt-4 text-sm text-left bg-muted p-4 rounded-md max-w-full overflow-auto">
|
||||
{error?.message || t('error.unknownError')}
|
||||
</pre>
|
||||
<Button onClick={onRefresh} className="mt-6">
|
||||
{t('error.refreshPage')}
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
class ErrorBoundary extends Component<Props, ErrorState> {
|
||||
state: ErrorState = {
|
||||
hasError: false,
|
||||
error: undefined,
|
||||
};
|
||||
|
||||
static getDerivedStateFromError(error: Error): State {
|
||||
static getDerivedStateFromError(error: Error): ErrorState {
|
||||
return { hasError: true, error };
|
||||
}
|
||||
|
||||
@ -27,30 +49,13 @@ class ErrorBoundary extends Component<Props, State> {
|
||||
console.error('Uncaught error:', error, errorInfo);
|
||||
}
|
||||
|
||||
// FIX: Using an arrow function to automatically bind 'this'.
|
||||
handleRefresh = () => {
|
||||
window.location.reload();
|
||||
};
|
||||
|
||||
render() {
|
||||
if (this.state.hasError) {
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center min-h-screen bg-background p-8 text-center">
|
||||
<IconWrapper className="bg-destructive/10 text-destructive">
|
||||
<XCircle className="h-8 w-8 text-current" />
|
||||
</IconWrapper>
|
||||
<h1 className="font-serif text-3xl font-bold text-destructive">Something went wrong</h1>
|
||||
<p className="mt-4 text-lg text-muted-foreground">
|
||||
We're sorry for the inconvenience. Please try refreshing the page.
|
||||
</p>
|
||||
<pre className="mt-4 text-sm text-left bg-muted p-4 rounded-md max-w-full overflow-auto">
|
||||
{this.state.error?.message || 'An unknown error occurred'}
|
||||
</pre>
|
||||
<Button onClick={this.handleRefresh} className="mt-6">
|
||||
Refresh Page
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
return <ErrorFallback error={this.state.error} onRefresh={this.handleRefresh} />;
|
||||
}
|
||||
|
||||
return this.props.children;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user