"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; onConfigChange?: (config: CustomerItemMappingConfig) => void; screenTableName?: string; tableColumns?: any[]; tables?: any[]; allTables?: any[]; onTableChange?: (tableName: string) => void; menuObjid?: number; } export const CustomerItemMappingConfigPanel: React.FC< CustomerItemMappingConfigPanelProps > = ({ config, onChange, onConfigChange, screenTableName, tableColumns: propTableColumns, tables: propTables, allTables, onTableChange: propOnTableChange, menuObjid, }) => { // onChange와 onConfigChange를 통합 const handleChange = (newConfig: CustomerItemMappingConfig) => { onChange?.(newConfig); onConfigChange?.(newConfig); }; 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) => { const newConfig = { ...config, selectedTable: tableName, columns: [], // 테이블 변경 시 컬럼 초기화 }; handleChange(newConfig); propOnTableChange?.(tableName); }; const handleAddColumn = (columnName: string) => { if (!config.columns.includes(columnName)) { handleChange({ ...config, columns: [...config.columns, columnName], }); } }; const handleRemoveColumn = (columnName: string) => { handleChange({ ...config, columns: config.columns.filter((col) => col !== columnName), }); }; return (
{/* 테이블 선택 */}
{/* 컬럼 설정 */}
{/* 선택된 컬럼 목록 */} {config.columns.length > 0 && (
{config.columns.map((col, index) => (
{col}
))}
)} {/* 컬럼 추가 */} {availableColumns.length > 0 && ( )}
{/* 체크박스 설정 */}
{/* 헤더 설정 */}
{config.showCompanyName && availableColumns.length > 0 && (

헤더에 표시할 회사명 데이터가 있는 컬럼을 선택하세요

)}
{/* 검색 영역 설정 */}
{config.showSearchArea && (
handleChange({ ...config, searchPlaceholder: e.target.value, }) } placeholder="품목코드, 품목명, 규격 검색" className="h-8 text-xs" />
{/* 카테고리 필터 설정 */}
{config.enableCategoryFilter && (
handleChange({ ...config, categories: e.target.value.split(",").map((c) => c.trim()).filter(Boolean), }) } placeholder="전체, 원자재, 반도체, 완제품" className="h-8 text-xs" />

예: 전체, 원자재, 반도체, 완제품

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