Show the phone's task list in the Mac's right pane from a list button

This commit is contained in:
Ian Gulliver
2026-10-22 10:31:49 -07:00
parent b54a1a04b3
commit 406f67a1a0
5 changed files with 94 additions and 65 deletions
+24 -2
View File
@@ -192,7 +192,9 @@ private struct TaskPane: View {
VStack(spacing: 0) {
TaskBar()
VStack(spacing: 0) {
if store.selectedTaskId == nil {
if overlays.taskList {
TaskList()
} else if store.selectedTaskId == nil {
ProjectView()
} else {
TabStrip()
@@ -208,6 +210,12 @@ private struct TaskPane: View {
}
.environment(\.paneAccent, accent)
.environment(\.inTask, true)
.onChange(of: store.reveals) {
overlays.taskList = false
}
.onChange(of: store.focus) {
overlays.taskList = false
}
.onGeometryChange(for: CGRect.self) { g in
g.frame(in: .global)
} action: { frame in
@@ -260,7 +268,7 @@ struct TaskBar: View {
var body: some View {
let task = store.selectedTaskId.flatMap { store.findTask($0) }
let project = store.focusedProject()
let label = task.map { "\(project?.name ?? "") ▸ \($0.name)" } ?? project?.name ?? "No task"
let label = overlays.taskList ? "All tasks" : task.map { "\(project?.name ?? "") ▸ \($0.name)" } ?? project?.name ?? "No task"
HStack(spacing: 0) {
Color.clear.frame(maxWidth: .infinity, maxHeight: 1)
Button {
@@ -290,6 +298,20 @@ struct TaskBar: View {
PreviewLink(preview: p)
}
}
#if os(macOS)
Button {
overlays.taskList.toggle()
} label: {
Image(systemName: "list.bullet")
.font(Fonts.font(13, weight: 600))
.foregroundStyle(accent)
.padding(.vertical, 6)
.contentShape(Rectangle())
}
.buttonStyle(.plain)
.help(overlays.taskList ? "Back to the task" : "Task list")
.accessibilityLabel("Task list")
#endif
}
.frame(maxWidth: .infinity)
}