diff --git a/frontend/src/layouts/MainLayout.vue b/frontend/src/layouts/MainLayout.vue index c7811f6..fe0823d 100644 --- a/frontend/src/layouts/MainLayout.vue +++ b/frontend/src/layouts/MainLayout.vue @@ -3,18 +3,21 @@ import { ref, computed } from 'vue' import { RouterLink, useRoute, useRouter } from 'vue-router' import { useAuthStore } from '../stores/auth' import { useConnectionsStore } from '../stores/connections' +import { useSftpTabsStore } from '../stores/sftpTabs' import { useTerminalTabsStore } from '../stores/terminalTabs' import TerminalWorkspaceView from '../views/TerminalWorkspaceView.vue' -import { ArrowLeftRight, Server, LogOut, Menu, X, Terminal } from 'lucide-vue-next' +import { ArrowLeftRight, Server, LogOut, Menu, X, Terminal, FolderOpen } from 'lucide-vue-next' const route = useRoute() const router = useRouter() -const authStore = useAuthStore() -const connectionsStore = useConnectionsStore() -const tabsStore = useTerminalTabsStore() +const authStore = useAuthStore() +const connectionsStore = useConnectionsStore() +const sftpTabsStore = useSftpTabsStore() +const tabsStore = useTerminalTabsStore() const sidebarOpen = ref(false) const terminalTabs = computed(() => tabsStore.tabs) +const sftpTabs = computed(() => sftpTabsStore.tabs) const showTerminalWorkspace = computed(() => route.path === '/terminal') const keepTerminalWorkspaceMounted = computed(() => showTerminalWorkspace.value || terminalTabs.value.length > 0) @@ -30,10 +33,39 @@ function handleTabClick(tabId: string) { closeSidebar() } -function handleTabClose(tabId: string, event: Event) { - event.stopPropagation() - tabsStore.close(tabId) -} +function handleTabClose(tabId: string, event: Event) { + event.stopPropagation() + tabsStore.close(tabId) +} + +function isCurrentSftpRoute(connectionId: number) { + if (route.name !== 'Sftp') return false + + const routeParamId = Array.isArray(route.params.id) ? route.params.id[0] : route.params.id + return Number(routeParamId) === connectionId +} + +function handleSftpTabClick(tabId: string, connectionId: number) { + sftpTabsStore.activate(tabId) + router.push(`/sftp/${connectionId}`) + closeSidebar() +} + +function handleSftpTabClose(tabId: string, connectionId: number, event: Event) { + event.stopPropagation() + + const shouldNavigate = isCurrentSftpRoute(connectionId) + sftpTabsStore.close(tabId) + + if (!shouldNavigate) return + + if (sftpTabsStore.activeTab) { + router.push(`/sftp/${sftpTabsStore.activeTab.connectionId}`) + return + } + + router.push('/connections') +}