mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-26 19:34:25 +02:00
#1098 - Working real user suggestion inside the main application.
This commit is contained in:
+31
-4
@@ -20,6 +20,13 @@ import Foundation
|
||||
import UIKit
|
||||
import SwiftUI
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
protocol UserSuggestionCoordinatorDelegate: AnyObject {
|
||||
func userSuggestionCoordinator(_ coordinator: UserSuggestionCoordinator,
|
||||
didRequestMentionForMember member: MXRoomMember,
|
||||
textTrigger: String?)
|
||||
}
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
final class UserSuggestionCoordinator: Coordinator {
|
||||
|
||||
@@ -30,7 +37,7 @@ final class UserSuggestionCoordinator: Coordinator {
|
||||
private let parameters: UserSuggestionCoordinatorParameters
|
||||
private let userSuggestionHostingController: UIViewController
|
||||
|
||||
private var userSuggestionService: UserSuggestionServiceProtocol
|
||||
private var userSuggestionService: UserSuggestionService
|
||||
private var userSuggestionViewModel: UserSuggestionViewModelProtocol
|
||||
|
||||
// MARK: Public
|
||||
@@ -39,6 +46,8 @@ final class UserSuggestionCoordinator: Coordinator {
|
||||
var childCoordinators: [Coordinator] = []
|
||||
var completion: (() -> Void)?
|
||||
|
||||
weak var delegate: UserSuggestionCoordinatorDelegate?
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
@@ -47,15 +56,33 @@ final class UserSuggestionCoordinator: Coordinator {
|
||||
|
||||
userSuggestionService = UserSuggestionService(room: parameters.room)
|
||||
userSuggestionViewModel = UserSuggestionViewModel.makeUserSuggestionViewModel(userSuggestionService: userSuggestionService)
|
||||
|
||||
|
||||
let view = UserSuggestionList(viewModel: userSuggestionViewModel.context)
|
||||
.addDependency(AvatarService.instantiate(mediaManager: parameters.mediaManager))
|
||||
|
||||
userSuggestionHostingController = UIHostingController(rootView: view)
|
||||
|
||||
userSuggestionViewModel.completion = { [weak self] result in
|
||||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
switch result {
|
||||
case .selectedItemWithIdentifier(let identifier):
|
||||
guard let member = self.userSuggestionService.roomMemberForIdentifier(identifier) else {
|
||||
return
|
||||
}
|
||||
|
||||
self.delegate?.userSuggestionCoordinator(self,
|
||||
didRequestMentionForMember: member,
|
||||
textTrigger: self.userSuggestionService.currentTextTrigger)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func processPartialUserName(_ userName: String) {
|
||||
userSuggestionService.processPartialUserName(userName)
|
||||
func processTextMessage(_ textMessage: String) {
|
||||
userSuggestionService.processTextMessage(textMessage)
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
+30
-3
@@ -16,6 +16,13 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
@objc
|
||||
protocol UserSuggestionCoordinatorBridgeDelegate: AnyObject {
|
||||
func userSuggestionCoordinatorBridge(_ coordinator: UserSuggestionCoordinatorBridge,
|
||||
didRequestMentionForMember member: MXRoomMember,
|
||||
textTrigger: String?)
|
||||
}
|
||||
|
||||
@objcMembers
|
||||
final class UserSuggestionCoordinatorBridge: NSObject {
|
||||
|
||||
@@ -25,16 +32,25 @@ final class UserSuggestionCoordinatorBridge: NSObject {
|
||||
return _userSuggestionCoordinator as! UserSuggestionCoordinator
|
||||
}
|
||||
|
||||
weak var delegate: UserSuggestionCoordinatorBridgeDelegate?
|
||||
|
||||
init(mediaManager: MXMediaManager, room: MXRoom) {
|
||||
let parameters = UserSuggestionCoordinatorParameters(mediaManager: mediaManager, room: room)
|
||||
if #available(iOS 14.0, *) {
|
||||
self._userSuggestionCoordinator = UserSuggestionCoordinator(parameters: parameters)
|
||||
let userSuggestionCoordinator = UserSuggestionCoordinator(parameters: parameters)
|
||||
self._userSuggestionCoordinator = userSuggestionCoordinator
|
||||
}
|
||||
|
||||
super.init()
|
||||
|
||||
if #available(iOS 14.0, *) {
|
||||
userSuggestionCoordinator.delegate = self
|
||||
}
|
||||
}
|
||||
|
||||
func processPartialUserName(_ userName: String) {
|
||||
func processTextMessage(_ textMessage: String) {
|
||||
if #available(iOS 14.0, *) {
|
||||
return self.userSuggestionCoordinator.processPartialUserName(userName)
|
||||
return self.userSuggestionCoordinator.processTextMessage(textMessage)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,3 +62,14 @@ final class UserSuggestionCoordinatorBridge: NSObject {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
extension UserSuggestionCoordinatorBridge: UserSuggestionCoordinatorDelegate {
|
||||
func userSuggestionCoordinator(_ coordinator: UserSuggestionCoordinator,
|
||||
didRequestMentionForMember member: MXRoomMember,
|
||||
textTrigger: String?) {
|
||||
delegate?.userSuggestionCoordinatorBridge(self,
|
||||
didRequestMentionForMember: member,
|
||||
textTrigger: textTrigger)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user