forked from Nova-reward/Nova-Rewards
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWithErrorHandling.tsx
More file actions
58 lines (52 loc) · 1.21 KB
/
Copy pathWithErrorHandling.tsx
File metadata and controls
58 lines (52 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import React from 'react';
import { ErrorState } from './ErrorState';
import { InlineError } from './InlineError';
import { AppError } from '@/types/errors';
export interface WithErrorHandlingProps {
isLoading: boolean;
error: AppError | null;
onRetry: () => void;
showInline?: boolean;
loadingFallback?: React.ReactNode;
children: React.ReactNode;
}
export const WithErrorHandling: React.FC<WithErrorHandlingProps> = ({
isLoading,
error,
onRetry,
showInline = false,
loadingFallback,
children,
}) => {
if (isLoading) {
if (loadingFallback) {
return <>{loadingFallback}</>;
}
return (
<div className="flex justify-center py-12">
<div className="h-8 w-8 animate-spin rounded-full border-4 border-green-500 border-t-transparent" />
</div>
);
}
if (error) {
if (showInline) {
return (
<InlineError
message={error.message}
onRetry={onRetry}
size="md"
/>
);
}
return (
<ErrorState
type={error.type}
message={error.message}
onRetry={onRetry}
statusCode={error.statusCode}
/>
);
}
return <>{children}</>;
};
export default WithErrorHandling;