import { Edit, Trash2, HardDrive, FileText, Users } from "lucide-react"; import { Company } from "@/types/company"; import { COMPANY_TABLE_COLUMNS } from "@/constants/company"; import { Button } from "@/components/ui/button"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { useRouter } from "next/navigation"; interface CompanyTableProps { companies: Company[]; isLoading: boolean; onEdit: (company: Company) => void; onDelete: (company: Company) => void; } /** * 회사 목록 테이블 컴포넌트 * 데스크톱: 테이블 뷰 * 모바일/태블릿: 카드 뷰 */ export function CompanyTable({ companies, isLoading, onEdit, onDelete }: CompanyTableProps) { const router = useRouter(); // 부서 관리 페이지로 이동 const handleManageDepartments = (company: Company) => { router.push(`/admin/userMng/companyList/${company.company_code}/departments`); }; // 디스크 사용량 포맷팅 함수 const formatDiskUsage = (company: Company) => { if (!company.diskUsage) { return (
정보 없음
); } const { fileCount, totalSizeMB } = company.diskUsage; return (
{fileCount}개 파일
{totalSizeMB.toFixed(1)} MB
); }; // 로딩 상태 렌더링 if (isLoading) { return ( <> {/* 데스크톱 테이블 스켈레톤 */}
{COMPANY_TABLE_COLUMNS.map((column) => ( {column.label} ))} 디스크 사용량 작업 {Array.from({ length: 10 }).map((_, index) => (
))}
{/* 모바일/태블릿 카드 스켈레톤 */}
{Array.from({ length: 6 }).map((_, index) => (
{Array.from({ length: 3 }).map((_, i) => (
))}
))}
); } // 데이터가 없을 때 if (companies.length === 0) { return (

등록된 회사가 없습니다.

); } // 실제 데이터 렌더링 return ( <> {/* 데스크톱 테이블 뷰 (lg 이상) */}
{COMPANY_TABLE_COLUMNS.map((column) => ( {column.label} ))} 디스크 사용량 작업 {companies.map((company) => ( {company.company_code} {company.company_name} {company.writer} {formatDiskUsage(company)}
{/* */}
))}
{/* 모바일/태블릿 카드 뷰 (lg 미만) */}
{companies.map((company) => (
{/* 헤더 */}

{company.company_name}

{company.company_code}

{/* 정보 */}
작성자 {company.writer}
디스크 사용량
{formatDiskUsage(company)}
{/* 액션 */}
))}
); }