yattee/Shared/Navigation/AccountsViewModel.swift

37 lines
1.1 KiB
Swift
Raw Normal View History

2022-12-11 22:15:56 +00:00
import Foundation
final class AccountsViewModel: ObservableObject {
typealias AreInIncreasingOrder = (Account, Account) -> Bool
var accounts: [Account] { AccountsModel.shared.all }
var sortedAccounts: [Account] {
accounts.sorted { lhs, rhs in
let predicates: [AreInIncreasingOrder] = [
{ ($0.app ?? .local).rawValue < ($1.app ?? .local).rawValue },
{ $0.urlHost < $1.urlHost },
{ $0.description < $1.description }
]
for predicate in predicates {
if !predicate(lhs, rhs), !predicate(rhs, lhs) {
continue
}
return predicate(lhs, rhs)
}
return false
}
}
var publicAccount: Account? { AccountsModel.shared.publicAccount }
var currentAccount: Account? { AccountsModel.shared.current }
var instances: [Instance] { InstancesModel.shared.all }
func accountsOfInstance(_ instance: Instance) -> [Account] {
accounts.filter { $0.instance.apiURL == instance.apiURL }.sorted { $0.name < $1.name }
}
}