SnoozerViewModel.swift 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // LoopFollow
  2. // SnoozerViewModel.swift
  3. import Combine
  4. import Foundation
  5. final class SnoozerViewModel: ObservableObject {
  6. @Published var activeAlarm: Alarm?
  7. @Published var snoozeUnits: Int = 5
  8. @Published var timeUnitLabel: String = String(localized: "minutes")
  9. private var cancellables = Set<AnyCancellable>()
  10. init() {
  11. Observable.shared.currentAlarm.$value
  12. .map { id -> Alarm? in
  13. guard let id = id else { return nil }
  14. return Storage.shared.alarms.value.first { $0.id == id }
  15. }
  16. .receive(on: DispatchQueue.main)
  17. .sink { [weak self] alarm in
  18. self?.activeAlarm = alarm
  19. if let a = alarm {
  20. self?.snoozeUnits = a.snoozeDuration
  21. self?.timeUnitLabel = a.type.snoozeTimeUnit.label
  22. }
  23. }
  24. .store(in: &cancellables)
  25. if let alarm = activeAlarm {
  26. snoozeUnits = alarm.snoozeDuration
  27. }
  28. }
  29. func snoozeTapped() {
  30. AlarmManager.shared.performSnooze(snoozeUnits)
  31. }
  32. }