+ {/* 라벨을 외부에 별도로 렌더링 */}
+ {shouldShowLabel && (
+
+ {labelText}
+ {component.required && *}
)}
- {/* 그룹 내 자식 컴포넌트들 렌더링 */}
- {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 || "#212121",
- 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`,
+ // });
}}
>
- {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}
- />
- ) : (
- {
- // 유틸리티 함수로 파일 컴포넌트 감지
- if (isFileComponent(component)) {
- console.log('🎯 page.tsx - 파일 컴포넌트 감지 → webType: "file"', {
- componentId: component.id,
- componentType: component.type,
- originalWebType: component.webType,
- });
- return "file";
- }
- // 다른 컴포넌트는 유틸리티 함수로 webType 결정
- return getComponentWebType(component) || "text";
- })()}
- config={component.webTypeConfig}
- props={{
- component: component,
- value: formData[component.columnName || component.id] || "",
- onChange: (value: any) => {
- const fieldName = component.columnName || component.id;
+ {/* 위젯 컴포넌트가 아닌 경우 DynamicComponentRenderer 사용 */}
+ {component.type !== "widget" ? (
+ {
setFormData((prev) => ({
...prev,
[fieldName]: value,
}));
- },
- onFormDataChange: (fieldName, value) => {
- console.log(`🎯 page.tsx onFormDataChange 호출: ${fieldName} = "${value}"`);
- console.log("📋 현재 formData:", formData);
- setFormData((prev) => {
- const newFormData = {
+ }}
+ 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}
+ />
+ ) : (
+ {
+ // 유틸리티 함수로 파일 컴포넌트 감지
+ if (isFileComponent(component)) {
+ console.log('🎯 page.tsx - 파일 컴포넌트 감지 → webType: "file"', {
+ componentId: component.id,
+ componentType: component.type,
+ originalWebType: component.webType,
+ });
+ return "file";
+ }
+ // 다른 컴포넌트는 유틸리티 함수로 webType 결정
+ return getComponentWebType(component) || "text";
+ })()}
+ config={component.webTypeConfig}
+ props={{
+ component: component,
+ value: formData[component.columnName || component.id] || "",
+ onChange: (value: any) => {
+ const fieldName = component.columnName || component.id;
+ setFormData((prev) => ({
...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",
- }}
- />
- )}
+ }));
+ },
+ 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",
+ }}
+ />
+ )}
+