You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.6 KiB
TypeScript
77 lines
2.6 KiB
TypeScript
'use client';
|
|
|
|
import type { FacilityMember } from '@/src/types/facility-admin';
|
|
import RoleBadge from './RoleBadge';
|
|
import StatusBadge from './StatusBadge';
|
|
|
|
interface MemberCardProps {
|
|
member: FacilityMember;
|
|
onEdit: () => void;
|
|
onDelete: () => void;
|
|
}
|
|
|
|
export default function MemberCard({ member, onEdit, onDelete }: MemberCardProps) {
|
|
function formatDate(dateString: string): string {
|
|
return new Date(dateString).toLocaleDateString('en-US', {
|
|
year: 'numeric',
|
|
month: 'short',
|
|
day: 'numeric'
|
|
});
|
|
}
|
|
|
|
return (
|
|
<div className="bg-white border border-gray-200 rounded-xl p-6 shadow-sm hover:shadow-md transition-all duration-200">
|
|
<div className="flex items-start justify-between">
|
|
{/* Member Info */}
|
|
<div className="flex items-center gap-4 flex-1">
|
|
{/* Avatar */}
|
|
<div className="w-16 h-16 bg-gradient-to-br from-purple-500 to-indigo-500 rounded-full flex items-center justify-center text-white font-bold text-2xl flex-shrink-0">
|
|
{member.display_name.charAt(0).toUpperCase()}
|
|
</div>
|
|
|
|
{/* Details */}
|
|
<div className="flex-1">
|
|
<div className="flex items-center gap-2 mb-1">
|
|
<h3 className="text-lg font-bold text-gray-800">{member.display_name}</h3>
|
|
<RoleBadge role={member.role} />
|
|
<StatusBadge status={member.status} />
|
|
</div>
|
|
<div className="text-sm text-gray-600 mb-2">{member.email}</div>
|
|
<div className="flex flex-wrap gap-3 text-xs text-gray-500">
|
|
{member.plan_name && (
|
|
<div>
|
|
<span className="font-medium">Plan:</span> {member.plan_name}
|
|
</div>
|
|
)}
|
|
<div>
|
|
<span className="font-medium">Joined:</span> {formatDate(member.starts_at)}
|
|
</div>
|
|
{member.ends_at && (
|
|
<div>
|
|
<span className="font-medium">Ends:</span> {formatDate(member.ends_at)}
|
|
</div>
|
|
)}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Actions */}
|
|
<div className="flex gap-2 ml-4">
|
|
<button
|
|
onClick={onEdit}
|
|
className="px-4 py-2 bg-purple-100 text-purple-700 rounded-lg hover:bg-purple-200 font-medium transition-colors text-sm"
|
|
>
|
|
Edit
|
|
</button>
|
|
<button
|
|
onClick={onDelete}
|
|
className="px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 font-medium transition-colors text-sm"
|
|
>
|
|
Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|