Use title view and configure

This commit is contained in:
ismailgulek
2021-11-19 16:33:04 +03:00
parent 308c7bdfc8
commit 39b8e5629f
3 changed files with 44 additions and 13 deletions
@@ -110,14 +110,11 @@ final class ThreadListViewController: UIViewController {
}
private func setupViews() {
let filterBarButtonItem = UIBarButtonItem(image: Asset.Images.roomContextMenuMore.image,
style: .plain,
target: self,
action: #selector(filterButtonTapped(_:)))
self.navigationItem.rightBarButtonItem = filterBarButtonItem
self.title = VectorL10n.threadsTitle
let titleView = ThreadRoomTitleView.loadFromNib()
titleView.mode = .allThreads
titleView.viewDelegate = self
titleView.configure(withViewModel: viewModel.titleViewModel)
navigationItem.titleView = titleView
self.threadsTableView.tableFooterView = UIView()
self.threadsTableView.register(cellType: ThreadTableViewCell.self)
@@ -189,11 +186,6 @@ final class ThreadListViewController: UIViewController {
// MARK: - Actions
@objc
private func filterButtonTapped(_ sender: UIBarButtonItem) {
self.viewModel.process(viewAction: .showFilterTypes)
}
}
// MARK: - ThreadListViewModelViewDelegate
@@ -206,6 +198,8 @@ extension ThreadListViewController: ThreadListViewModelViewDelegate {
}
}
// MARK: - UITableViewDataSource
extension ThreadListViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
@@ -225,6 +219,8 @@ extension ThreadListViewController: UITableViewDataSource {
}
// MARK: - UITableViewDelegate
extension ThreadListViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
@@ -238,3 +234,13 @@ extension ThreadListViewController: UITableViewDelegate {
}
}
// MARK: - ThreadRoomTitleViewDelegate
extension ThreadListViewController: ThreadRoomTitleViewDelegate {
func threadRoomTitleViewDidTapOptions(_ view: ThreadRoomTitleView) {
self.viewModel.process(viewAction: .showFilterTypes)
}
}
@@ -87,6 +87,30 @@ final class ThreadListViewModel: ThreadListViewModelProtocol {
return viewModel(forThread: threads[index])
}
var titleViewModel: ThreadRoomTitleViewModel {
guard let room = session.room(withRoomId: roomId) else {
return .empty
}
let avatarViewData = AvatarViewData(matrixItemId: room.matrixItemId,
displayName: room.displayName,
avatarUrl: room.mxContentUri,
mediaManager: room.mxSession.mediaManager,
fallbackImage: AvatarFallbackImage.matrixItem(room.matrixItemId,
room.displayName))
let encrpytionBadge: UIImage?
if let summary = room.summary, session.crypto != nil {
encrpytionBadge = EncryptionTrustLevelBadgeImageHelper.roomBadgeImage(for: summary.roomEncryptionTrustLevel())
} else {
encrpytionBadge = nil
}
return ThreadRoomTitleViewModel(roomAvatar: avatarViewData,
roomEncryptionBadge: encrpytionBadge,
roomDisplayName: room.displayName)
}
// MARK: - Private
private func viewModel(forThread thread: MXThread) -> ThreadViewModel {
@@ -37,6 +37,7 @@ protocol ThreadListViewModelProtocol {
var viewState: ThreadListViewState { get }
var titleViewModel: ThreadRoomTitleViewModel { get }
var selectedFilterType: ThreadListFilterType { get }
var numberOfThreads: Int { get }
func threadViewModel(at index: Int) -> ThreadViewModel?