/** * 분할 패널 컴포넌트 * 좌측과 우측에 화면을 임베드합니다. * * 데이터 전달은 좌측 화면에 배치된 버튼의 transferData 액션으로 처리됩니다. * 예: 좌측 화면에 TableListComponent + Button(transferData 액션) 배치 */ "use client"; import React, { useMemo } from "react"; import { EmbeddedScreen } from "./EmbeddedScreen"; import { Columns2 } from "lucide-react"; import { SplitPanelProvider } from "@/contexts/SplitPanelContext"; import { ResponsiveSplitPanel } from "@/components/common/ResponsiveSplitPanel"; interface ScreenSplitPanelProps { screenId?: number; config?: any; // 설정 패널에서 오는 config (leftScreenId, rightScreenId, splitRatio, resizable) initialFormData?: Record; // 🆕 수정 모드에서 전달되는 초기 데이터 groupedData?: Record[]; // 🆕 그룹 데이터 (수정 모드에서 원본 데이터 추적용) } /** * 분할 패널 컴포넌트 * 순수하게 화면 분할 기능만 제공합니다. */ export function ScreenSplitPanel({ screenId, config, initialFormData, groupedData }: ScreenSplitPanelProps) { // config에서 splitRatio 추출 (기본값 50) const configSplitRatio = config?.splitRatio ?? 50; // 설정 패널에서 오는 간단한 config를 임베딩 설정으로 변환 const leftEmbedding = config?.leftScreenId ? { id: 1, parentScreenId: screenId || 0, childScreenId: config.leftScreenId, position: "left" as const, mode: "view" as const, // 기본 view 모드 (select는 테이블 자체 설정) config: {}, companyCode: "*", createdAt: new Date(), updatedAt: new Date(), } : null; const rightEmbedding = config?.rightScreenId ? { id: 2, parentScreenId: screenId || 0, childScreenId: config.rightScreenId, position: "right" as const, mode: "view" as const, // 기본 view 모드 config: {}, companyCode: "*", createdAt: new Date(), updatedAt: new Date(), } : null; // config가 없는 경우 (디자이너 모드 또는 초기 상태) if (!config) { return (

화면 분할 패널

좌우로 화면을 나눕니다

우측 속성 패널 → 상세 설정에서 좌측/우측 화면을 선택하세요

💡 데이터 전달: 좌측 화면에 버튼 배치 후 transferData 액션 설정

); } // 좌측 또는 우측 화면이 설정되지 않은 경우 안내 메시지 표시 const hasLeftScreen = !!leftEmbedding; const hasRightScreen = !!rightEmbedding; // 분할 패널 고유 ID 생성 const splitPanelId = useMemo(() => `split-panel-${screenId || "unknown"}-${Date.now()}`, [screenId]); return ( ) : (

좌측 화면을 선택하세요

) } right={ hasRightScreen ? ( ) : (

우측 화면을 선택하세요

) } leftTitle="좌측 패널" leftWidth={configSplitRatio} minLeftWidth={20} maxLeftWidth={80} showResizer={config?.resizable !== false} collapsedOnMobile={true} />
); }