refactor: 引入 workspaceEvents 并迁移核心组件事件处理

This commit is contained in:
Baobhan Sith
2025-05-09 13:45:20 +08:00
parent 70b2d92d8a
commit fdf5c18dfb
12 changed files with 231 additions and 236 deletions
@@ -0,0 +1,74 @@
// packages/frontend/src/composables/workspaceEvents.ts
import mitt from 'mitt';
import type { ConnectionInfo } from '../stores/connections.store';
import type { Terminal as XtermTerminal } from 'xterm';
// 定义事件载荷类型
export type WorkspaceEventPayloads = {
// Terminal Events
'terminal:input': { sessionId: string; data: string };
'terminal:resize': { sessionId: string; dims: { cols: number; rows: number } };
'terminal:ready': { sessionId: string; terminal: XtermTerminal; searchAddon: any };
'terminal:sendCommand': { command: string; sessionId?: string }; // sessionId 可选,用于指定目标,默认为 active
'terminal:clear': void; // sessionId 可选,默认为 active
// Editor Events
'editor:closeTab': { tabId: string };
'editor:activateTab': { tabId: string };
'editor:updateContent': { tabId: string; content: string };
'editor:saveTab': { tabId: string };
'editor:changeEncoding': { tabId: string; encoding: string };
'editor:closeOtherTabs': { tabId: string };
'editor:closeTabsToRight': { tabId: string };
'editor:closeTabsToLeft': { tabId: string };
// Connection Events
'connection:connect': { connectionId: number }; // 来自 WorkspaceConnectionList 或其他地方
'connection:openNewSession': { connectionId: number }; // 来自 WorkspaceConnectionList
'connection:requestAdd': void; // 来自 WorkspaceConnectionList 或 TerminalTabBar
'connection:requestEdit': { connectionInfo: ConnectionInfo }; // 来自 WorkspaceConnectionList 或 TerminalTabBar
// Search Events (主要由 CommandInputBar 或 PaneTitleBar 发出)
'search:start': { term: string; sessionId?: string }; // sessionId 可选,用于指定搜索目标终端
'search:findNext': void;
'search:findPrevious': void;
'search:close': void;
// Session Management Events (主要由 TerminalTabBar 发出)
'session:activate': { sessionId: string };
'session:close': { sessionId: string };
'session:closeOthers': { targetSessionId: string };
'session:closeToRight': { targetSessionId: string };
'session:closeToLeft': { targetSessionId: string };
// UI Interaction Events
'ui:openLayoutConfigurator': void;
// 'ui:toggleVirtualKeyboard': void; // 如果决定迁移 CommandInputBar 的这个事件
};
// 创建 mitt 事件发射器实例
export const workspaceEmitter = mitt<WorkspaceEventPayloads>();
/**
* Composable to get the workspace event emitter function.
* @returns The emit function from the mitt instance.
*/
export function useWorkspaceEventEmitter() {
return workspaceEmitter.emit;
}
/**
* Composable to get the workspace event subscriber function.
* @returns The 'on' function from the mitt instance for subscribing to events.
*/
export function useWorkspaceEventSubscriber() {
return workspaceEmitter.on;
}
/**
* Composable to get the workspace event unsubscriber function.
* @returns The 'off' function from the mitt instance for unsubscribing from events.
*/
export function useWorkspaceEventOff() {
return workspaceEmitter.off;
}