import * as React from "react"; import type { Channel } from "@/shared/api/types"; import { useDeferredModalOpen } from "@/shared/ui/deferredModalOpen"; const ChannelBrowserDialog = React.lazy(async () => { const module = await import("@/features/channels/ui/ChannelBrowserDialog"); return { default: module.ChannelBrowserDialog }; }); const ChannelManagementSheet = React.lazy(async () => { const module = await import("@/features/channels/ui/ChannelManagementSheet"); return { default: module.ChannelManagementSheet }; }); export type BrowseDialogType = "stream" | "forum" | null; type AppShellOverlaysProps = { activeChannel: Channel | null; browseDialogType: BrowseDialogType; channels: Channel[]; currentPubkey?: string; isChannelManagementOpen: boolean; onBrowseChannelJoin: (channelId: string) => Promise; onBrowseDialogOpenChange: (open: boolean) => void; onChannelManagementOpenChange: (open: boolean) => void; onDeleteActiveChannel: () => void; onSelectChannel: (channelId: string) => void; }; export function AppShellOverlays({ activeChannel, browseDialogType, channels, currentPubkey, isChannelManagementOpen, onBrowseChannelJoin, onBrowseDialogOpenChange, onChannelManagementOpenChange, onDeleteActiveChannel, onSelectChannel, }: AppShellOverlaysProps) { const [visibleBrowseDialogType, setVisibleBrowseDialogType] = React.useState(null); const { cancelDeferredModalOpen, openNextFrame: openModalNextFrame } = useDeferredModalOpen(); React.useEffect(() => { if (browseDialogType === null) { cancelDeferredModalOpen(); setVisibleBrowseDialogType(null); return; } setVisibleBrowseDialogType(null); openModalNextFrame(() => { setVisibleBrowseDialogType(browseDialogType); }); }, [browseDialogType, cancelDeferredModalOpen, openModalNextFrame]); const renderedBrowseDialogType = visibleBrowseDialogType ?? browseDialogType; return ( <> {browseDialogType !== null ? ( ) : null} {isChannelManagementOpen && activeChannel !== null ? ( ) : null} ); }