Add a Page tab that keeps the last shown page reachable
This commit is contained in:
@@ -40,7 +40,8 @@ func isPage(_ path: String) -> Bool {
|
||||
|
||||
extension Store {
|
||||
func openPage(_ page: Page) {
|
||||
sheet = Sheet(owner: .task(page.taskId), view: .page(page))
|
||||
shownPages[page.taskId] = page
|
||||
sheet = Sheet(owner: .task(page.taskId), view: .tab(.page))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ let tabLabels: [TaskTab: String] = [
|
||||
.board: "Board",
|
||||
.changes: "Changes",
|
||||
.files: "Files",
|
||||
.page: "Page",
|
||||
.terminal: "Terminal",
|
||||
.workflow: "Workflow",
|
||||
.project: "Project",
|
||||
@@ -230,6 +231,10 @@ struct TaskTabBody: View {
|
||||
ChangesView()
|
||||
case .files:
|
||||
FilesView()
|
||||
case .page:
|
||||
if let page = store.selectedTaskId.flatMap({ store.shownPages[$0] }) {
|
||||
PageView(page: page)
|
||||
}
|
||||
case .terminal:
|
||||
TerminalTab()
|
||||
case .workflow:
|
||||
@@ -385,6 +390,7 @@ private struct TabStrip: View {
|
||||
}
|
||||
switch t {
|
||||
case .board: return team
|
||||
case .page: return store.shownPages[taskId] != nil
|
||||
case .workflow: return false
|
||||
default: return true
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ enum SheetView {
|
||||
case tab(TaskTab)
|
||||
case image(NSImage)
|
||||
case diagram(BoxLayout)
|
||||
case page(Page)
|
||||
}
|
||||
|
||||
struct Sheet {
|
||||
@@ -82,7 +81,7 @@ private struct SheetPanel: View {
|
||||
.lineLimit(1)
|
||||
.truncationMode(.tail)
|
||||
Spacer(minLength: 0)
|
||||
if case .page(let page) = sheet.view, let url = page.url(store) {
|
||||
if sheet.tab == .page, let page = store.selectedTaskId.flatMap({ store.shownPages[$0] }), let url = page.url(store) {
|
||||
Button {
|
||||
NSWorkspace.shared.open(url)
|
||||
} label: {
|
||||
@@ -129,7 +128,6 @@ private struct SheetPanel: View {
|
||||
case .tab(let t): tabLabels[t]!
|
||||
case .image: "Image"
|
||||
case .diagram: "Diagram"
|
||||
case .page(let page): page.title(store)
|
||||
}
|
||||
if !overLeft {
|
||||
return "Lead · \(label)"
|
||||
@@ -159,8 +157,6 @@ private struct SheetPanel: View {
|
||||
DiagramViewer(layout: layout)
|
||||
.id(layout.id)
|
||||
.padding(12)
|
||||
case .page(let page):
|
||||
PageView(page: page)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@ import Observation
|
||||
import SwiftData
|
||||
|
||||
enum TaskTab: String {
|
||||
case transcript, board, changes, files, terminal, workflow, project
|
||||
case transcript, board, changes, files, page, terminal, workflow, project
|
||||
}
|
||||
|
||||
let taskTabs: [TaskTab] = [.transcript, .board, .changes, .files, .terminal, .workflow, .project]
|
||||
let taskTabs: [TaskTab] = [.transcript, .board, .changes, .files, .page, .terminal, .workflow, .project]
|
||||
|
||||
enum JumpTarget: Equatable {
|
||||
case question(String)
|
||||
@@ -71,6 +71,7 @@ final class Store {
|
||||
var connected = false
|
||||
private(set) var focus = Focus()
|
||||
var sheet: Sheet?
|
||||
var shownPages: [String: Page] = [:]
|
||||
var leadSessions: [AgentSession] = []
|
||||
let leadFeed: Feed
|
||||
var jump: Jump?
|
||||
|
||||
Reference in New Issue
Block a user