ContactTrickStateModel.swift 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. var units: GlucoseUnits = .mmolL
  10. override func subscribe() {
  11. units = settingsManager.settings.units
  12. items = contactTrickManager.currentContacts.enumerated().map { index, contact in
  13. Item(
  14. index: index,
  15. entry: contact
  16. )
  17. }
  18. changed = false
  19. }
  20. func add() {
  21. let newItem = Item(
  22. index: items.count,
  23. entry: ContactTrickEntry()
  24. )
  25. items.append(newItem)
  26. changed = true
  27. }
  28. func update(_ atIndex: Int, _ value: ContactTrickEntry) {
  29. items[atIndex].entry = value
  30. changed = true
  31. }
  32. func remove(atOffsets: IndexSet) {
  33. items.remove(atOffsets: atOffsets)
  34. changed = true
  35. }
  36. func save() {
  37. syncInProgress = true
  38. let contacts = items.map { item -> ContactTrickEntry in
  39. item.entry
  40. }
  41. // provider.saveContacts(contacts)
  42. // .receive(on: DispatchQueue.main)
  43. // .sink { _ in
  44. // self.syncInProgress = false
  45. // self.changed = false
  46. // } receiveValue: { contacts in
  47. // contacts.enumerated().forEach { index, item in
  48. // self.items[index].entry = item
  49. // }
  50. // }
  51. // .store(in: &lifetime)
  52. }
  53. }
  54. }