Restore each task's open sheet when switching back

This commit is contained in:
Ian Gulliver
2026-10-23 22:02:25 -07:00
parent b02c9b3e3c
commit af0cd9b36c
6 changed files with 27 additions and 12 deletions
+1 -1
View File
@@ -98,7 +98,7 @@ extension Store {
case .project(let id): .project(id)
}
if sheet?.tab == .page, sheet?.owner == owner {
sheet = nil
_ = closeSheet()
}
return
}
+1 -1
View File
@@ -155,7 +155,7 @@ private struct LeftPane: View {
private func pick(_ tab: LeftTab) {
overlays.leftTab = tab
if store.sheet?.owner != .lead {
store.sheet = nil
_ = store.closeSheet()
}
}
}
+2 -2
View File
@@ -131,7 +131,7 @@ struct PhoneView: View {
}
.fullScreenCover(isPresented: Binding(get: { zoomed != nil }, set: { shown in
if !shown {
store.sheet = nil
_ = store.closeSheet()
}
})) {
if let zoomed {
@@ -240,7 +240,7 @@ private struct ZoomedView: View {
HStack {
Spacer()
Button("Done") {
store.sheet = nil
_ = store.closeSheet()
}
.font(Fonts.font(15, weight: 700))
.padding(.horizontal, 16)
+2 -2
View File
@@ -57,7 +57,7 @@ struct SheetHost: View {
.frame(width: stripWidth)
.contentShape(Rectangle())
.onTapGesture {
store.sheet = nil
_ = store.closeSheet()
}
.help("Close")
}
@@ -96,7 +96,7 @@ private struct SheetPanel: View {
.help("Open the page in the default browser")
}
Button {
store.sheet = nil
_ = store.closeSheet()
} label: {
Text("✕")
.font(Fonts.font(13, weight: 700))
+20 -5
View File
@@ -82,7 +82,14 @@ final class Store {
var pinned: Int?
var connected = false
private(set) var focus = Focus()
var sheet: Sheet?
var sheet: Sheet? {
didSet {
if case .task(let taskId?) = sheet?.owner {
taskSheets[taskId] = sheet
}
}
}
private var taskSheets: [String: Sheet] = [:]
var shownPages: [FileRoot: ShownPages] = [:]
var projectTab = ProjectTab.tasks
var leadSessions: [AgentSession] = []
@@ -567,7 +574,10 @@ final class Store {
func openTab(_ tab: TaskTab) {
if tab == primaryTab || sheet?.tab == tab {
sheet = nil
if let selectedTaskId {
taskSheets[selectedTaskId] = nil
}
_ = closeSheet()
return
}
sheet = Sheet(owner: .task(selectedTaskId), view: .tab(tab))
@@ -581,6 +591,9 @@ final class Store {
if sheet == nil {
return false
}
if case .task(let taskId?) = sheet?.owner {
taskSheets[taskId] = nil
}
sheet = nil
return true
}
@@ -750,12 +763,14 @@ final class Store {
}
func selectTask(_ taskId: String?) {
if case .task(let owner)? = sheet?.owner, owner != taskId {
sheet = nil
}
let changed = taskId != selectedTaskId
markVisited(selectedTaskId)
markVisited(taskId)
selectedTaskId = taskId
// A link can already have opened a specific view for the incoming task.
if changed, sheet?.owner != .lead, sheet == nil || sheet?.owner != .task(taskId) {
sheet = taskId.flatMap { taskSheets[$0] }
}
if let taskId {
lookUpTask(taskId)
_ = taskFeed(taskId)
+1 -1
View File
@@ -30,7 +30,7 @@ func runGo(_ key: String, _ store: Store, _ overlays: Overlays) {
}
case "l":
overlays.switcher?.close()
store.sheet = nil
_ = store.closeSheet()
overlays.leftTab = .lead
overlays.leadFocus += 1
case "s":