53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
"use client";
|
|
|
|
import React from "react";
|
|
import { AutoRegisteringComponentRenderer } from "../../AutoRegisteringComponentRenderer";
|
|
import { ModalRepeaterTableDefinition } from "./index";
|
|
import { ModalRepeaterTableComponent } from "./ModalRepeaterTableComponent";
|
|
|
|
/**
|
|
* ModalRepeaterTable 렌더러
|
|
* 자동 등록 시스템을 사용하여 컴포넌트를 레지스트리에 등록
|
|
*/
|
|
export class ModalRepeaterTableRenderer extends AutoRegisteringComponentRenderer {
|
|
static componentDefinition = ModalRepeaterTableDefinition;
|
|
|
|
render(): React.ReactElement {
|
|
// onChange 콜백을 명시적으로 전달
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const handleChange = (newValue: any[]) => {
|
|
console.log("🔄 ModalRepeaterTableRenderer onChange:", newValue.length, "개 항목");
|
|
|
|
// 컴포넌트 업데이트
|
|
this.updateComponent({ value: newValue });
|
|
|
|
// 원본 onChange 콜백도 호출 (있다면)
|
|
if (this.props.onChange) {
|
|
this.props.onChange(newValue);
|
|
}
|
|
};
|
|
|
|
// renderer prop 제거 (불필요)
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
const { onChange, ...restProps } = this.props;
|
|
|
|
return <ModalRepeaterTableComponent {...restProps} onChange={handleChange} />;
|
|
}
|
|
|
|
/**
|
|
* 값 변경 처리 (레거시 메서드 - 호환성 유지)
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
protected handleValueChange = (value: any) => {
|
|
this.updateComponent({ value });
|
|
};
|
|
}
|
|
|
|
// 자동 등록 실행
|
|
ModalRepeaterTableRenderer.registerSelf();
|
|
|
|
// Hot Reload 지원 (개발 모드)
|
|
if (process.env.NODE_ENV === "development") {
|
|
ModalRepeaterTableRenderer.enableHotReload();
|
|
}
|