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 Button from '@/components/ui/Button.tsx';
|
||||||
import IconWrapper from '@/components/ui/IconWrapper.tsx';
|
import IconWrapper from '@/components/ui/IconWrapper.tsx';
|
||||||
|
import { useTranslation } from '@/hooks/useI18n';
|
||||||
import { XCircle } from 'lucide-react';
|
import { XCircle } from 'lucide-react';
|
||||||
import { Component, ErrorInfo, ReactNode } from 'react';
|
import { Component, ErrorInfo, ReactNode, useState } from 'react';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface State {
|
interface ErrorState {
|
||||||
hasError: boolean;
|
hasError: boolean;
|
||||||
error?: Error;
|
error?: Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ErrorBoundary extends Component<Props, State> {
|
const ErrorFallback = ({ error, onRefresh }: { error?: Error; onRefresh: () => void }) => {
|
||||||
// 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.
|
const { t } = useTranslation();
|
||||||
state: State = {
|
|
||||||
|
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,
|
hasError: false,
|
||||||
error: undefined,
|
error: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
static getDerivedStateFromError(error: Error): State {
|
static getDerivedStateFromError(error: Error): ErrorState {
|
||||||
return { hasError: true, error };
|
return { hasError: true, error };
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,30 +49,13 @@ class ErrorBoundary extends Component<Props, State> {
|
|||||||
console.error('Uncaught error:', error, errorInfo);
|
console.error('Uncaught error:', error, errorInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIX: Using an arrow function to automatically bind 'this'.
|
|
||||||
handleRefresh = () => {
|
handleRefresh = () => {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
if (this.state.hasError) {
|
if (this.state.hasError) {
|
||||||
return (
|
return <ErrorFallback error={this.state.error} onRefresh={this.handleRefresh} />;
|
||||||
<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 this.props.children;
|
return this.props.children;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user