mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
ShowDirectoryViewModel: Handle tap on search input cell.
This commit is contained in:
parent
aa77daf975
commit
cb432f05fa
9 changed files with 52 additions and 26 deletions
|
@ -2173,4 +2173,9 @@
|
|||
self.roomsDirectoryCoordinatorBridgePresenter = nil;
|
||||
}
|
||||
|
||||
- (void)roomsDirectoryCoordinatorBridgePresenterDelegate:(RoomsDirectoryCoordinatorBridgePresenter *)coordinatorBridgePresenter didSelectRoomWithIdOrAlias:(NSString * _Nonnull)roomIdOrAlias
|
||||
{
|
||||
// TODO: Implement
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue