jsdw_ios/QuickLocation/Section/Map/MapViewModel.swift

53 lines
1.1 KiB
Swift

//
// MapViewModel.swift
// QuickLocation
//
import Foundation
import RxSwift
import RxCocoa
import CoreLocation
final class MapViewModel {
struct Output {
var members: Observable<[CircleMember]>
var trackingMode: Observable<Bool>
}
let output: Output
private let membersRelay = BehaviorRelay<[CircleMember]>(value: [])
private let trackingRelay = BehaviorRelay<Bool>(value: true)
let selectedMember = PublishSubject<CircleMember>()
init() {
output = Output(
members: membersRelay.asObservable(),
trackingMode: trackingRelay.asObservable()
)
}
func loadMembers() {
membersRelay.accept(.mock)
}
func toggleTracking() {
trackingRelay.accept(!trackingRelay.value)
}
func selectMember(_ member: CircleMember) {
selectedMember.onNext(member)
}
func currentUser() -> CircleMember? {
membersRelay.value.first { $0.isCurrentUser }
}
#if !targetEnvironment(simulator)
func memberAnnotations() -> [MemberAnnotation] {
membersRelay.value.map { MemberAnnotation(member: $0) }
}
#endif
}