diff --git a/Maccy/Observables/HistoryItemDecorator.swift b/Maccy/Observables/HistoryItemDecorator.swift index bd74da0e..d6fe9296 100644 --- a/Maccy/Observables/HistoryItemDecorator.swift +++ b/Maccy/Observables/HistoryItemDecorator.swift @@ -70,6 +70,12 @@ class HistoryItemDecorator: Identifiable, Hashable { self.shortcuts = shortcuts self.title = item.title + Task { + await observeItemPin() + } + Task { + await observeItemTitle() + } Task { await sizeImages() } @@ -110,11 +116,45 @@ class HistoryItemDecorator: Identifiable, Hashable { func togglePin() { if item.pin != nil { item.pin = nil - shortcuts = [] } else { let pin = HistoryItem.randomAvailablePin item.pin = pin - shortcuts = KeyShortcut.create(character: pin) + } + } + + private func observeItemPin() async { + let pinSet = AsyncStream { + await withCheckedContinuation { continuation in + let _ = withObservationTracking { + self.item.pin + } onChange: { + continuation.resume() + } + } + + return self.item.pin + } + + for await pin in pinSet { + self.shortcuts = KeyShortcut.create(character: pin) + } + } + + private func observeItemTitle() async { + let titleSet = AsyncStream { + await withCheckedContinuation { continuation in + let _ = withObservationTracking { + self.item.title + } onChange: { + continuation.resume() + } + } + + return self.item.title + } + + for await title in titleSet { + self.title = title } } }