/** * UnifiedRepeater 컴포넌트 정의 * * 반복 데이터 관리를 위한 통합 컴포넌트 * 기존 simple-repeater-table, modal-repeater-table, repeat-screen-modal, related-data-buttons 통합 */ import { ComponentCategory } from "@/types/component"; import { createComponentDefinition } from "../../utils/createComponentDefinition"; import { UnifiedRepeaterConfigPanel } from "@/components/unified/config-panels/UnifiedRepeaterConfigPanel"; import { UnifiedRepeater } from "@/components/unified/UnifiedRepeater"; export const V2UnifiedRepeaterDefinition = createComponentDefinition({ id: "v2-unified-repeater", name: "통합 반복 데이터", description: "반복 데이터 관리 (인라인/모달/버튼 모드)", category: ComponentCategory.UNIFIED, webType: "entity", // 반복 데이터는 엔티티 참조 타입 version: "1.0.0", component: UnifiedRepeater, // React 컴포넌트 (필수) // 기본 속성 defaultProps: { config: { renderMode: "inline", dataSource: { tableName: "", foreignKey: "", referenceKey: "", }, columns: [], modal: { size: "md", }, button: { sourceType: "manual", manualButtons: [], layout: "horizontal", style: "outline", }, features: { showAddButton: true, showDeleteButton: true, inlineEdit: false, dragSort: false, showRowNumber: false, selectable: false, multiSelect: false, }, }, }, // 설정 스키마 configSchema: { renderMode: { type: "select", label: "렌더링 모드", options: [ { value: "inline", label: "인라인 (테이블)" }, { value: "modal", label: "모달" }, { value: "button", label: "버튼" }, { value: "mixed", label: "혼합 (테이블 + 버튼)" }, ], }, "dataSource.tableName": { type: "tableSelect", label: "데이터 테이블", description: "반복 데이터가 저장된 테이블", }, "dataSource.foreignKey": { type: "columnSelect", label: "연결 키 (FK)", description: "부모 레코드를 참조하는 컬럼", dependsOn: "dataSource.tableName", }, "dataSource.referenceKey": { type: "columnSelect", label: "상위 키", description: "현재 화면 테이블의 PK 컬럼", useCurrentTable: true, }, }, // 이벤트 events: ["onDataChange", "onRowClick", "onButtonClick"], // 아이콘 icon: "Repeat", // 태그 tags: ["data", "repeater", "table", "modal", "button", "unified"], // 설정 패널 configPanel: UnifiedRepeaterConfigPanel, }); export default V2UnifiedRepeaterDefinition;