ContactTrickStateModel.swift 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import ConnectIQ
  2. import SwiftUI
  3. extension ContactTrick {
  4. @Observable final class StateModel: BaseStateModel<Provider> {
  5. private(set) var syncInProgress = false
  6. private(set) var items: [Item] = []
  7. private(set) var changed: Bool = false
  8. @ObservationIgnored @Injected() var contactTrickManager: ContactTrickManager!
  9. @ObservationIgnored @Injected() var contactTrickStorage: ContactTrickStorage!
  10. var units: GlucoseUnits = .mmolL
  11. override func subscribe() {
  12. units = settingsManager.settings.units
  13. items = contactTrickManager.currentContacts.enumerated().map { index, contact in
  14. Item(
  15. index: index,
  16. entry: contact
  17. )
  18. }
  19. changed = false
  20. }
  21. func add() {
  22. let newItem = Item(
  23. index: items.count,
  24. entry: ContactTrickEntry()
  25. )
  26. items.append(newItem)
  27. changed = true
  28. }
  29. func update(_ atIndex: Int, _ value: ContactTrickEntry) {
  30. items[atIndex].entry = value
  31. changed = true
  32. }
  33. func remove(atOffsets: IndexSet) {
  34. items.remove(atOffsets: atOffsets)
  35. changed = true
  36. }
  37. @MainActor func save() async {
  38. syncInProgress = true
  39. let contacts = items.map { item -> ContactTrickEntry in
  40. item.entry
  41. }
  42. let didUpdateStatus = await contactTrickManager.updateContacts(contacts: contacts)
  43. // for contact in contacts {
  44. // await contactTrickStorage.storeContactTrickEntry(contact)
  45. // }
  46. syncInProgress = didUpdateStatus
  47. changed = didUpdateStatus
  48. if didUpdateStatus {
  49. contacts.enumerated().forEach { index, item in
  50. self.items[index].entry = item
  51. }
  52. }
  53. // provider.saveContacts(contacts)
  54. // .receive(on: DispatchQueue.main)
  55. // .sink { _ in
  56. // self.syncInProgress = false
  57. // self.changed = false
  58. // } receiveValue: { contacts in
  59. // contacts.enumerated().forEach { index, item in
  60. // self.items[index].entry = item
  61. // }
  62. // }
  63. // .store(in: &lifetime)
  64. }
  65. }
  66. }