/** * V2Repeater 컴포넌트 정의 * * 반복 데이터 관리를 위한 통합 컴포넌트 * 기존 simple-repeater-table, modal-repeater-table, repeat-screen-modal, related-data-buttons 통합 */ import { ComponentCategory } from "@/types/component"; import { createComponentDefinition } from "../../utils/createComponentDefinition"; import { V2RepeaterConfigPanel } from "@/components/v2/config-panels/V2RepeaterConfigPanel"; import { V2Repeater } from "@/components/v2/V2Repeater"; export const V2RepeaterDefinition = createComponentDefinition({ id: "v2-repeater", name: "통합 반복 데이터", description: "반복 데이터 관리 (인라인/모달/버튼 모드)", category: ComponentCategory.V2, webType: "entity", // 반복 데이터는 엔티티 참조 타입 version: "1.0.0", component: V2Repeater, // 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", "v2"], // 설정 패널 configPanel: V2RepeaterConfigPanel, // v2-repeater 사용으로 패널에서 숨김 hidden: true, }); export default V2RepeaterDefinition;