ShowDirectoryViewModel: Handle tap on search input cell.

This commit is contained in:
SBiOSoftWhare 2021-06-11 19:37:23 +02:00
parent aa77daf975
commit cb432f05fa
9 changed files with 52 additions and 26 deletions

View file

@ -2173,4 +2173,9 @@
self.roomsDirectoryCoordinatorBridgePresenter = nil;
}
- (void)roomsDirectoryCoordinatorBridgePresenterDelegate:(RoomsDirectoryCoordinatorBridgePresenter *)coordinatorBridgePresenter didSelectRoomWithIdOrAlias:(NSString * _Nonnull)roomIdOrAlias
{
// TODO: Implement
}
@end

View file

@ -72,6 +72,7 @@ final class RoomsDirectoryCoordinator: RoomsDirectoryCoordinatorType {
// MARK: - ShowDirectoryCoordinatorDelegate
extension RoomsDirectoryCoordinator: ShowDirectoryCoordinatorDelegate {
func showDirectoryCoordinator(_ coordinator: ShowDirectoryCoordinatorType, didSelectRoom room: MXPublicRoom) {
self.delegate?.roomsDirectoryCoordinator(self, didSelectRoom: room)
}
@ -87,4 +88,8 @@ extension RoomsDirectoryCoordinator: ShowDirectoryCoordinatorDelegate {
func showDirectoryCoordinatorWantsToShow(_ coordinator: ShowDirectoryCoordinatorType, viewController: UIViewController) {
toPresentable().present(RiotNavigationController(rootViewController: viewController), animated: true, completion: nil)
}
func showDirectoryCoordinator(_ coordinator: ShowDirectoryCoordinatorType, didSelectRoomWithIdOrAlias roomIdOrAlias: String) {
self.delegate?.roomsDirectoryCoordinator(self, didSelectRoomWithIdOrAlias: roomIdOrAlias)
}
}

View file

@ -22,6 +22,7 @@ import Foundation
func roomsDirectoryCoordinatorBridgePresenterDelegateDidComplete(_ coordinatorBridgePresenter: RoomsDirectoryCoordinatorBridgePresenter)
func roomsDirectoryCoordinatorBridgePresenterDelegate(_ coordinatorBridgePresenter: RoomsDirectoryCoordinatorBridgePresenter, didSelectRoom room: MXPublicRoom)
func roomsDirectoryCoordinatorBridgePresenterDelegateDidTapCreateNewRoom(_ coordinatorBridgePresenter: RoomsDirectoryCoordinatorBridgePresenter)
func roomsDirectoryCoordinatorBridgePresenterDelegate(_ coordinatorBridgePresenter: RoomsDirectoryCoordinatorBridgePresenter, didSelectRoomWithIdOrAlias roomIdOrAlias: String)
}
/// RoomsDirectoryCoordinatorBridgePresenter enables to start RoomsDirectoryCoordinator from a view controller.
@ -96,6 +97,9 @@ extension RoomsDirectoryCoordinatorBridgePresenter: RoomsDirectoryCoordinatorDel
self.delegate?.roomsDirectoryCoordinatorBridgePresenterDelegateDidComplete(self)
}
func roomsDirectoryCoordinator(_ coordinator: RoomsDirectoryCoordinatorType, didSelectRoomWithIdOrAlias roomIdOrAlias: String) {
self.delegate?.roomsDirectoryCoordinatorBridgePresenterDelegate(self, didSelectRoomWithIdOrAlias: roomIdOrAlias)
}
}
// MARK: - UIAdaptivePresentationControllerDelegate

View file

@ -22,6 +22,7 @@ protocol RoomsDirectoryCoordinatorDelegate: class {
func roomsDirectoryCoordinator(_ coordinator: RoomsDirectoryCoordinatorType, didSelectRoom room: MXPublicRoom)
func roomsDirectoryCoordinatorDidTapCreateNewRoom(_ coordinator: RoomsDirectoryCoordinatorType)
func roomsDirectoryCoordinatorDidComplete(_ coordinator: RoomsDirectoryCoordinatorType)
func roomsDirectoryCoordinator(_ coordinator: RoomsDirectoryCoordinatorType, didSelectRoomWithIdOrAlias roomIdOrAlias: String)
}
/// `RoomsDirectoryCoordinatorType` is a protocol describing a Coordinator that handle keybackup setup navigation flow.

View file

@ -17,19 +17,19 @@
import Foundation
struct DirectoryRoomTableViewCellVM {
var title: String?
var numberOfUsers: Int
var subtitle: String?
var isJoined: Bool = false
private var roomId: String!
private var avatarUrl: String?
private var mediaManager: MXMediaManager?
func setAvatar(in avatarImageView: MXKImageView) {
let avatarImage = AvatarGenerator.generateAvatar(forMatrixItem: roomId, withDisplayName: title)
if let avatarUrl = avatarUrl {
let title: String?
let numberOfUsers: Int
let subtitle: String?
let isJoined: Bool
let roomId: String
let avatarViewData: AvatarViewDataProtocol
// TODO: Use AvatarView subclass in the cell view
func setAvatar(in avatarImageView: MXKImageView) {
let avatarImage = AvatarGenerator.generateAvatar(forMatrixItem: self.avatarViewData.matrixItemId, withDisplayName: title)
if let avatarUrl = self.avatarViewData.avatarUrl {
avatarImageView.enableInMemoryCache = true
avatarImageView.setImageURI(avatarUrl,
@ -38,7 +38,7 @@ struct DirectoryRoomTableViewCellVM {
toFitViewSize: avatarImageView.frame.size,
with: MXThumbnailingMethodCrop,
previewImage: avatarImage,
mediaManager: mediaManager)
mediaManager: self.avatarViewData.mediaManager)
} else {
avatarImageView.image = avatarImage
}
@ -48,16 +48,18 @@ struct DirectoryRoomTableViewCellVM {
init(title: String?,
numberOfUsers: Int,
subtitle: String?,
isJoined: Bool,
isJoined: Bool = false,
roomId: String!,
avatarUrl: String?,
mediaManager: MXMediaManager?) {
mediaManager: MXMediaManager) {
self.title = title
self.numberOfUsers = numberOfUsers
self.subtitle = subtitle
self.isJoined = isJoined
self.roomId = roomId
self.avatarUrl = avatarUrl
self.mediaManager = mediaManager
let avatarViewData = RoomAvatarViewData(roomId: roomId, displayName: title, avatarUrl: avatarUrl, mediaManager: mediaManager)
self.avatarViewData = avatarViewData
}
}

View file

@ -80,6 +80,9 @@ final class ShowDirectoryCoordinator: ShowDirectoryCoordinatorType {
// MARK: - ShowDirectoryViewModelCoordinatorDelegate
extension ShowDirectoryCoordinator: ShowDirectoryViewModelCoordinatorDelegate {
func showDirectoryViewModel(_ viewModel: ShowDirectoryViewModelType, didSelectRoomWithIdOrAlias roomIdOrAlias: String) {
self.delegate?.showDirectoryCoordinator(self, didSelectRoomWithIdOrAlias: roomIdOrAlias)
}
func showDirectoryViewModelDidSelect(_ viewModel: ShowDirectoryViewModelType, room: MXPublicRoom) {
self.delegate?.showDirectoryCoordinator(self, didSelectRoom: room)

View file

@ -23,6 +23,7 @@ protocol ShowDirectoryCoordinatorDelegate: class {
func showDirectoryCoordinatorDidTapCreateNewRoom(_ coordinator: ShowDirectoryCoordinatorType)
func showDirectoryCoordinatorDidCancel(_ coordinator: ShowDirectoryCoordinatorType)
func showDirectoryCoordinatorWantsToShow(_ coordinator: ShowDirectoryCoordinatorType, viewController: UIViewController)
func showDirectoryCoordinator(_ coordinator: ShowDirectoryCoordinatorType, didSelectRoomWithIdOrAlias roomIdOrAlias: String)
}
/// `ShowDirectoryCoordinatorType` is a protocol describing a Coordinator that handle key backup setup passphrase navigation flow.

View file

@ -74,10 +74,10 @@ final class ShowDirectoryViewModel: NSObject, ShowDirectoryViewModelType {
let directorySection = self.sections[indexPath.section]
switch directorySection {
case .searchInput:
break
case.publicRoomsDirectory:
guard let publicRoom = dataSource.room(at: indexPath) else { return }
case .searchInput(let viewData):
self.coordinatorDelegate?.showDirectoryViewModel(self, didSelectRoomWithIdOrAlias: viewData.roomId)
case .publicRoomsDirectory:
guard let publicRoom = self.publicRoom(at: indexPath.row) else { return }
self.coordinatorDelegate?.showDirectoryViewModelDidSelect(self, room: publicRoom)
}
case .joinRoom(let indexPath):
@ -87,9 +87,9 @@ final class ShowDirectoryViewModel: NSObject, ShowDirectoryViewModelType {
switch directorySection {
case .searchInput(let searchInputViewData):
roomIdOrAlias = searchInputViewData.title
roomIdOrAlias = searchInputViewData.roomId
case .publicRoomsDirectory:
let publicRoom = dataSource.room(at: IndexPath(row: indexPath.row, section: 0))
let publicRoom = self.publicRoom(at: indexPath.row)
roomIdOrAlias = publicRoom?.roomId
}
@ -152,7 +152,7 @@ final class ShowDirectoryViewModel: NSObject, ShowDirectoryViewModelType {
private func resetSections() {
self.sections = [self.publicRoomsDirectorySection]
}
}
private func switchServer() {
self.coordinatorDelegate?.showDirectoryViewModelWantsToShowDirectoryServerPicker(self)
@ -170,6 +170,10 @@ final class ShowDirectoryViewModel: NSObject, ShowDirectoryViewModelType {
}
}
private func publicRoom(at row: Int) -> MXPublicRoom? {
return dataSource.room(at: IndexPath(row: row, section: 0))
}
private func search(with pattern: String?) {
self.dataSource.searchPattern = pattern
@ -219,14 +223,14 @@ final class ShowDirectoryViewModel: NSObject, ShowDirectoryViewModelType {
let topic = MXTools.stripNewlineCharacters(room.summary.topic)
let isJoined = room.summary.membership == .join
let avatarStringUrl = room.summary.avatar
let mediaManager = self.session.mediaManager
let mediaManager: MXMediaManager = self.session.mediaManager
return DirectoryRoomTableViewCellVM(title: displayName, numberOfUsers: joinedMembersCount, subtitle: topic, isJoined: isJoined, roomId: room.roomId, avatarUrl: avatarStringUrl, mediaManager: mediaManager)
}
private func roomCellViewModel(with roomIdOrAlias: String) -> DirectoryRoomTableViewCellVM {
let displayName = roomIdOrAlias
let mediaManager = self.session.mediaManager
let mediaManager: MXMediaManager = self.session.mediaManager
return DirectoryRoomTableViewCellVM(title: displayName, numberOfUsers: 0, subtitle: nil, isJoined: false, roomId: roomIdOrAlias, avatarUrl: nil, mediaManager: mediaManager)
}

View file

@ -24,6 +24,7 @@ protocol ShowDirectoryViewModelViewDelegate: class {
protocol ShowDirectoryViewModelCoordinatorDelegate: class {
func showDirectoryViewModelDidSelect(_ viewModel: ShowDirectoryViewModelType, room: MXPublicRoom)
func showDirectoryViewModel(_ viewModel: ShowDirectoryViewModelType, didSelectRoomWithIdOrAlias roomIdOrAlias: String)
func showDirectoryViewModelDidTapCreateNewRoom(_ viewModel: ShowDirectoryViewModelType)
func showDirectoryViewModelDidCancel(_ viewModel: ShowDirectoryViewModelType)
func showDirectoryViewModelWantsToShowDirectoryServerPicker(_ viewModel: ShowDirectoryViewModelType)