mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-26 19:34:25 +02:00
Merge pull request #5690 from vector-im/andy/5603_room_indicators
Room activity indicators
This commit is contained in:
@@ -297,19 +297,7 @@ fileprivate class AppNavigator: AppNavigatorProtocol {
|
||||
|
||||
return SideMenuPresenter(sideMenuCoordinator: sideMenuCoordinator)
|
||||
}()
|
||||
|
||||
private var appNavigationVC: UINavigationController {
|
||||
guard
|
||||
let splitVC = appCoordinator.splitViewCoordinator?.toPresentable() as? UISplitViewController,
|
||||
// Picking out the first view controller currently works only on iPhones, not iPads
|
||||
let navigationVC = splitVC.viewControllers.first as? UINavigationController
|
||||
else {
|
||||
MXLog.error("[AppNavigator] Missing root split view controller")
|
||||
return UINavigationController()
|
||||
}
|
||||
return navigationVC
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
init(appCoordinator: AppCoordinator) {
|
||||
@@ -321,41 +309,4 @@ fileprivate class AppNavigator: AppNavigatorProtocol {
|
||||
func navigate(to destination: AppNavigatorDestination) {
|
||||
self.appCoordinator.navigate(to: destination)
|
||||
}
|
||||
|
||||
func addUserIndicator(_ type: AppUserIndicatorType) -> UserIndicator {
|
||||
let request = userIndicatorRequest(for: type)
|
||||
return UserIndicatorQueue.shared.add(request)
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func userIndicatorRequest(for type: AppUserIndicatorType) -> UserIndicatorRequest {
|
||||
switch type {
|
||||
case let .loading(label):
|
||||
let presenter = ToastUserIndicatorPresenter(
|
||||
viewState: .init(
|
||||
style: .loading,
|
||||
label: label
|
||||
),
|
||||
navigationController: appNavigationVC
|
||||
)
|
||||
return UserIndicatorRequest(
|
||||
presenter: presenter,
|
||||
dismissal: .manual
|
||||
)
|
||||
case let .success(label):
|
||||
let presenter = ToastUserIndicatorPresenter(
|
||||
viewState: .init(
|
||||
style: .success,
|
||||
label: label
|
||||
),
|
||||
navigationController: appNavigationVC
|
||||
)
|
||||
return UserIndicatorRequest(
|
||||
presenter: presenter,
|
||||
dismissal: .timeout(1.5)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,15 +17,6 @@
|
||||
import Foundation
|
||||
import CommonKit
|
||||
|
||||
/// Type of indicator to be shown in the app navigator
|
||||
enum AppUserIndicatorType {
|
||||
/// Loading toast with custom label
|
||||
case loading(String)
|
||||
|
||||
/// Success toast with custom label
|
||||
case success(String)
|
||||
}
|
||||
|
||||
/// AppNavigatorProtocol abstract a navigator at app level.
|
||||
/// It enables to perform the navigation within the global app scope (open the side menu, open a room and so on)
|
||||
/// Note: Presentation of the pattern here https://www.swiftbysundell.com/articles/navigation-in-swift/#where-to-navigator
|
||||
@@ -36,12 +27,4 @@ protocol AppNavigatorProtocol {
|
||||
/// Navigate to a destination screen or a state
|
||||
/// Do not use protocol with associatedtype for the moment like presented here https://www.swiftbysundell.com/articles/navigation-in-swift/#where-to-navigator use a separate enum
|
||||
func navigate(to destination: AppNavigatorDestination)
|
||||
|
||||
/// Add new indicator, such as loading spinner or a success message, to an app-wide queue of other indicators
|
||||
///
|
||||
/// If the queue is empty, the indicator will be displayed immediately, otherwise it will be pending
|
||||
/// until the previously added indicator have completed / been cancelled.
|
||||
///
|
||||
/// To remove an indicator, cancel or deallocate the returned `UserIndicator`
|
||||
func addUserIndicator(_ type: AppUserIndicatorType) -> UserIndicator
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user