"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { MoreHorizontal, Edit, Trash2, Copy, Eye, Plus, Search } from "lucide-react"; import { ScreenDefinition } from "@/types/screen"; interface ScreenListProps { onScreenSelect: (screen: ScreenDefinition) => void; selectedScreen: ScreenDefinition | null; } export default function ScreenList({ onScreenSelect, selectedScreen }: ScreenListProps) { const [screens, setScreens] = useState([]); const [loading, setLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(""); const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(1); // 샘플 데이터 (실제로는 API에서 가져옴) useEffect(() => { const mockScreens: ScreenDefinition[] = [ { screenId: 1, screenName: "사용자 관리 화면", screenCode: "USER_MANAGEMENT", tableName: "user_info", companyCode: "COMP001", description: "사용자 정보를 관리하는 화면", isActive: "Y", createdDate: new Date("2024-01-15"), updatedDate: new Date("2024-01-15"), createdBy: "admin", updatedBy: "admin", }, { screenId: 2, screenName: "부서 관리 화면", screenCode: "DEPT_MANAGEMENT", tableName: "dept_info", companyCode: "COMP001", description: "부서 정보를 관리하는 화면", isActive: "Y", createdDate: new Date("2024-01-16"), updatedDate: new Date("2024-01-16"), createdBy: "admin", updatedBy: "admin", }, { screenId: 3, screenName: "제품 관리 화면", screenCode: "PRODUCT_MANAGEMENT", tableName: "product_info", companyCode: "COMP001", description: "제품 정보를 관리하는 화면", isActive: "Y", createdDate: new Date("2024-01-17"), updatedDate: new Date("2024-01-17"), createdBy: "admin", updatedBy: "admin", }, ]; setScreens(mockScreens); setLoading(false); }, []); const filteredScreens = screens.filter( (screen) => screen.screenName.toLowerCase().includes(searchTerm.toLowerCase()) || screen.screenCode.toLowerCase().includes(searchTerm.toLowerCase()) || screen.tableName.toLowerCase().includes(searchTerm.toLowerCase()), ); const handleScreenSelect = (screen: ScreenDefinition) => { onScreenSelect(screen); }; const handleEdit = (screen: ScreenDefinition) => { // 편집 모달 열기 console.log("편집:", screen); }; const handleDelete = (screen: ScreenDefinition) => { if (confirm(`"${screen.screenName}" 화면을 삭제하시겠습니까?`)) { // 삭제 API 호출 console.log("삭제:", screen); } }; const handleCopy = (screen: ScreenDefinition) => { // 복사 모달 열기 console.log("복사:", screen); }; const handleView = (screen: ScreenDefinition) => { // 미리보기 모달 열기 console.log("미리보기:", screen); }; if (loading) { return (
로딩 중...
); } return (
{/* 검색 및 필터 */}
setSearchTerm(e.target.value)} className="w-80 pl-10" />
{/* 화면 목록 테이블 */} 화면 목록 ({filteredScreens.length}) 화면명 화면 코드 테이블명 상태 생성일 작업 {filteredScreens.map((screen) => ( handleScreenSelect(screen)} >
{screen.screenName}
{screen.description &&
{screen.description}
}
{screen.screenCode} {screen.tableName} {screen.isActive === "Y" ? "활성" : "비활성"}
{screen.createdDate.toLocaleDateString()}
{screen.createdBy}
handleView(screen)}> 미리보기 handleEdit(screen)}> 편집 handleCopy(screen)}> 복사 handleDelete(screen)} className="text-red-600"> 삭제
))}
{filteredScreens.length === 0 &&
검색 결과가 없습니다.
}
{/* 페이지네이션 */} {totalPages > 1 && (
{currentPage} / {totalPages}
)}
); }