Skip to content

refactor: extract workspace context loading and improve reinit flow#20

Merged
lyx-tec merged 1 commit into
mainfrom
refactor/workspace-switch-phase1
Jul 16, 2026
Merged

refactor: extract workspace context loading and improve reinit flow#20
lyx-tec merged 1 commit into
mainfrom
refactor/workspace-switch-phase1

Conversation

@lyx-tec

@lyx-tec lyx-tec commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Summary

重构 workspace 上下文加载逻辑,提取公共函数,优化 reinit 流程,修复切换 workspace 时的空白页问题。

Changes

New: WorkspaceContext type & loadWorkspaceContext()

  • 定义 WorkspaceContext 接口,统一承载 workspace 相关全部对象(client, window, workspace, activeTab, layout, workspaceTabs, workspaceLayouts)
  • 将原本分散在 initWave()reinitWave() 中的对象加载逻辑提取到 loadWorkspaceContext() 中,消除重复代码

New: applyWorkspaceContext()

  • 统一设置 global store 中的 workspaceId、activeTabId、staticTabId、updaterStatus
  • 支持 tabContext 参数区分 "own"(初始 tab)和 "active"(workspace 当前激活 tab)两种模式

New: WorkspaceSubscription class

  • unsubscribeWorkspace 全局变量封装为类,提供 setWorkspace()dispose() 方法,消除手动管理 unsubscribe 函数的风险

Improved: reinitWave() flow

  • 新增 waitForNextPaint() 工具函数,等待双倍 requestAnimationFrame(带 50ms 超时回退),确保 DOM 就绪
  • setWindowInitStatus("wave-ready") 延迟到下一帧之后,消除切换 workspace 时的空白页闪烁问题

Removed

  • 移除 reloadWorkspaceTabsAndLayouts() 函数,其逻辑已整合到 loadWorkspaceContext()

Bug Fix

  • reinitWave() 现在使用 "active" tabContext(即 workspace 的 activeTabId),initWave() 使用 "own" tabContext(即当前 tabId)
  • 修复了 reinit 时 staticTabId 始终设置为 activeTabId 导致的问题 — 在切换 workspace 后,新 workspace 的 active workspace 与当前 tab 可能不同,错误地将 staticTabId 设为 workspace activeTab 而非当前 tab 会导致渲染目标错误,进而出现空白页

@lyx-tec
lyx-tec merged commit 001248c into main Jul 16, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant