Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // TrainDetailViewModel.swift
- // LunchTrain
- //
- //
- import Foundation
- import FirebaseFirestore
- class TrainDetailViewModel {
- var didChangeData: ((TrainDetailViewData) -> Void)?
- var trainReference: DocumentReference?
- var localCollection: LocalCollection<User>!
- fileprivate var query: Query? {
- didSet {
- if let listener = listener {
- listener.remove()
- observeQuery()
- }
- }
- }
- private var listener: ListenerRegistration?
- var documents: [DocumentSnapshot] = []
- var viewData: TrainDetailViewData {
- didSet {
- didChangeData?(viewData)
- }
- }
- init(viewData: TrainDetailViewData) {
- self.viewData = viewData
- query = baseQuery()
- }
- func observeQuery() {
- guard let query = query else { return }
- stopObserving()
- listener = query.addSnapshotListener { [unowned self] (snapshot, error) in
- guard let snapshot = snapshot else {
- print("Error fetching snapshot results: \(error!)")
- return
- }
- let models = snapshot.documents.compactMap { (document) -> User? in
- if let model = User(dictionary: document.data()) {
- return model
- } else {
- print("error parsing document: \(document.data())")
- return nil
- }
- }
- self.viewData.passengers = models
- self.documents = snapshot.documents
- }
- }
- func stopObserving() {
- listener?.remove()
- }
- fileprivate func baseQuery() -> Query? {
- return trainReference?.collection("passengers")
- }
- }
Add Comment
Please, Sign In to add comment