"use client"; import React, { useState, useEffect } from "react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Search, X } from "lucide-react"; import { EntitySearchModal } from "./EntitySearchModal"; import { EntitySearchInputProps, EntitySearchResult } from "./types"; import { cn } from "@/lib/utils"; export function EntitySearchInputComponent({ tableName, displayField, valueField, searchFields = [displayField], mode = "combo", placeholder = "검색...", disabled = false, filterCondition = {}, value, onChange, modalTitle = "검색", modalColumns = [], showAdditionalInfo = false, additionalFields = [], className, }: EntitySearchInputProps) { const [modalOpen, setModalOpen] = useState(false); const [displayValue, setDisplayValue] = useState(""); const [selectedData, setSelectedData] = useState(null); // value가 변경되면 표시값 업데이트 useEffect(() => { if (value && selectedData) { setDisplayValue(selectedData[displayField] || ""); } else { setDisplayValue(""); setSelectedData(null); } }, [value, displayField]); const handleSelect = (newValue: any, fullData: EntitySearchResult) => { setSelectedData(fullData); setDisplayValue(fullData[displayField] || ""); onChange?.(newValue, fullData); }; const handleClear = () => { setDisplayValue(""); setSelectedData(null); onChange?.(null, null); }; const handleOpenModal = () => { if (!disabled) { setModalOpen(true); } }; return (
{/* 입력 필드 */}
setDisplayValue(e.target.value)} placeholder={placeholder} disabled={disabled} readOnly={mode === "modal" || mode === "combo"} className="h-8 text-xs sm:h-10 sm:text-sm pr-8" /> {displayValue && !disabled && ( )}
{(mode === "modal" || mode === "combo") && ( )}
{/* 추가 정보 표시 */} {showAdditionalInfo && selectedData && additionalFields.length > 0 && (
{additionalFields.map((field) => (
{field}: {selectedData[field] || "-"}
))}
)} {/* 검색 모달 */}
); }