ln / components /profile /profile-header.tsx
MoShow's picture
Upload 252 files
78d0e31 verified
import type { User, Healer } from "@/lib/user-database"
import { Card, CardContent } from "@/components/ui/card"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
import { Badge } from "@/components/ui/badge"
import { Shield, Heart, MapPin, Briefcase, Calendar } from "lucide-react"
interface ProfileHeaderProps {
user: User
}
export function ProfileHeader({ user }: ProfileHeaderProps) {
const getInitials = (name: string) => {
return name
.split(" ")
.map((part) => part[0])
.join("")
.toUpperCase()
.substring(0, 2)
}
const getVerificationBadge = (user: Healer) => {
if (user.verificationStatus === "verified") {
return <Badge className="bg-green-600">Verified</Badge>
} else if (user.verificationStatus === "rejected") {
return <Badge className="bg-red-600">Rejected</Badge>
} else {
return <Badge className="bg-yellow-600">Pending Verification</Badge>
}
}
return (
<Card className={`bg-dusk border border-${user.type === "guardian" ? "guardian" : "flame"}/20`}>
<CardContent className="p-6">
<div className="flex flex-col md:flex-row gap-6 items-center md:items-start">
<Avatar className="h-24 w-24 border-2 border-gray-700">
{user.profileImage ? (
<AvatarImage src={user.profileImage || "/placeholder.svg"} alt={user.fullName} />
) : (
<AvatarFallback
className={`bg-${user.type === "guardian" ? "guardian" : "flame"}/20 text-${user.type === "guardian" ? "guardian" : "flame"}`}
>
{getInitials(user.fullName)}
</AvatarFallback>
)}
</Avatar>
<div className="flex-1 text-center md:text-left">
<div className="flex flex-col md:flex-row md:items-center gap-2 mb-2">
<h2 className="text-2xl font-heading text-white">{user.fullName}</h2>
<Badge className={`${user.type === "guardian" ? "bg-guardian text-black" : "bg-flame text-white"}`}>
{user.type === "guardian" ? (
<>
<Shield className="h-3 w-3 mr-1" /> Guardian
</>
) : (
<>
<Heart className="h-3 w-3 mr-1" /> Healer
</>
)}
</Badge>
{user.type === "healer" && getVerificationBadge(user)}
</div>
<div className="flex flex-wrap gap-4 text-sm text-gray-400 mb-4">
{user.type === "guardian" ? (
<>
<div className="flex items-center">
<MapPin className="h-4 w-4 mr-1" />
<span>{user.country}</span>
</div>
</>
) : (
<>
<div className="flex items-center">
<Briefcase className="h-4 w-4 mr-1" />
<span className="capitalize">{user.role}</span>
{user.specialization && <span> • {user.specialization}</span>}
</div>
<div className="flex items-center">
<MapPin className="h-4 w-4 mr-1" />
<span>
{user.city}, {user.country}
</span>
</div>
</>
)}
<div className="flex items-center">
<Calendar className="h-4 w-4 mr-1" />
<span>Joined {new Date(user.registeredAt).toLocaleDateString()}</span>
</div>
</div>
{user.type === "healer" && user.bio && <p className="text-gray-300 mt-2">{user.bio}</p>}
{user.type === "guardian" && user.motivation && (
<div className="mt-2">
<h3 className="text-sm font-medium text-gray-400 mb-1">Why I became a Guardian:</h3>
<p className="text-gray-300 italic">"{user.motivation}"</p>
</div>
)}
</div>
</div>
</CardContent>
</Card>
)
}