feat: improve profile error handling with specific messages and UI for private or missing profiles
This commit is contained in:
@@ -156,9 +156,16 @@ export default function AgentProfileView() {
|
|||||||
} else if (profile.avatar) {
|
} else if (profile.avatar) {
|
||||||
setAvatarUrl(profile.avatar);
|
setAvatarUrl(profile.avatar);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
console.error('Failed to fetch profile:', err);
|
console.error('Failed to fetch profile:', err);
|
||||||
setError('Failed to load profile data');
|
const status = err?.response?.status;
|
||||||
|
if (status === 403) {
|
||||||
|
setError('This profile is private. You don\u2019t have permission to view it.');
|
||||||
|
} else if (status === 404) {
|
||||||
|
setError('Profile not found.');
|
||||||
|
} else {
|
||||||
|
setError('Failed to load profile data');
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
@@ -252,23 +259,33 @@ export default function AgentProfileView() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isPermissionError = error?.includes('permission') || error?.includes('private');
|
||||||
|
|
||||||
if (error || !agentProfile) {
|
if (error || !agentProfile) {
|
||||||
return (
|
return (
|
||||||
<div className="max-w-7xl mx-auto px-4 lg:px-8 py-6">
|
<div className="max-w-7xl mx-auto px-4 lg:px-8 py-6">
|
||||||
<div className="flex items-center justify-center h-[calc(100vh-180px)]">
|
<div className="flex items-center justify-center h-[calc(100vh-180px)]">
|
||||||
<div className="bg-white rounded-[20px] p-8 shadow-[0px_10px_20px_rgba(217,217,217,0.5)] max-w-md text-center">
|
<div className="bg-white rounded-[20px] p-8 shadow-[0px_10px_20px_rgba(217,217,217,0.5)] max-w-md text-center">
|
||||||
<div className="w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto mb-4">
|
<div className={`w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4 ${isPermissionError ? 'bg-[#e58625]/10' : 'bg-red-100'}`}>
|
||||||
<svg className="w-8 h-8 text-red-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
{isPermissionError ? (
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
<svg className="w-8 h-8 text-[#e58625]" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
</svg>
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" />
|
||||||
|
</svg>
|
||||||
|
) : (
|
||||||
|
<svg className="w-8 h-8 text-red-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||||
|
</svg>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<h2 className="text-[18px] font-bold font-serif text-[#00293D] mb-2">Unable to Load Profile</h2>
|
<h2 className="text-[18px] font-bold font-serif text-[#00293D] mb-2">
|
||||||
|
{isPermissionError ? 'Profile Not Available' : 'Unable to Load Profile'}
|
||||||
|
</h2>
|
||||||
<p className="text-[14px] font-serif text-[#00293D]/70 mb-4">{error || 'Profile not found'}</p>
|
<p className="text-[14px] font-serif text-[#00293D]/70 mb-4">{error || 'Profile not found'}</p>
|
||||||
<button
|
<button
|
||||||
onClick={() => window.location.reload()}
|
onClick={() => window.history.back()}
|
||||||
className="px-6 py-2 bg-[#E58625] rounded-full text-[14px] font-semibold font-serif text-white hover:bg-[#E58625]/90 transition-colors"
|
className="px-6 py-2 bg-[#E58625] rounded-full text-[14px] font-semibold font-serif text-white hover:bg-[#E58625]/90 transition-colors"
|
||||||
>
|
>
|
||||||
Try Again
|
Go Back
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user