import UiPageNations from "@common/business_components/ui/table/uiPageNations"; import { Table, TableBody, TableCell, TableRow, Button } from "@common/components"; import { useEffect, useState } from "react"; type UiTableProps = { headName: React.ReactNode | undefined; tableName1?: React.ReactNode | undefined; tableData: { [key: string]: string | number | boolean | object }[]; headlist: UiHeadProps[]; pageSize: number; total: number; children?: Record | undefined; cellClick: ((index: number | undefined, headId: string) => void) | undefined; onPageChange: (page: number) => void; className?: string; resetPageNo?: boolean; isEditable?: boolean; tableName2?: React.ReactNode | undefined; tableData2?: { [key: string]: string | number | boolean | object }[]; headlist2?: UiHeadProps[]; pageSize2?: number; total2?: number; children2?: Record | undefined; cellClick2?: ((index: number | undefined, headId: string) => void) | undefined; onPageChange2?: (page: number) => void; className2?: string; resetPageNo2?: boolean; isEditable2?: boolean; showSecondTable?: boolean; showSaveButton?: boolean; onSaveClick?: () => void; onFormDataChange?: (formData: { [key: string]: string | number | boolean }) => void; // 추가 }; type UiHeadProps = { id: string; title: string; align?: string; type?: string; options?: string[]; }; export function VerticalTable({ headName, tableName1, tableData, headlist, pageSize, total, children, onPageChange, className = "", resetPageNo = false, isEditable = false, tableName2, headlist2, isEditable2 = false, showSecondTable = false, showSaveButton = false, onSaveClick, onFormDataChange, }: UiTableProps) { const [cur, setCur] = useState(1); const [formData, setFormData] = useState<{ [key: string]: string | number | boolean }>({}); useEffect(() => { if (resetPageNo) { setCur(1); onPageChange(1); } }, [onPageChange, resetPageNo]); useEffect(() => { if (tableData.length > 0 && tableData[0]) { // 깊은 복사를 통해 새로운 객체 생성 const newData = JSON.parse(JSON.stringify(tableData[0])); setFormData(newData); console.log("Form data initialized:", newData); // 디버깅용 } }, [tableData]); const handleInputChange = (id: string, value: string | number | boolean) => { console.log(`Input change: ${id} = ${value}`); // 디버깅용 const newFormData = { ...formData, [id]: value, }; console.log("New form data:", newFormData); // 디버깅용 setFormData(newFormData); // 폼 데이터가 변경될 때마다 부모에게 알림 if (onFormDataChange) { onFormDataChange(newFormData); } }; const handlePageChange = (page: number) => { setCur(page); onPageChange(page); }; return ( <> {headName ? (

{headName}

{showSaveButton && onSaveClick && ( )}
) : null}
{tableName1 && ( // tableName prop이 있으면 표시
{tableName1}
)} {headlist?.map((head) => ( {/* 컬럼 제목 */} {head.title} {/* 데이터 값 또는 입력 필드 */} {children && children[head.id] ? children[head.id] : isEditable ? ( head.type === "select" ? ( ) : head.type === "input" ? ( handleInputChange(head.id, e.target.value)} className="w-full text-xl border-radius-0 border border-gray-300 rounded-sm px-2 py-1" /> ) : ( {formData[head.id] ?? "-"} ) ) : ( {formData[head.id] ?? "-"} )} ))}
{tableName2 && ( // tableName prop이 있으면 표시
{tableName2}
)} {showSecondTable && ( {headlist2?.map((head) => ( {/* 컬럼 제목 */} {head.title} {/* 데이터 값 또는 입력 필드 */} {children && children[head.id] ? children[head.id] : isEditable2 ? ( head.type === "select" ? ( ) : head.type === "input" ? ( handleInputChange(head.id, e.target.value)} className="w-full text-xl border-radius-0 border border-gray-300 rounded-sm px-2 py-1" /> ) : ( {formData[head.id] ?? "-"} ) ) : ( {formData[head.id] ?? "-"} )} ))}
)} {total > 0 && ( )}
); }