Guest User

Untitled

a guest
Jun 22nd, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. //
  2. // TrainDetailViewModel.swift
  3. // LunchTrain
  4. //
  5. //
  6.  
  7. import Foundation
  8. import FirebaseFirestore
  9.  
  10. class TrainDetailViewModel {
  11. var didChangeData: ((TrainDetailViewData) -> Void)?
  12. var trainReference: DocumentReference?
  13. var localCollection: LocalCollection<User>!
  14.  
  15. fileprivate var query: Query? {
  16. didSet {
  17. if let listener = listener {
  18. listener.remove()
  19. observeQuery()
  20. }
  21. }
  22. }
  23.  
  24. private var listener: ListenerRegistration?
  25. var documents: [DocumentSnapshot] = []
  26.  
  27. var viewData: TrainDetailViewData {
  28. didSet {
  29. didChangeData?(viewData)
  30. }
  31. }
  32.  
  33. init(viewData: TrainDetailViewData) {
  34. self.viewData = viewData
  35. query = baseQuery()
  36. }
  37.  
  38. func observeQuery() {
  39. guard let query = query else { return }
  40. stopObserving()
  41.  
  42. listener = query.addSnapshotListener { [unowned self] (snapshot, error) in
  43. guard let snapshot = snapshot else {
  44. print("Error fetching snapshot results: \(error!)")
  45. return
  46. }
  47.  
  48. let models = snapshot.documents.compactMap { (document) -> User? in
  49. if let model = User(dictionary: document.data()) {
  50. return model
  51. } else {
  52. print("error parsing document: \(document.data())")
  53. return nil
  54. }
  55. }
  56.  
  57. self.viewData.passengers = models
  58. self.documents = snapshot.documents
  59. }
  60. }
  61.  
  62. func stopObserving() {
  63. listener?.remove()
  64. }
  65.  
  66. fileprivate func baseQuery() -> Query? {
  67. return trainReference?.collection("passengers")
  68. }
  69. }
Add Comment
Please, Sign In to add comment