Focus the project dashboard when ⌘P opens it
This commit is contained in:
@@ -51,6 +51,7 @@ final class Overlays {
|
|||||||
var switcher: SwitcherModel?
|
var switcher: SwitcherModel?
|
||||||
var leftTab = LeftTab.lead
|
var leftTab = LeftTab.lead
|
||||||
var leadFocus = 0
|
var leadFocus = 0
|
||||||
|
var projectFocus = false
|
||||||
@ObservationIgnored var pickerFrame: CGRect = .zero
|
@ObservationIgnored var pickerFrame: CGRect = .zero
|
||||||
@ObservationIgnored var menuHover = false
|
@ObservationIgnored var menuHover = false
|
||||||
var paneFrame: CGRect = .zero
|
var paneFrame: CGRect = .zero
|
||||||
|
|||||||
@@ -8,8 +8,10 @@ private let refreshKinds: Set<String> = ["task.merged", "project.created"]
|
|||||||
|
|
||||||
struct ProjectView: View {
|
struct ProjectView: View {
|
||||||
@Environment(Store.self) private var store
|
@Environment(Store.self) private var store
|
||||||
|
@Environment(Overlays.self) private var overlays
|
||||||
@ViewState private var todos: [String: Result<Todo, ApiError>] = [:]
|
@ViewState private var todos: [String: Result<Todo, ApiError>] = [:]
|
||||||
@ViewState private var off: (() -> Void)?
|
@ViewState private var off: (() -> Void)?
|
||||||
|
@FocusState private var focused: Bool
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
@@ -23,6 +25,17 @@ struct ProjectView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||||
|
.focusable()
|
||||||
|
.focusEffectDisabled()
|
||||||
|
.focused($focused)
|
||||||
|
.onChange(of: overlays.projectFocus, initial: true) {
|
||||||
|
if overlays.projectFocus {
|
||||||
|
overlays.projectFocus = false
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
focused = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
off = store.events.add { ev in
|
off = store.events.add { ev in
|
||||||
if refreshKinds.contains(ev.kind), let projectId = ev.projectId {
|
if refreshKinds.contains(ev.kind), let projectId = ev.projectId {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ func runGo(_ key: String, _ store: Store, _ overlays: Overlays) {
|
|||||||
overlays.switcher?.close()
|
overlays.switcher?.close()
|
||||||
store.sheet = nil
|
store.sheet = nil
|
||||||
if let project = store.focusedProject() ?? store.projects.first {
|
if let project = store.focusedProject() ?? store.projects.first {
|
||||||
|
overlays.projectFocus = true
|
||||||
store.focusProject(project.id)
|
store.focusProject(project.id)
|
||||||
}
|
}
|
||||||
case "l":
|
case "l":
|
||||||
@@ -279,6 +280,7 @@ final class SwitcherModel {
|
|||||||
go(task.id)
|
go(task.id)
|
||||||
case .project(let p):
|
case .project(let p):
|
||||||
close()
|
close()
|
||||||
|
overlays.projectFocus = true
|
||||||
store.focusProject(p.id)
|
store.focusProject(p.id)
|
||||||
case .newTask(let p):
|
case .newTask(let p):
|
||||||
create(p.id, .init())
|
create(p.id, .init())
|
||||||
|
|||||||
Reference in New Issue
Block a user