- {/* 라벨을 외부에 별도로 렌더링 */}
- {shouldShowLabel && (
-
- {labelText}
- {component.required && *}
-
+ {/* 그룹 제목 */}
+ {(component as any).title && (
+
{(component as any).title}
)}
- {/* 실제 컴포넌트 */}
+ {/* 그룹 내 자식 컴포넌트들 렌더링 */}
+ {groupChildren.map((child) => (
+
+ {
+ console.log("📝 폼 데이터 변경:", { fieldName, value });
+ setFormData((prev) => {
+ const newFormData = {
+ ...prev,
+ [fieldName]: value,
+ };
+ console.log("📊 전체 폼 데이터:", newFormData);
+ return newFormData;
+ });
+ }}
+ screenInfo={{
+ id: screenId,
+ tableName: screen?.tableName,
+ }}
+ />
+
+ ))}
+
+ );
+ }
+
+ // 라벨 표시 여부 계산
+ const templateTypes = ["datatable"];
+ const shouldShowLabel =
+ component.style?.labelDisplay !== false &&
+ (component.label || component.style?.labelText) &&
+ !templateTypes.includes(component.type);
+
+ const labelText = component.style?.labelText || component.label || "";
+ const labelStyle = {
+ fontSize: component.style?.labelFontSize || "14px",
+ color: component.style?.labelColor || "#374151",
+ fontWeight: component.style?.labelFontWeight || "500",
+ backgroundColor: component.style?.labelBackgroundColor || "transparent",
+ padding: component.style?.labelPadding || "0",
+ borderRadius: component.style?.labelBorderRadius || "0",
+ marginBottom: component.style?.labelMarginBottom || "4px",
+ };
+
+ // 일반 컴포넌트 렌더링
+ return (
+
+ {/* 라벨을 외부에 별도로 렌더링 */}
+ {shouldShowLabel && (
{
- console.log("🎯 할당된 화면 컴포넌트:", {
- id: component.id,
- type: component.type,
- position: component.position,
- size: component.size,
- styleWidth: component.style?.width,
- styleHeight: component.style?.height,
- finalWidth: `${component.size.width}px`,
- finalHeight: `${component.size.height}px`,
- });
+ top: `${component.position.y - 25}px`, // 컴포넌트 위쪽에 라벨 배치
+ zIndex: (component.position.z || 1) + 1,
+ ...labelStyle,
}}
>
- {/* 위젯 컴포넌트가 아닌 경우 DynamicComponentRenderer 사용 */}
- {component.type !== "widget" ? (
- {
+ {labelText}
+ {component.required && *}
+
+ )}
+
+ {/* 실제 컴포넌트 */}
+
{
+ console.log("🎯 할당된 화면 컴포넌트:", {
+ id: component.id,
+ type: component.type,
+ position: component.position,
+ size: component.size,
+ styleWidth: component.style?.width,
+ styleHeight: component.style?.height,
+ finalWidth: `${component.size.width}px`,
+ finalHeight: `${component.size.height}px`,
+ });
+ }}
+ >
+ {/* 위젯 컴포넌트가 아닌 경우 DynamicComponentRenderer 사용 */}
+ {component.type !== "widget" ? (
+ {
+ setFormData((prev) => ({
+ ...prev,
+ [fieldName]: value,
+ }));
+ }}
+ screenId={screenId}
+ tableName={screen?.tableName}
+ onRefresh={() => {
+ console.log("화면 새로고침 요청");
+ // 테이블 컴포넌트 강제 새로고침을 위한 키 업데이트
+ setRefreshKey((prev) => prev + 1);
+ // 선택된 행 상태도 초기화
+ setSelectedRows([]);
+ setSelectedRowsData([]);
+ }}
+ onClose={() => {
+ console.log("화면 닫기 요청");
+ }}
+ // 테이블 선택된 행 정보 전달
+ selectedRows={selectedRows}
+ selectedRowsData={selectedRowsData}
+ onSelectedRowsChange={(newSelectedRows, newSelectedRowsData) => {
+ setSelectedRows(newSelectedRows);
+ setSelectedRowsData(newSelectedRowsData);
+ }}
+ // 테이블 새로고침 키 전달
+ refreshKey={refreshKey}
+ />
+ ) : (
+ {
+ const fieldName = component.columnName || component.id;
setFormData((prev) => ({
...prev,
[fieldName]: value,
}));
- }}
- screenId={screenId}
- tableName={screen?.tableName}
- onRefresh={() => {
- console.log("화면 새로고침 요청");
- // 테이블 컴포넌트 강제 새로고침을 위한 키 업데이트
- setRefreshKey((prev) => prev + 1);
- // 선택된 행 상태도 초기화
- setSelectedRows([]);
- setSelectedRowsData([]);
- }}
- onClose={() => {
- console.log("화면 닫기 요청");
- }}
- // 테이블 선택된 행 정보 전달
- selectedRows={selectedRows}
- selectedRowsData={selectedRowsData}
- onSelectedRowsChange={(newSelectedRows, newSelectedRowsData) => {
- setSelectedRows(newSelectedRows);
- setSelectedRowsData(newSelectedRowsData);
- }}
- // 테이블 새로고침 키 전달
- refreshKey={refreshKey}
- />
- ) : (
- {
- const fieldName = component.columnName || component.id;
- setFormData((prev) => ({
+ },
+ onFormDataChange: (fieldName, value) => {
+ console.log(`🎯 page.tsx onFormDataChange 호출: ${fieldName} = "${value}"`);
+ console.log(`📋 현재 formData:`, formData);
+ setFormData((prev) => {
+ const newFormData = {
...prev,
[fieldName]: value,
- }));
- },
- onFormDataChange: (fieldName, value) => {
- console.log(`🎯 page.tsx onFormDataChange 호출: ${fieldName} = "${value}"`);
- console.log(`📋 현재 formData:`, formData);
- setFormData((prev) => {
- const newFormData = {
- ...prev,
- [fieldName]: value,
- };
- console.log(`📝 업데이트된 formData:`, newFormData);
- return newFormData;
- });
- },
- isInteractive: true,
- formData: formData,
- readonly: component.readonly,
- required: component.required,
- placeholder: component.placeholder,
- className: "w-full h-full",
- }}
- />
- )}
-
+ };
+ console.log(`📝 업데이트된 formData:`, newFormData);
+ return newFormData;
+ });
+ },
+ isInteractive: true,
+ formData: formData,
+ readonly: component.readonly,
+ required: component.required,
+ placeholder: component.placeholder,
+ className: "w-full h-full",
+ }}
+ />
+ )}