"use client" import * as React from "react" import { Check, ChevronsUpDown } from "lucide-react" import { Button } from "@/components/ui/button" import { Popover, PopoverTrigger, PopoverContent } from "@/components/ui/popover" import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from "@/components/ui/command" import { cn } from "@/lib/utils" import { getPackagesByProject, type PackageItem } from "@/lib/items/service" interface PackageSelectorProps { projectNo?: string | null; selectedPackage?: PackageItem | null; onPackageSelect: (packageItem: PackageItem) => void; placeholder?: string; disabled?: boolean; } export function PackageSelector({ projectNo, selectedPackage, onPackageSelect, placeholder = "패키지 선택...", disabled = false }: PackageSelectorProps) { const [open, setOpen] = React.useState(false) const [searchTerm, setSearchTerm] = React.useState("") const [packages, setPackages] = React.useState([]) const [isLoading, setIsLoading] = React.useState(false) // 프로젝트가 변경되면 패키지 목록 로드 React.useEffect(() => { if (projectNo) { loadPackages(projectNo); } else { setPackages([]); } }, [projectNo]); const loadPackages = async (projNo: string) => { setIsLoading(true); try { // 서버 액션 호출 const packageList = await getPackagesByProject(projNo); setPackages(packageList); } catch (error) { console.error("패키지 목록 로드 오류:", error); setPackages([]); } finally { setIsLoading(false); } }; // 클라이언트 측에서 검색어로 필터링 const filteredPackages = React.useMemo(() => { if (!searchTerm.trim()) return packages; const lowerSearch = searchTerm.toLowerCase(); return packages.filter( pkg => pkg.packageCode.toLowerCase().includes(lowerSearch) || (pkg.description && pkg.description.toLowerCase().includes(lowerSearch)) ); }, [packages, searchTerm]); // 패키지 선택 처리 const handleSelectPackage = (pkg: PackageItem) => { onPackageSelect(pkg); setOpen(false); }; return ( { e.stopPropagation(); const target = e.currentTarget; target.scrollTop += e.deltaY; }}> 검색 결과가 없습니다 {isLoading ? (
로딩 중...
) : ( {filteredPackages.map((pkg) => ( handleSelectPackage(pkg)} > {pkg.packageCode} - {pkg.description} ))} )}
); }