자동완성 검색 입력 컴포넌트 다중 컬럼 표시 기능추가

This commit is contained in:
kjs
2025-12-04 16:02:00 +09:00
parent 2cddb42255
commit 93d9937343
3 changed files with 134 additions and 47 deletions

View File

@@ -42,10 +42,26 @@ export function AutocompleteSearchInputComponent({
// config prop 우선, 없으면 개별 prop 사용
const tableName = config?.tableName || propTableName || "";
const displayField = config?.displayField || propDisplayField || "";
const displayFields = config?.displayFields || (displayField ? [displayField] : []); // 다중 표시 필드
const displaySeparator = config?.displaySeparator || " → "; // 구분자
const valueField = config?.valueField || propValueField || "";
const searchFields = config?.searchFields || propSearchFields || [displayField];
const searchFields = config?.searchFields || propSearchFields || displayFields; // 검색 필드도 다중 표시 필드 사용
const placeholder = config?.placeholder || propPlaceholder || "검색...";
// 다중 필드 값을 조합하여 표시 문자열 생성
const getDisplayValue = (item: EntitySearchResult): string => {
if (displayFields.length > 1) {
// 여러 필드를 구분자로 조합
const values = displayFields
.map((field) => item[field])
.filter((v) => v !== null && v !== undefined && v !== "")
.map((v) => String(v));
return values.join(displaySeparator);
}
// 단일 필드
return item[displayField] || "";
};
const [inputValue, setInputValue] = useState("");
const [isOpen, setIsOpen] = useState(false);
const [selectedData, setSelectedData] = useState<EntitySearchResult | null>(null);
@@ -115,7 +131,7 @@ export function AutocompleteSearchInputComponent({
const handleSelect = (item: EntitySearchResult) => {
setSelectedData(item);
setInputValue(item[displayField] || "");
setInputValue(getDisplayValue(item));
console.log("🔍 AutocompleteSearchInput handleSelect:", {
item,
@@ -239,7 +255,7 @@ export function AutocompleteSearchInputComponent({
onClick={() => handleSelect(item)}
className="w-full px-3 py-2 text-left text-xs transition-colors hover:bg-accent sm:text-sm"
>
<div className="font-medium">{item[displayField]}</div>
<div className="font-medium">{getDisplayValue(item)}</div>
</button>
))}
</div>