Add UserIndicator.disableInteractiveDismiss (#993)

This commit is contained in:
Alfonso Grillo
2023-05-31 12:56:58 +02:00
committed by GitHub
parent 30c39130fc
commit 87075eecfd
4 changed files with 25 additions and 5 deletions
@@ -17,9 +17,13 @@
import Combine import Combine
import Foundation import Foundation
enum UserIndicatorType { enum UserIndicatorType: Equatable {
case toast case toast
case modal case modal(interactiveDismissDisabled: Bool)
static var modal: Self {
.modal(interactiveDismissDisabled: false)
}
} }
struct UserIndicator: Equatable, Identifiable { struct UserIndicator: Equatable, Identifiable {
@@ -51,4 +55,13 @@ struct UserIndicator: Equatable, Identifiable {
return progress.publisher.eraseToAnyPublisher() return progress.publisher.eraseToAnyPublisher()
} }
} }
var interactiveDismissDisabled: Bool {
switch type {
case .toast:
return false
case .modal(let interactiveDismissDisabled):
return interactiveDismissDisabled
}
}
} }
@@ -54,6 +54,7 @@ struct UserIndicatorModalView: View {
.frame(maxWidth: .infinity, maxHeight: .infinity) .frame(maxWidth: .infinity, maxHeight: .infinity)
.background(.black.opacity(0.1)) .background(.black.opacity(0.1))
.ignoresSafeArea() .ignoresSafeArea()
.interactiveDismissDisabled(indicator.interactiveDismissDisabled)
} }
} }
@@ -168,7 +168,7 @@ class CreateRoomViewModel: CreateRoomViewModelType, CreateRoomViewModelProtocol
private func showLoadingIndicator() { private func showLoadingIndicator() {
userIndicatorController?.submitIndicator(UserIndicator(id: Self.loadingIndicatorIdentifier, userIndicatorController?.submitIndicator(UserIndicator(id: Self.loadingIndicatorIdentifier,
type: .modal, type: .modal(interactiveDismissDisabled: true),
title: L10n.commonLoading, title: L10n.commonLoading,
persistent: true)) persistent: true))
} }
@@ -80,7 +80,10 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe
defer { defer {
userIndicatorController.retractIndicatorWithId(userIndicatorID) userIndicatorController.retractIndicatorWithId(userIndicatorID)
} }
userIndicatorController.submitIndicator(UserIndicator(id: userIndicatorID, type: .modal, title: L10n.commonLoading, persistent: true)) userIndicatorController.submitIndicator(UserIndicator(id: userIndicatorID,
type: .modal(interactiveDismissDisabled: true),
title: L10n.commonLoading,
persistent: true))
let mediaResult = await mediaPreprocessor.processMedia(at: url) let mediaResult = await mediaPreprocessor.processMedia(at: url)
@@ -101,7 +104,10 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe
defer { defer {
userIndicatorController.retractIndicatorWithId(userIndicatorID) userIndicatorController.retractIndicatorWithId(userIndicatorID)
} }
userIndicatorController.submitIndicator(UserIndicator(id: userIndicatorID, type: .modal, title: L10n.screenRoomDetailsUpdatingRoom, persistent: true)) userIndicatorController.submitIndicator(UserIndicator(id: userIndicatorID,
type: .modal(interactiveDismissDisabled: true),
title: L10n.screenRoomDetailsUpdatingRoom,
persistent: true))
do { do {
try await withThrowingTaskGroup(of: Void.self) { group in try await withThrowingTaskGroup(of: Void.self) { group in