"use client"; import React, { useState, useEffect } from "react"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { CustomerItemMappingConfig } from "./types"; import { tableTypeApi } from "@/lib/api/screen"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Plus, X } from "lucide-react"; export interface CustomerItemMappingConfigPanelProps { config: CustomerItemMappingConfig; onChange: (config: CustomerItemMappingConfig) => void; } export const CustomerItemMappingConfigPanel: React.FC< CustomerItemMappingConfigPanelProps > = ({ config, onChange }) => { const [tables, setTables] = useState([]); const [availableColumns, setAvailableColumns] = useState([]); // 테이블 목록 로드 useEffect(() => { const loadTables = async () => { try { const tableList = await tableTypeApi.getTables(); setTables(tableList); } catch (error) { console.error("테이블 목록 로드 실패:", error); } }; loadTables(); }, []); // 선택된 테이블의 컬럼 목록 로드 useEffect(() => { if (config.selectedTable) { const loadColumns = async () => { try { const columns = await tableTypeApi.getColumns(config.selectedTable!); setAvailableColumns(columns); } catch (error) { console.error("컬럼 목록 로드 실패:", error); } }; loadColumns(); } }, [config.selectedTable]); const handleTableChange = (tableName: string) => { onChange({ ...config, selectedTable: tableName, columns: [], // 테이블 변경 시 컬럼 초기화 }); }; const handleAddColumn = (columnName: string) => { if (!config.columns.includes(columnName)) { onChange({ ...config, columns: [...config.columns, columnName], }); } }; const handleRemoveColumn = (columnName: string) => { onChange({ ...config, columns: config.columns.filter((col) => col !== columnName), }); }; return (
{/* 테이블 선택 */}
{/* 컬럼 설정 */}
{/* 선택된 컬럼 목록 */} {config.columns.length > 0 && (
{config.columns.map((col, index) => (
{col}
))}
)} {/* 컬럼 추가 */} {availableColumns.length > 0 && ( )}
{/* 체크박스 설정 */}
{/* 검색 영역 설정 */}
{config.showSearchArea && (
onChange({ ...config, searchAreaHeight: parseInt(e.target.value) || 80, }) } min={60} max={200} className="h-8 text-xs" />

권장: 80-120px (나중에 검색창과 카테고리 필터 추가 예정)

)}
{/* 빈 데이터 메시지 */}
onChange({ ...config, emptyMessage: e.target.value }) } placeholder="데이터가 없습니다" />
onChange({ ...config, emptyDescription: e.target.value }) } placeholder="품목 데이터가 추가되면 여기에 표시됩니다" />
); };