Restore each task's open sheet when switching back
This commit is contained in:
@@ -98,7 +98,7 @@ extension Store {
|
||||
case .project(let id): .project(id)
|
||||
}
|
||||
if sheet?.tab == .page, sheet?.owner == owner {
|
||||
sheet = nil
|
||||
_ = closeSheet()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user