"use client"; import React, { useState, useMemo } from "react"; import { Check, ChevronsUpDown } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@/components/ui/command"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { cn } from "@/lib/utils"; import type { ColumnInfo } from "../pop-dashboard/utils/dataFetcher"; interface ColumnComboboxProps { columns: ColumnInfo[]; value: string; onSelect: (columnName: string) => void; placeholder?: string; } export function ColumnCombobox({ columns, value, onSelect, placeholder = "컬럼을 선택하세요", }: ColumnComboboxProps) { const [open, setOpen] = useState(false); const [search, setSearch] = useState(""); const filtered = useMemo(() => { if (!search) return columns; const q = search.toLowerCase(); return columns.filter( (c) => c.name.toLowerCase().includes(q) || (c.comment && c.comment.toLowerCase().includes(q)) ); }, [columns, search]); const selectedCol = useMemo( () => columns.find((c) => c.name === value), [columns, value], ); const displayValue = selectedCol ? selectedCol.comment ? `${selectedCol.name} (${selectedCol.comment})` : selectedCol.name : ""; return ( 검색 결과가 없습니다. {filtered.map((col) => ( { onSelect(col.name); setOpen(false); setSearch(""); }} className="text-xs" >
{col.name} {col.comment && ( ({col.comment}) )}
{col.type}
))}
); }