feat: add workspace templates and tab visibility

This commit is contained in:
2026-07-10 21:32:48 +08:00
parent 2007b909d1
commit e412cfc45a
14 changed files with 739 additions and 67 deletions
+8
View File
@@ -1735,6 +1735,14 @@ func (a *App) ListWorkspaces() ([]workspace.Workspace, string) {
return workspaces, ""
}
// ListWorkspaceTemplates returns selectable built-in workspace templates.
func (a *App) ListWorkspaceTemplates() ([]workspace.WorkspaceTemplate, string) {
if a.workspace == nil {
return nil, "workspace not initialized"
}
return a.workspace.ListWorkspaceTemplates(), ""
}
// CreateWorkspace creates a top-level physical workspace folder.
func (a *App) CreateWorkspace(name, templateID string) (workspace.Workspace, string) {
if a.workspace == nil {
+19
View File
@@ -1448,6 +1448,25 @@ func TestWorkspaceAPIUsesTopLevelFoldersAndMetadataSnapshot(t *testing.T) {
}
}
func TestWorkspaceAPIListsSelectableTemplates(t *testing.T) {
app, vaultDir := newFilesTestApp(t, []string{"files.read"})
app.workspace = workspace.NewManager(vaultDir)
if err := app.workspace.Load(); err != nil {
t.Fatalf("workspace Load: %v", err)
}
templates, errStr := app.ListWorkspaceTemplates()
if errStr != "" {
t.Fatalf("ListWorkspaceTemplates: %s", errStr)
}
if len(templates) != 5 {
t.Fatalf("templates = %+v, want 5 selectable templates", templates)
}
if templates[0].ID != "default" || templates[1].ID != "project" || templates[4].ID != "minimal" {
t.Fatalf("template order = %+v", templates)
}
}
func TestWorkspaceAPIPublishesLifecycleEvents(t *testing.T) {
app, vaultDir := newFilesTestApp(t, []string{"files.read"})
app.workspace = workspace.NewManager(vaultDir)