Merge pull request #5690 from vector-im/andy/5603_room_indicators

Room activity indicators
This commit is contained in:
Anderas
2022-03-01 13:08:29 +00:00
committed by GitHub
28 changed files with 458 additions and 329 deletions
+1 -50
View File
@@ -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
}