-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCommunityPageVC+Binding.swift
125 lines (113 loc) · 5.09 KB
/
CommunityPageVC+Binding.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//
// CommunityPageVC+Binding.swift
// Commun
//
// Created by Chung Tran on 11/21/19.
// Copyright © 2019 Commun Limited. All rights reserved.
//
import Foundation
import RxSwift
extension CommunityPageVC {
func bindSelectedIndex() {
headerView.selectedIndex
.do(onNext: { (index) in
let show = (index == 1) && self.viewModel.profile.value?.isLeader != true
self.headerView.becomeALeaderView.isHidden = !show
})
.map { index -> CommunityPageViewModel.SegmentioItem in
switch index {
case 0:
return .posts
case 1:
return .leads
case 2:
return .about
case 3:
return .rules
default:
fatalError("not found selected index")
}
}
.bind(to: (viewModel as! CommunityPageViewModel).segmentedItem)
.disposed(by: disposeBag)
Observable.combineLatest(
(viewModel as! CommunityPageViewModel).segmentedItem,
viewModel.profile
)
.subscribe(onNext: { (selectedItem, profile) in
let show = (selectedItem == .leads) && profile?.isLeader != true
self.headerView.becomeALeaderView.isHidden = !show
})
.disposed(by: disposeBag)
}
func bindProfileBlocked() {
ResponseAPIContentGetCommunity.observeEvent(eventName: ResponseAPIContentGetCommunity.blockedEventName)
.subscribe(onNext: { (blockedProfile) in
guard blockedProfile.communityId == self.viewModel.profile.value?.communityId else {return}
self.back()
})
.disposed(by: disposeBag)
}
func bindCommunityManager() {
let vm = (viewModel as! CommunityPageViewModel)
vm.proposalsVM.items
.filter {_ in vm.profile.value?.isLeader == true}
.map {_ in vm.proposalsVM.proposalsCount}
.map {"\($0)"}
.bind(to: headerView.manageCommunityButtonsView.proposalsCountLabel.rx.text)
.disposed(by: disposeBag)
vm.reportsVM.items
.filter {_ in vm.profile.value?.isLeader == true}
.map {_ in vm.reportsVM.reportsCount}
.map {"\($0)"}
.bind(to: headerView.manageCommunityButtonsView.reportsCountLabel.rx.text)
.disposed(by: disposeBag)
// manage view
let manageCommunityButtonsView = self.headerView.manageCommunityButtonsView
let originalColor = UIColor.appBlackColor
vm.proposalsVM.state
.filter {_ in vm.profile.value?.isLeader == true}
.subscribe(onNext: { state in
switch state {
case .loading(true):
manageCommunityButtonsView.proposalsButton.showLoader()
manageCommunityButtonsView.proposalsCountLabel.textColor = originalColor
case .loading(false), .listEnded, .listEmpty:
manageCommunityButtonsView.proposalsButton.hideLoader()
manageCommunityButtonsView.proposalsCountLabel.textColor = originalColor
case .error:
manageCommunityButtonsView.proposalsButton.hideLoader()
manageCommunityButtonsView.proposalsCountLabel.textColor = .red
manageCommunityButtonsView.proposalsCountLabel.text = "error".localized().uppercaseFirst
}
})
.disposed(by: disposeBag)
vm.reportsVM.state
.filter {_ in vm.profile.value?.isLeader == true}
.subscribe(onNext: { state in
switch state {
case .loading(true):
manageCommunityButtonsView.reportsButton.showLoader()
manageCommunityButtonsView.reportsCountLabel.textColor = originalColor
case .loading(false), .listEnded, .listEmpty:
manageCommunityButtonsView.reportsButton.hideLoader()
manageCommunityButtonsView.reportsCountLabel.textColor = originalColor
case .error:
manageCommunityButtonsView.reportsButton.hideLoader()
manageCommunityButtonsView.reportsCountLabel.textColor = .red
manageCommunityButtonsView.reportsCountLabel.text = "error".localized().uppercaseFirst
}
})
.disposed(by: disposeBag)
let isLeader = vm.leadsVM.items.filter {!$0.isEmpty}.map {$0.filter {$0.inTop}}.map {$0.contains(where: {$0.userId == Config.currentUser?.id})}
.asDriver(onErrorJustReturn: false)
isLeader.map {!$0}
.distinctUntilChanged()
.drive(manageCommunityButtonsView.rx.isHidden)
.disposed(by: disposeBag)
isLeader.map {!$0}
.distinctUntilChanged()
.drive(manageCommunityBarButton.rx.isHidden)
.disposed(by: disposeBag)
}
}