Primera build enviada
This commit is contained in:
@@ -19,8 +19,14 @@ class AccountStore: ObservableObject {
|
||||
self.accountRepository = accountRepository ?? AccountRepository()
|
||||
self.iapService = iapService
|
||||
|
||||
self.accountRepository.fetchAccounts()
|
||||
// Clean up any duplicate Default accounts from previous bug
|
||||
self.accountRepository.cleanupDuplicateDefaultAccounts()
|
||||
|
||||
// Create default account if needed (now fetches directly from DB)
|
||||
let defaultAccount = self.accountRepository.createDefaultAccountIfNeeded()
|
||||
|
||||
// Trigger async fetch to populate the published accounts array
|
||||
self.accountRepository.fetchAccounts()
|
||||
accounts = self.accountRepository.accounts
|
||||
selectedAccount = defaultAccount
|
||||
|
||||
@@ -33,9 +39,23 @@ class AccountStore: ObservableObject {
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] accounts in
|
||||
self?.accounts = accounts
|
||||
if let selected = self?.selectedAccount, selected.isDeleted {
|
||||
self?.selectedAccount = nil
|
||||
}
|
||||
self?.syncSelectedAccount()
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
NotificationCenter.default.publisher(for: .didResetData)
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] _ in
|
||||
guard let self else { return }
|
||||
self.accountRepository.fetchAccounts()
|
||||
self.selectedAccount = nil
|
||||
self.showAllAccounts = true
|
||||
self.persistSelection()
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
private func loadSelection() {
|
||||
@@ -53,8 +73,8 @@ class AccountStore: ObservableObject {
|
||||
|
||||
private func syncSelectedAccount() {
|
||||
if showAllAccounts { return }
|
||||
if let selected = selectedAccount,
|
||||
accounts.contains(where: { $0.id == selected.id }) {
|
||||
if let selectedId = selectedAccount?.safeId,
|
||||
accounts.contains(where: { $0.safeId == selectedId }) {
|
||||
return
|
||||
}
|
||||
selectedAccount = accounts.first
|
||||
@@ -62,6 +82,7 @@ class AccountStore: ObservableObject {
|
||||
|
||||
func selectAllAccounts() {
|
||||
showAllAccounts = true
|
||||
selectedAccount = nil
|
||||
persistSelection()
|
||||
}
|
||||
|
||||
@@ -75,7 +96,7 @@ class AccountStore: ObservableObject {
|
||||
let context = CoreDataStack.shared.viewContext
|
||||
let settings = AppSettings.getOrCreate(in: context)
|
||||
settings.showAllAccounts = showAllAccounts
|
||||
settings.selectedAccountId = showAllAccounts ? nil : selectedAccount?.id
|
||||
settings.selectedAccountId = showAllAccounts ? nil : selectedAccount?.safeId
|
||||
CoreDataStack.shared.save()
|
||||
}
|
||||
|
||||
@@ -83,3 +104,10 @@ class AccountStore: ObservableObject {
|
||||
iapService.isPremium || accounts.count < 1
|
||||
}
|
||||
}
|
||||
|
||||
extension Account {
|
||||
var safeId: UUID? {
|
||||
guard !isDeleted else { return nil }
|
||||
return value(forKey: "id") as? UUID
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user