'use client'; import * as React from 'react'; import { useTranslations } from 'next-intl'; import { Globe, Loader2, Mail, MapPin, ShieldCheck, Smartphone, UserCheck, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { Sheet, SheetContent, SheetTitle } from '@/components/ui/sheet'; import type { AdminUser } from '@/lib/services/admin'; import { formatDateTime } from '@/lib/utils'; interface UserDetailSheetProps { selectedUser: AdminUser | null; isOpen: boolean; onOpenChange: (open: boolean) => void; detailLoading: boolean; onStatusToggle: (user: AdminUser) => Promise; } export function UserDetailSheet({ selectedUser, isOpen, onOpenChange, detailLoading, onStatusToggle, }: UserDetailSheetProps) { const t = useTranslations('admin.users'); const displayValue = (value?: string) => value && value.trim() ? value : '-'; return ( {t('userProfile')} {selectedUser && ( <>
{selectedUser.username.substring(0, 2).toUpperCase()}

{selectedUser.nickname}

@{selectedUser.username} UID: {selectedUser.id} {selectedUser.is_admin && ( Admin )}
{detailLoading && (
{t('refreshingDetail')}
)}
{t('registeredAt')} { formatDateTime(selectedUser.created_at).split( ' ', )[0] }

{t('personalInfo')}

{t('email')} {displayValue(selectedUser.email)}
{t('phone')} {displayValue(selectedUser.phone)}
⚧ {t('gender')} {displayValue(selectedUser.gender)}
{t('location')} {displayValue(selectedUser.location)}
{t('website')} {displayValue(selectedUser.website)}
{t('bio')} {displayValue(selectedUser.bio)}

{t('systemRecords')}

{t('accountStatus')} {selectedUser.is_active ? t('statusActive') : t('statusDisabled')}
{t('isAdmin')} {selectedUser.is_admin ? t('yes') : t('no')}
{t('lastLogin')} {formatDateTime(selectedUser.last_login_at)}
{t('registeredAt')} {formatDateTime(selectedUser.created_at)}
{t('lastUpdate')} {formatDateTime(selectedUser.updated_at)}
{!selectedUser.is_admin && (
)}
)}
); }