import { Badge } from '@/components/ui/badge'; import { DataTable } from '@/components/ui/data-table'; import { TablePagination } from '@/components/ui/table-pagination'; import { USER_ROLE_LABEL } from '@/lib/enumLabels'; import { formatPhoneKR } from '@/lib/phone'; import { UserStatus, USER_STATUS_LABEL, type Member } from '../types'; type MemberTableProps = { data: Member[]; onRowClick: (member: Member) => void; page: number; totalPages: number; totalCount: number; pageSize: number; onPageChange: (page: number) => void; }; const statusBadgeClass = (status: number) => status === UserStatus.ACTIVE ? 'bg-emerald-50 text-emerald-700 dark:bg-emerald-950/20 dark:text-emerald-400 border border-emerald-200' : 'bg-zinc-100 text-zinc-500 border border-zinc-300'; const fmtDate = (v?: string | null) => (v ? new Date(v).toLocaleDateString('sv-SE') : '-'); export function MemberTable({ data, onRowClick, page, totalPages, totalCount, pageSize, onPageChange, }: MemberTableProps) { return ( m.user_id} onRowClick={onRowClick} empty="등록된 회사 계정이 없습니다." footer={ } columns={[ { header: '로그인 ID', align: 'left', headClassName: 'w-1/5', cell: (m) => {m.id}, }, { header: '이름', align: 'left', cell: (m) => {m.name || '-'}, }, { header: '이메일 / 연락처', align: 'left', mobileBlock: true, cell: (m) => (
{m.email || '-'}
{m.contact_number ? formatPhoneKR(m.contact_number) : '-'}
), }, { header: '권한', align: 'center', cell: (m) => ( {USER_ROLE_LABEL[m.role]} ), }, { header: '상태', align: 'center', cell: (m) => ( {USER_STATUS_LABEL[m.status]} ), }, { header: '최근 접속', align: 'center', cellClassName: 'font-mono text-[10px] text-muted-foreground', cell: (m) => fmtDate(m.last_accessed_at), }, ]} /> ); }