diff --git a/src/pages/NoteBrowser.tsx b/src/pages/NoteBrowser.tsx index f00b8aa..28f5740 100644 --- a/src/pages/NoteBrowser.tsx +++ b/src/pages/NoteBrowser.tsx @@ -122,21 +122,12 @@ export const NoteBrowser = () => { const tabState = tabs.get(file.path) if (!tabState) return - const tabData = { - file: file, - content: tabState.content, - unsavedContent: tabState.unsavedContent, - isEditing: tabState.isEditing, - loading: tabState.loading, - loaded: tabState.loaded, - } + const content = tabState.content || '' + const unsavedContent = tabState.unsavedContent || content + const isEditing = tabState.isEditing - const route = `/popout?path=${encodeURIComponent(file.path)}&name=${encodeURIComponent(file.name)}` - const result = await window.electronAPI?.createWindow({ route, title: file.name }) - - if (result?.success && result.windowId) { - await window.electronAPI?.transferTabData(result.windowId!, tabData) - } + const route = `/popout?path=${encodeURIComponent(file.path)}&name=${encodeURIComponent(file.name)}&content=${encodeURIComponent(content)}&unsaved=${encodeURIComponent(unsavedContent)}&editing=${isEditing}` + await window.electronAPI?.createWindow({ route, title: file.name }) closeFile(file) }, [tabs, closeFile]) diff --git a/src/pages/PopoutPage.tsx b/src/pages/PopoutPage.tsx index 62beca4..503a017 100644 --- a/src/pages/PopoutPage.tsx +++ b/src/pages/PopoutPage.tsx @@ -6,39 +6,85 @@ 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' +import { useTabStore } from '@/stores' export const PopoutPage = () => { const [searchParams] = useSearchParams() const [file, setFile] = useState(null) - const [error, setError] = useState(null) + const [content, setContent] = useState('') + const [unsavedContent, setUnsavedContent] = useState('') + const [isEditing, setIsEditing] = useState(false) const [isMaximized, setIsMaximized] = useState(false) + const [ready, setReady] = useState(false) - usePopOutTab() + const { selectFile } = useTabStore() useEffect(() => { const path = searchParams.get('path') const name = searchParams.get('name') + const contentParam = searchParams.get('content') + const unsavedParam = searchParams.get('unsaved') + const editingParam = searchParams.get('editing') if (!path || !name) { - setError('Missing path or name parameter') return } + const decodedPath = decodeURIComponent(path) + const decodedName = decodeURIComponent(name) + const decodedContent = contentParam ? decodeURIComponent(contentParam) : '' + const decodedUnsaved = unsavedParam ? decodeURIComponent(unsavedParam) : decodedContent + const decodedEditing = editingParam === 'true' + setFile({ - name: decodeURIComponent(name), - path: decodeURIComponent(path), + name: decodedName, + path: decodedPath, type: 'file', size: 0, modified: new Date().toISOString(), }) + setContent(decodedContent) + setUnsavedContent(decodedUnsaved) + setIsEditing(decodedEditing) + + useTabStore.setState((state) => { + const newTabs = new Map(state.tabs) + newTabs.set(decodedPath, { + file: { + name: decodedName, + path: decodedPath, + type: 'file' as const, + size: 0, + modified: new Date().toISOString(), + }, + content: decodedContent, + unsavedContent: decodedUnsaved, + isEditing: decodedEditing, + loading: false, + loaded: true, + }) + return { + tabs: newTabs, + activeTabId: decodedPath, + } + }) + + selectFile({ + name: decodedName, + path: decodedPath, + type: 'file', + size: 0, + modified: new Date().toISOString(), + }) + + setReady(true) window.electronAPI?.windowIsMaximized().then((result) => { if (result.success) { setIsMaximized(result.isMaximized) } }) - }, [searchParams]) + }, [searchParams, selectFile]) const handleMinimize = () => { window.electronAPI?.windowMinimize() @@ -55,15 +101,7 @@ export const PopoutPage = () => { window.electronAPI?.windowClose() } - if (error) { - return ( -
-
{error}
-
- ) - } - - if (!file) { + if (!file || !ready) { return (
Loading...