"use client";
import React, { Suspense, useRef, useState } from "react";
import { Loader2, Inbox } from "lucide-react";
import { useTab, TabItem } from "@/contexts/TabContext";
import { DialogPortalContainerContext } from "@/contexts/DialogPortalContext";
import { ScreenViewPageEmbeddable } from "@/app/(main)/screens/[screenId]/page";
function TabLoadingFallback() {
return (
);
}
function EmptyTabState() {
return (
열린 탭이 없습니다
왼쪽 메뉴에서 화면을 선택하면 탭으로 열립니다.
);
}
/**
* 개별 탭 패널 - 탭별 Dialog 포탈 컨테이너를 제공
* 탭이 display:none이면 포탈 컨테이너도 숨겨져 모달이 자동으로 가려짐
*/
function TabPanel({
isActive,
isMounted,
children,
}: {
isActive: boolean;
isMounted: boolean;
children: React.ReactNode;
}) {
const [portalContainer, setPortalContainer] = useState(null);
return (
{isMounted ? children : null}
);
}
export function TabContent() {
const { tabs, activeTabId, refreshKeys } = useTab();
const stableOrderRef = useRef([]);
const mountedTabIdsRef = useRef>(
new Set(activeTabId ? [activeTabId] : [])
);
if (activeTabId && !mountedTabIdsRef.current.has(activeTabId)) {
mountedTabIdsRef.current.add(activeTabId);
}
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);
}
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) => (
}>
))}
>
);
}