import { useEffect, useState } from 'react' import { useSearchParams } from 'react-router-dom' import type { FileItemDTO } from '@shared/types/file' import { matchModule } from '@/lib/module-registry' import { MarkdownTabPage } from '@/components/tabs/MarkdownTabPage' import { RemoteTabPage } from '@/modules/remote/RemoteTabPage' import { FileTransferPage } from '@/modules/remote/components/file-transfer/FileTransferPage' import { Minus, Square, X, Maximize2 } from 'lucide-react' import { usePopOutTab } from '@/hooks/domain/usePopOutTab' export const PopoutPage = () => { const [searchParams] = useSearchParams() const [file, setFile] = useState(null) const [error, setError] = useState(null) const [isMaximized, setIsMaximized] = useState(false) usePopOutTab() useEffect(() => { const path = searchParams.get('path') const name = searchParams.get('name') if (!path || !name) { setError('Missing path or name parameter') return } setFile({ name: decodeURIComponent(name), path: decodeURIComponent(path), type: 'file', size: 0, modified: new Date().toISOString(), }) window.electronAPI?.windowIsMaximized().then((result) => { if (result.success) { setIsMaximized(result.isMaximized) } }) }, [searchParams]) const handleMinimize = () => { window.electronAPI?.windowMinimize() } const handleMaximize = async () => { const result = await window.electronAPI?.windowMaximize() if (result?.success && result.isMaximized !== undefined) { setIsMaximized(result.isMaximized) } } const handleClose = () => { window.electronAPI?.windowClose() } if (error) { return (
{error}
) } if (!file) { return (
Loading...
) } const renderContent = () => { if (file.path.startsWith('file-transfer-panel')) { const queryString = file.path.includes('?') ? file.path.split('?')[1] : '' const urlParams = new URLSearchParams(queryString) const serverHost = urlParams.get('host') || '' const port = parseInt(urlParams.get('port') || '3000', 10) const password = urlParams.get('password') || undefined return ( window.close()} /> ) } if (file.path.startsWith('remote-desktop://') || file.path.startsWith('remote-git://')) { const urlParams = new URLSearchParams(file.path.split('?')[1]) const url = urlParams.get('url') || 'https://www.baidu.com' const deviceName = urlParams.get('device') || '' return } const module = matchModule(file) if (module) { const Component = module.component return } return {}} /> } return (
{file.name}
{renderContent()}
) }