Skip to content

Commit 889d244

Browse files
committed
Update UI when pin/title is changed via Settings
1 parent d1cc258 commit 889d244

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

Maccy/Observables/HistoryItemDecorator.swift

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ class HistoryItemDecorator: Identifiable, Hashable {
7070
self.shortcuts = shortcuts
7171
self.title = item.title
7272

73+
Task {
74+
await observeItemPin()
75+
}
76+
Task {
77+
await observeItemTitle()
78+
}
7379
Task {
7480
await sizeImages()
7581
}
@@ -110,11 +116,45 @@ class HistoryItemDecorator: Identifiable, Hashable {
110116
func togglePin() {
111117
if item.pin != nil {
112118
item.pin = nil
113-
shortcuts = []
114119
} else {
115120
let pin = HistoryItem.randomAvailablePin
116121
item.pin = pin
117-
shortcuts = KeyShortcut.create(character: pin)
122+
}
123+
}
124+
125+
private func observeItemPin() async {
126+
let pinSet = AsyncStream {
127+
await withCheckedContinuation { continuation in
128+
let _ = withObservationTracking {
129+
self.item.pin
130+
} onChange: {
131+
continuation.resume()
132+
}
133+
}
134+
135+
return self.item.pin
136+
}
137+
138+
for await pin in pinSet {
139+
self.shortcuts = KeyShortcut.create(character: pin)
140+
}
141+
}
142+
143+
private func observeItemTitle() async {
144+
let titleSet = AsyncStream {
145+
await withCheckedContinuation { continuation in
146+
let _ = withObservationTracking {
147+
self.item.title
148+
} onChange: {
149+
continuation.resume()
150+
}
151+
}
152+
153+
return self.item.title
154+
}
155+
156+
for await title in titleSet {
157+
self.title = title
118158
}
119159
}
120160
}

0 commit comments

Comments
 (0)