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/company/${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)}
{/* 액션 */}
))}
>
);
}