Added error toasts on the login screen.

This commit is contained in:
Stefan Ceriu 2022-02-22 13:53:34 +02:00
parent c35438cbb8
commit d634995a20
4 changed files with 26 additions and 7 deletions

View File

@ -20,6 +20,7 @@ class AppCoordinator: AuthenticationCoordinatorDelegate, Coordinator {
private let authenticationCoordinator: AuthenticationCoordinator!
private var loadingActivity: Activity?
private var errorActivity: Activity?
var childCoordinators: [Coordinator] = []
@ -55,6 +56,7 @@ class AppCoordinator: AuthenticationCoordinatorDelegate, Coordinator {
func authenticationCoordinator(_ authenticationCoordinator: AuthenticationCoordinator, didFailWithError error: AuthenticationCoordinatorError) {
hideLoadingIndicator()
showLoginErrorToast()
}
func authenticationCoordinatorDidSetupUserSession(_ authenticationCoordinator: AuthenticationCoordinator) {
@ -91,7 +93,8 @@ class AppCoordinator: AuthenticationCoordinatorDelegate, Coordinator {
}
private func showLoadingIndicator() {
let presenter = FullscreenLoadingActivityPresenter(label: "Loading", on: self.mainNavigationController)
let presenter = FullscreenLoadingActivityPresenter(label: "Loading",
on: mainNavigationController)
let request = ActivityRequest(
presenter: presenter,
@ -104,4 +107,16 @@ class AppCoordinator: AuthenticationCoordinatorDelegate, Coordinator {
private func hideLoadingIndicator() {
loadingActivity = nil
}
private func showLoginErrorToast() {
let presenter = ToastActivityPresenter(viewState: .init(style: .success, label: "Failed logging in"),
navigationController: mainNavigationController)
let request = ActivityRequest(
presenter: presenter,
dismissal: .timeout(3.0)
)
errorActivity = ActivityCenter.shared.add(request)
}
}

View File

@ -97,12 +97,11 @@ class AuthenticationCoordinator: Coordinator {
switch result {
case .success:
completion(.success(()))
self.remove(childCoordinator: coordinator)
self.navigationRouter.dismissModule()
case .failure(let error):
completion(.failure(error))
}
self.remove(childCoordinator: coordinator)
self.navigationRouter.dismissModule()
}
}
}

View File

@ -28,9 +28,10 @@ class ToastActivityPresenter: ActivityPresentable {
self.viewState = viewState
self.navigationController = navigationController
}
func present() {
guard let navigationController = navigationController else {
guard let navigationController = navigationController,
let window = navigationController.view.window else {
return
}
@ -38,7 +39,7 @@ class ToastActivityPresenter: ActivityPresentable {
self.view = view
view.translatesAutoresizingMaskIntoConstraints = false
navigationController.view.addSubview(view)
window.addSubview(view)
NSLayoutConstraint.activate([
view.centerXAnchor.constraint(equalTo: navigationController.navigationBar.centerXAnchor),
view.topAnchor.constraint(equalTo: navigationController.navigationBar.bottomAnchor)

View File

@ -48,6 +48,7 @@ class RoundedToastView: UIView {
private let stackView: UIStackView = {
let stack = UIStackView()
stack.axis = .horizontal
stack.alignment = .center
stack.spacing = 5
return stack
}()
@ -66,6 +67,9 @@ class RoundedToastView: UIView {
}
private func setup(viewState: ViewState) {
backgroundColor = .gray.withAlphaComponent(0.75)
setupLayer()
setupStackView()
stackView.addArrangedSubview(toastView(for: viewState.style))