| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import ConnectIQ
- import SwiftUI
- extension ContactTrick {
- @Observable final class StateModel: BaseStateModel<Provider> {
- private(set) var syncInProgress = false
- private(set) var items: [Item] = []
- private(set) var changed: Bool = false
- @ObservationIgnored @Injected() var contactTrickManager: ContactTrickManager!
- @ObservationIgnored @Injected() var contactTrickStorage: ContactTrickStorage!
- var units: GlucoseUnits = .mmolL
- override func subscribe() {
- units = settingsManager.settings.units
- items = contactTrickManager.currentContacts.enumerated().map { index, contact in
- Item(
- index: index,
- entry: contact
- )
- }
- changed = false
- }
- func add() {
- let newItem = Item(
- index: items.count,
- entry: ContactTrickEntry()
- )
- items.append(newItem)
- changed = true
- }
- func update(_ atIndex: Int, _ value: ContactTrickEntry) {
- items[atIndex].entry = value
- changed = true
- }
- func remove(atOffsets: IndexSet) {
- items.remove(atOffsets: atOffsets)
- changed = true
- }
- @MainActor func save() async {
- syncInProgress = true
- let contacts = items.map { item -> ContactTrickEntry in
- item.entry
- }
- let didUpdateStatus = await contactTrickManager.updateContacts(contacts: contacts)
- // for contact in contacts {
- // await contactTrickStorage.storeContactTrickEntry(contact)
- // }
- syncInProgress = didUpdateStatus
- changed = didUpdateStatus
- if didUpdateStatus {
- contacts.enumerated().forEach { index, item in
- self.items[index].entry = item
- }
- }
- // provider.saveContacts(contacts)
- // .receive(on: DispatchQueue.main)
- // .sink { _ in
- // self.syncInProgress = false
- // self.changed = false
- // } receiveValue: { contacts in
- // contacts.enumerated().forEach { index, item in
- // self.items[index].entry = item
- // }
- // }
- // .store(in: &lifetime)
- }
- }
- }
|