Skip to main content

User Controllers

CurrentUserController

CurrentChatUserController allows you to observe and mutate the current user.

Publishers in CurrentUserController

The currentUserChangePublisher emits a new value every time the current user changes.

currentUserController
.currentUserChangePublisher
.sink(receiveValue: {
// Use the new user here
})
.store(in: &cancellables)

The unreadCountPublisher emits a new value every time the unread count changes.

currentUserController
.unreadCountPublisher
.sink(receiveValue: {
// Use the unread count value here
})
.store(in: &cancellables)

Example: Unread Count

Let's build a simple UIView that shows the current unread count for the current user.

class UnreadCountIndicatorView: UIView {

var unreadCount = 0 {
didSet {
unreadCountLabelView.text = "You have \(unreadCount) unread messages"
}
}

var unreadCountLabelView: UILabel = {
var label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()

override public init(frame: CGRect) {
super.init(frame: frame)
addSubview(unreadCountLabelView)
NSLayoutConstraint.activate([
unreadCountLabelView.topAnchor.constraint(equalTo: topAnchor),
unreadCountLabelView.bottomAnchor.constraint(equalTo: bottomAnchor),
unreadCountLabelView.leadingAnchor.constraint(equalTo: leadingAnchor),
unreadCountLabelView.trailingAnchor.constraint(equalTo: trailingAnchor)
])
}

required init?(coder: NSCoder) {
super.init(coder: coder)
}
}

class ViewController: UIViewController {
var currentUserController: CurrentChatUserController!
var cancellables: Set<AnyCancellable> = []

var unreadCountIndicatorView: UnreadCountIndicatorView = {
var view = UnreadCountIndicatorView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()

override func viewDidLoad() {
super.viewDidLoad()

currentUserController = ChatClient.shared.currentUserController()
currentUserController.synchronize()

currentUserController.unreadCountPublisher
.receive(on: RunLoop.main)
.sink { [weak self] unreadCount in
self?.unreadCountIndicatorView.unreadCount = unreadCount.messages
}.store(in: &cancellables)

navigationItem.titleView = unreadCountIndicatorView
}
}

UserListController

ChatUserListController allows you to observe a list of users based on the provided query.

Publishers in ChatUserListController

The usersChangesPublisher will emit a new value every time there is a change in the list of the users that match the query.

userListController
.usersChangesPublisher
.sink(receiveValue: {
// Use the new users here
})
.store(in: &cancellables)

UserController

ChatUserController allows you to observe and mutate the current user.

Publishers in ChatUserController

The userChangePublisher will emit a new value every time the user changes.

userController
.userChangePublisher
.sink(receiveValue: {
// Use the new user here
})
.store(in: &cancellables)

Did you find this page helpful?