"use client"; import React, { useState, useEffect } from "react"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@/components/ui/command"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { Switch } from "@/components/ui/switch"; import { Button } from "@/components/ui/button"; import { Plus, X, Check, ChevronsUpDown } from "lucide-react"; import { AutocompleteSearchInputConfig } from "./types"; import { tableManagementApi } from "@/lib/api/tableManagement"; import { cn } from "@/lib/utils"; interface AutocompleteSearchInputConfigPanelProps { config: AutocompleteSearchInputConfig; onConfigChange: (config: AutocompleteSearchInputConfig) => void; } export function AutocompleteSearchInputConfigPanel({ config, onConfigChange, }: AutocompleteSearchInputConfigPanelProps) { const [localConfig, setLocalConfig] = useState(config); const [allTables, setAllTables] = useState([]); const [tableColumns, setTableColumns] = useState([]); const [isLoadingTables, setIsLoadingTables] = useState(false); const [isLoadingColumns, setIsLoadingColumns] = useState(false); const [openTableCombo, setOpenTableCombo] = useState(false); const [openDisplayFieldCombo, setOpenDisplayFieldCombo] = useState(false); const [openValueFieldCombo, setOpenValueFieldCombo] = useState(false); // 전체 테이블 목록 로드 useEffect(() => { const loadTables = async () => { setIsLoadingTables(true); try { const response = await tableManagementApi.getTableList(); if (response.success && response.data) { setAllTables(response.data); } } catch (error) { console.error("테이블 목록 로드 실패:", error); } finally { setIsLoadingTables(false); } }; loadTables(); }, []); // 선택된 테이블의 컬럼 목록 로드 useEffect(() => { const loadColumns = async () => { if (!localConfig.tableName) { setTableColumns([]); return; } setIsLoadingColumns(true); try { const response = await tableManagementApi.getColumnList(localConfig.tableName); if (response.success && response.data) { setTableColumns(response.data.columns); } } catch (error) { console.error("컬럼 목록 로드 실패:", error); setTableColumns([]); } finally { setIsLoadingColumns(false); } }; loadColumns(); }, [localConfig.tableName]); useEffect(() => { setLocalConfig(config); }, [config]); const updateConfig = (updates: Partial) => { const newConfig = { ...localConfig, ...updates }; setLocalConfig(newConfig); onConfigChange(newConfig); }; const addSearchField = () => { const fields = localConfig.searchFields || []; updateConfig({ searchFields: [...fields, ""] }); }; const updateSearchField = (index: number, value: string) => { const fields = [...(localConfig.searchFields || [])]; fields[index] = value; updateConfig({ searchFields: fields }); }; const removeSearchField = (index: number) => { const fields = [...(localConfig.searchFields || [])]; fields.splice(index, 1); updateConfig({ searchFields: fields }); }; const addAdditionalField = () => { const fields = localConfig.additionalFields || []; updateConfig({ additionalFields: [...fields, ""] }); }; const updateAdditionalField = (index: number, value: string) => { const fields = [...(localConfig.additionalFields || [])]; fields[index] = value; updateConfig({ additionalFields: fields }); }; const removeAdditionalField = (index: number) => { const fields = [...(localConfig.additionalFields || [])]; fields.splice(index, 1); updateConfig({ additionalFields: fields }); }; return (
테이블을 찾을 수 없습니다. {allTables.map((table) => ( { updateConfig({ tableName: table.tableName }); setOpenTableCombo(false); }} className="text-xs sm:text-sm" >
{table.displayName || table.tableName} {table.displayName && {table.tableName}}
))}
필드를 찾을 수 없습니다. {tableColumns.map((column) => ( { updateConfig({ displayField: column.columnName }); setOpenDisplayFieldCombo(false); }} className="text-xs sm:text-sm" >
{column.displayName || column.columnName} {column.displayName && {column.columnName}}
))}
필드를 찾을 수 없습니다. {tableColumns.map((column) => ( { updateConfig({ valueField: column.columnName }); setOpenValueFieldCombo(false); }} className="text-xs sm:text-sm" >
{column.displayName || column.columnName} {column.displayName && {column.columnName}}
))}
updateConfig({ placeholder: e.target.value })} placeholder="검색..." className="h-8 text-xs sm:h-10 sm:text-sm" />
{(localConfig.searchFields || []).map((field, index) => (
))}
updateConfig({ showAdditionalInfo: checked }) } />
{localConfig.showAdditionalInfo && (
{(localConfig.additionalFields || []).map((field, index) => (
))}
)}
); }