"use client"; import React, { Suspense, useRef } from "react"; import { Loader2, Inbox } from "lucide-react"; import { useTab, TabItem } from "@/contexts/TabContext"; import { ScreenViewPageEmbeddable } from "@/app/(main)/screens/[screenId]/page"; function TabLoadingFallback() { return (

화면을 불러오는 중...

); } function EmptyTabState() { return (

열린 탭이 없습니다

왼쪽 메뉴에서 화면을 선택하면 탭으로 열립니다.

); } export function TabContent() { const { tabs, activeTabId, refreshKeys } = useTab(); // 탭 순서 변경(드래그 리오더링) 시 DOM 재배치를 방지하기 위해 // 탭이 추가된 순서(id 기준)로 고정 렌더링 const stableOrderRef = useRef([]); // F5 이후 활성 탭만 마운트하고, 비활성 탭은 클릭 시 마운트 (Lazy Mount) const mountedTabIdsRef = useRef>( new Set(activeTabId ? [activeTabId] : []) ); // 활성 탭을 마운트 목록에 추가 if (activeTabId && !mountedTabIdsRef.current.has(activeTabId)) { mountedTabIdsRef.current.add(activeTabId); } // 새 탭 추가 시 stableOrder에 append, 닫힌 탭은 제거 const currentIds = new Set(tabs.map(t => t.id)); const stableIds = new Set(stableOrderRef.current.map(t => t.id)); // 닫힌 탭 제거 stableOrderRef.current = stableOrderRef.current.filter(t => currentIds.has(t.id)); // 닫힌 탭을 마운트 목록에서도 제거 for (const id of mountedTabIdsRef.current) { if (!currentIds.has(id)) mountedTabIdsRef.current.delete(id); } // 새로 추가된 탭 append for (const tab of tabs) { if (!stableIds.has(tab.id)) { stableOrderRef.current.push(tab); } } const stableTabs = stableOrderRef.current; if (stableTabs.length === 0) { return ; } return ( <> {stableTabs.map((tab) => (
{mountedTabIdsRef.current.has(tab.id) ? ( }> ) : null}
))} ); }