mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-11 13:59:13 +00:00
Rename screens (#826)
* Rename: AnalyticsPrompt -> AnalyticsPromptScreen * Rename: AnalyticsSettings -> AnalyticsSettingsScreen * Rename: Settings -> SettingsScreen * Rename: SessionVerification -> SessionVerificationScreen * Rename: BugReport -> BugReportScreen * Rename: FilePreview -> FilePreviewScreen * Rename: AnalyticsPrompt -> AnalyticsPromptScreen * Rename: Invites -> InvitesScreen * Rename: InviteUsers -> InviteUsersScreen * Rename: MediaPicker -> MediaPickerScreen * Delete unused UIActivityViewControllerWrapper * Rename: ReportContent -> ReportContentScreen * Rename: RoomDetails -> RoomDetailsScreen * Rename: RoomMemberDetails -> RoomMemberDetailsScreen * Rename: RoomMemberList -> RoomMemberListScreen * Rename: Cleanup * Renaming missed items * Low effort attempt at fixing the flakey unit tests
This commit is contained in:
parent
9911ad2b9b
commit
24572c6582
@ -16,13 +16,13 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
final class AnalyticsPromptCoordinator: CoordinatorProtocol {
|
||||
private var viewModel: AnalyticsPromptViewModel
|
||||
final class AnalyticsPromptScreenCoordinator: CoordinatorProtocol {
|
||||
private var viewModel: AnalyticsPromptScreenViewModel
|
||||
|
||||
var callback: (@MainActor () -> Void)?
|
||||
|
||||
init() {
|
||||
viewModel = AnalyticsPromptViewModel()
|
||||
viewModel = AnalyticsPromptScreenViewModel()
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
@ -45,6 +45,6 @@ final class AnalyticsPromptCoordinator: CoordinatorProtocol {
|
||||
}
|
||||
|
||||
func toPresentable() -> AnyView {
|
||||
AnyView(AnalyticsPrompt(context: viewModel.context))
|
||||
AnyView(AnalyticsPromptScreen(context: viewModel.context))
|
||||
}
|
||||
}
|
@ -16,27 +16,27 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum AnalyticsPromptViewAction {
|
||||
enum AnalyticsPromptScreenViewAction {
|
||||
/// Enable analytics.
|
||||
case enable
|
||||
/// Disable analytics.
|
||||
case disable
|
||||
}
|
||||
|
||||
enum AnalyticsPromptViewModelAction {
|
||||
enum AnalyticsPromptScreenViewModelAction {
|
||||
/// Enable analytics.
|
||||
case enable
|
||||
/// Disable analytics.
|
||||
case disable
|
||||
}
|
||||
|
||||
struct AnalyticsPromptViewState: BindableState {
|
||||
struct AnalyticsPromptScreenViewState: BindableState {
|
||||
/// Attributed strings created from localized HTML.
|
||||
let strings: AnalyticsPromptStrings
|
||||
let strings: AnalyticsPromptScreenStrings
|
||||
}
|
||||
|
||||
/// A collection of strings for the UI that need to be parsed from HTML
|
||||
struct AnalyticsPromptStrings {
|
||||
struct AnalyticsPromptScreenStrings {
|
||||
let optInContent: AttributedString
|
||||
let point1 = AttributedStringBuilder().fromHTML(L10n.screenAnalyticsPromptDataUsage) ?? AttributedString(L10n.screenAnalyticsPromptDataUsage)
|
||||
let point2 = AttributedStringBuilder().fromHTML(L10n.screenAnalyticsPromptThirdPartySharing) ?? AttributedString(L10n.screenAnalyticsPromptThirdPartySharing)
|
@ -17,20 +17,20 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
typealias AnalyticsPromptViewModelType = StateStoreViewModel<AnalyticsPromptViewState, AnalyticsPromptViewAction>
|
||||
typealias AnalyticsPromptScreenViewModelType = StateStoreViewModel<AnalyticsPromptScreenViewState, AnalyticsPromptScreenViewAction>
|
||||
|
||||
class AnalyticsPromptViewModel: AnalyticsPromptViewModelType, AnalyticsPromptViewModelProtocol {
|
||||
var callback: (@MainActor (AnalyticsPromptViewModelAction) -> Void)?
|
||||
class AnalyticsPromptScreenViewModel: AnalyticsPromptScreenViewModelType, AnalyticsPromptScreenViewModelProtocol {
|
||||
var callback: (@MainActor (AnalyticsPromptScreenViewModelAction) -> Void)?
|
||||
|
||||
/// Initialize a view model with the specified prompt type and app display name.
|
||||
init() {
|
||||
let promptStrings = AnalyticsPromptStrings(termsURL: ServiceLocator.shared.settings.analyticsConfiguration.termsURL)
|
||||
super.init(initialViewState: AnalyticsPromptViewState(strings: promptStrings))
|
||||
let promptStrings = AnalyticsPromptScreenStrings(termsURL: ServiceLocator.shared.settings.analyticsConfiguration.termsURL)
|
||||
super.init(initialViewState: AnalyticsPromptScreenViewState(strings: promptStrings))
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: AnalyticsPromptViewAction) {
|
||||
override func process(viewAction: AnalyticsPromptScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .enable:
|
||||
callback?(.enable)
|
@ -17,7 +17,7 @@
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
protocol AnalyticsPromptViewModelProtocol {
|
||||
var callback: (@MainActor (AnalyticsPromptViewModelAction) -> Void)? { get set }
|
||||
var context: AnalyticsPromptViewModelType.Context { get }
|
||||
protocol AnalyticsPromptScreenViewModelProtocol {
|
||||
var callback: (@MainActor (AnalyticsPromptScreenViewModelAction) -> Void)? { get set }
|
||||
var context: AnalyticsPromptScreenViewModelType.Context { get }
|
||||
}
|
@ -17,10 +17,10 @@
|
||||
import SwiftUI
|
||||
|
||||
/// A prompt that asks the user whether they would like to enable Analytics or not.
|
||||
struct AnalyticsPrompt: View {
|
||||
struct AnalyticsPromptScreen: View {
|
||||
private let horizontalPadding: CGFloat = 16
|
||||
|
||||
@ObservedObject var context: AnalyticsPromptViewModel.Context
|
||||
@ObservedObject var context: AnalyticsPromptScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
GeometryReader { geometry in
|
||||
@ -83,9 +83,9 @@ struct AnalyticsPrompt: View {
|
||||
/// The list of re-assurances about analytics.
|
||||
private var checkmarkList: some View {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
AnalyticsPromptCheckmarkItem(attributedString: context.viewState.strings.point1)
|
||||
AnalyticsPromptCheckmarkItem(attributedString: context.viewState.strings.point2)
|
||||
AnalyticsPromptCheckmarkItem(string: context.viewState.strings.point3)
|
||||
AnalyticsPromptScreenCheckmarkItem(attributedString: context.viewState.strings.point1)
|
||||
AnalyticsPromptScreenCheckmarkItem(attributedString: context.viewState.strings.point2)
|
||||
AnalyticsPromptScreenCheckmarkItem(string: context.viewState.strings.point3)
|
||||
}
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.font(.element.body)
|
||||
@ -115,9 +115,9 @@ struct AnalyticsPrompt: View {
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
struct AnalyticsPrompt_Previews: PreviewProvider {
|
||||
static let viewModel = AnalyticsPromptViewModel()
|
||||
struct AnalyticsPromptScreen_Previews: PreviewProvider {
|
||||
static let viewModel = AnalyticsPromptScreenViewModel()
|
||||
static var previews: some View {
|
||||
AnalyticsPrompt(context: viewModel.context)
|
||||
AnalyticsPromptScreen(context: viewModel.context)
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct AnalyticsPromptCheckmarkItem: View {
|
||||
struct AnalyticsPromptScreenCheckmarkItem: View {
|
||||
private let attributedString: AttributedString
|
||||
|
||||
init(attributedString: AttributedString) {
|
||||
@ -37,15 +37,15 @@ struct AnalyticsPromptCheckmarkItem: View {
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
struct AnalyticsPromptCheckmarkItem_Previews: PreviewProvider {
|
||||
static let strings = AnalyticsPromptStrings(termsURL: ServiceLocator.shared.settings.analyticsConfiguration.termsURL)
|
||||
struct AnalyticsPromptScreenCheckmarkItem_Previews: PreviewProvider {
|
||||
static let strings = AnalyticsPromptScreenStrings(termsURL: ServiceLocator.shared.settings.analyticsConfiguration.termsURL)
|
||||
|
||||
static var previews: some View {
|
||||
VStack(alignment: .leading) {
|
||||
AnalyticsPromptCheckmarkItem(attributedString: strings.point1)
|
||||
AnalyticsPromptCheckmarkItem(attributedString: strings.point2)
|
||||
AnalyticsPromptCheckmarkItem(attributedString: AttributedString("This is a short string."))
|
||||
AnalyticsPromptCheckmarkItem(attributedString: AttributedString("This is a very long string that will be used to test the layout over multiple lines of text to ensure everything is correct."))
|
||||
AnalyticsPromptScreenCheckmarkItem(attributedString: strings.point1)
|
||||
AnalyticsPromptScreenCheckmarkItem(attributedString: strings.point2)
|
||||
AnalyticsPromptScreenCheckmarkItem(attributedString: AttributedString("This is a short string."))
|
||||
AnalyticsPromptScreenCheckmarkItem(attributedString: AttributedString("This is a very long string that will be used to test the layout over multiple lines of text to ensure everything is correct."))
|
||||
}
|
||||
.padding()
|
||||
}
|
@ -120,7 +120,7 @@ class AuthenticationCoordinator: CoordinatorProtocol {
|
||||
completion()
|
||||
return
|
||||
}
|
||||
let coordinator = AnalyticsPromptCoordinator()
|
||||
let coordinator = AnalyticsPromptScreenCoordinator()
|
||||
coordinator.callback = {
|
||||
completion()
|
||||
}
|
||||
|
@ -17,12 +17,12 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
enum BugReportCoordinatorResult {
|
||||
enum BugReportScreenCoordinatorResult {
|
||||
case cancel
|
||||
case finish
|
||||
}
|
||||
|
||||
struct BugReportCoordinatorParameters {
|
||||
struct BugReportScreenCoordinatorParameters {
|
||||
let bugReportService: BugReportServiceProtocol
|
||||
let userID: String
|
||||
let deviceID: String?
|
||||
@ -32,17 +32,17 @@ struct BugReportCoordinatorParameters {
|
||||
let isModallyPresented: Bool
|
||||
}
|
||||
|
||||
final class BugReportCoordinator: CoordinatorProtocol {
|
||||
private let parameters: BugReportCoordinatorParameters
|
||||
private var viewModel: BugReportViewModelProtocol
|
||||
final class BugReportScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: BugReportScreenCoordinatorParameters
|
||||
private var viewModel: BugReportScreenViewModelProtocol
|
||||
private var cancellables: Set<AnyCancellable> = .init()
|
||||
|
||||
var completion: ((BugReportCoordinatorResult) -> Void)?
|
||||
var completion: ((BugReportScreenCoordinatorResult) -> Void)?
|
||||
|
||||
init(parameters: BugReportCoordinatorParameters) {
|
||||
init(parameters: BugReportScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = BugReportViewModel(bugReportService: parameters.bugReportService,
|
||||
viewModel = BugReportScreenViewModel(bugReportService: parameters.bugReportService,
|
||||
userID: parameters.userID,
|
||||
deviceID: parameters.deviceID,
|
||||
screenshot: parameters.screenshot,
|
@ -17,25 +17,25 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
enum BugReportViewModelAction {
|
||||
enum BugReportScreenViewModelAction {
|
||||
case cancel
|
||||
case submitStarted(progressTracker: ProgressTracker)
|
||||
case submitFinished
|
||||
case submitFailed(error: Error)
|
||||
}
|
||||
|
||||
struct BugReportViewState: BindableState {
|
||||
struct BugReportScreenViewState: BindableState {
|
||||
var screenshot: UIImage?
|
||||
var bindings: BugReportViewStateBindings
|
||||
var bindings: BugReportScreenViewStateBindings
|
||||
let isModallyPresented: Bool
|
||||
}
|
||||
|
||||
struct BugReportViewStateBindings {
|
||||
struct BugReportScreenViewStateBindings {
|
||||
var reportText: String
|
||||
var sendingLogsEnabled: Bool
|
||||
}
|
||||
|
||||
enum BugReportViewAction {
|
||||
enum BugReportScreenViewAction {
|
||||
case cancel
|
||||
case submit
|
||||
case removeScreenshot
|
@ -17,15 +17,15 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
typealias BugReportViewModelType = StateStoreViewModel<BugReportViewState, BugReportViewAction>
|
||||
typealias BugReportScreenViewModelType = StateStoreViewModel<BugReportScreenViewState, BugReportScreenViewAction>
|
||||
|
||||
class BugReportViewModel: BugReportViewModelType, BugReportViewModelProtocol {
|
||||
class BugReportScreenViewModel: BugReportScreenViewModelType, BugReportScreenViewModelProtocol {
|
||||
private let bugReportService: BugReportServiceProtocol
|
||||
private let userID: String
|
||||
private let deviceID: String?
|
||||
private let actionsSubject: PassthroughSubject<BugReportViewModelAction, Never> = .init()
|
||||
private let actionsSubject: PassthroughSubject<BugReportScreenViewModelAction, Never> = .init()
|
||||
|
||||
var actions: AnyPublisher<BugReportViewModelAction, Never> {
|
||||
var actions: AnyPublisher<BugReportScreenViewModelAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
@ -38,15 +38,15 @@ class BugReportViewModel: BugReportViewModelType, BugReportViewModelProtocol {
|
||||
self.userID = userID
|
||||
self.deviceID = deviceID
|
||||
|
||||
let bindings = BugReportViewStateBindings(reportText: "", sendingLogsEnabled: true)
|
||||
super.init(initialViewState: BugReportViewState(screenshot: screenshot,
|
||||
let bindings = BugReportScreenViewStateBindings(reportText: "", sendingLogsEnabled: true)
|
||||
super.init(initialViewState: BugReportScreenViewState(screenshot: screenshot,
|
||||
bindings: bindings,
|
||||
isModallyPresented: isModallyPresented))
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: BugReportViewAction) {
|
||||
override func process(viewAction: BugReportScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .cancel:
|
||||
actionsSubject.send(.cancel)
|
@ -17,7 +17,7 @@
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
protocol InvitesViewModelProtocol {
|
||||
var actions: AnyPublisher<InvitesViewModelAction, Never> { get }
|
||||
var context: InvitesViewModelType.Context { get }
|
||||
protocol BugReportScreenViewModelProtocol {
|
||||
var actions: AnyPublisher<BugReportScreenViewModelAction, Never> { get }
|
||||
var context: BugReportScreenViewModelType.Context { get }
|
||||
}
|
@ -21,7 +21,7 @@ import SwiftUI
|
||||
struct BugReportScreen: View {
|
||||
@State private var selectedScreenshot: PhotosPickerItem?
|
||||
|
||||
@ObservedObject var context: BugReportViewModel.Context
|
||||
@ObservedObject var context: BugReportScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
@ -131,7 +131,7 @@ struct BugReportScreen: View {
|
||||
// MARK: - Previews
|
||||
|
||||
struct BugReport_Previews: PreviewProvider {
|
||||
static let viewModel = BugReportViewModel(bugReportService: BugReportServiceMock(),
|
||||
static let viewModel = BugReportScreenViewModel(bugReportService: BugReportServiceMock(),
|
||||
userID: "@mock.client.com",
|
||||
deviceID: nil,
|
||||
screenshot: nil,
|
||||
@ -139,7 +139,7 @@ struct BugReport_Previews: PreviewProvider {
|
||||
|
||||
static var previews: some View {
|
||||
NavigationStack {
|
||||
BugReportScreen(context: BugReportViewModel(bugReportService: BugReportServiceMock(),
|
||||
BugReportScreen(context: BugReportScreenViewModel(bugReportService: BugReportServiceMock(),
|
||||
userID: "@mock.client.com",
|
||||
deviceID: nil,
|
||||
screenshot: nil,
|
||||
@ -148,7 +148,7 @@ struct BugReport_Previews: PreviewProvider {
|
||||
}
|
||||
|
||||
NavigationStack {
|
||||
BugReportScreen(context: BugReportViewModel(bugReportService: BugReportServiceMock(),
|
||||
BugReportScreen(context: BugReportScreenViewModel(bugReportService: BugReportServiceMock(),
|
||||
userID: "@mock.client.com",
|
||||
deviceID: nil,
|
||||
screenshot: Asset.Images.appLogo.image,
|
@ -25,7 +25,7 @@ struct EmojiPickerScreen: View {
|
||||
ScrollView {
|
||||
LazyVGrid(columns: [GridItem(.adaptive(minimum: minimumWidth))], spacing: 16) {
|
||||
ForEach(context.viewState.categories) { category in
|
||||
Section(header: EmojiPickerHeaderView(title: category.name)
|
||||
Section(header: EmojiPickerScreenHeaderView(title: category.name)
|
||||
.padding(.horizontal, 13)
|
||||
.padding(.top, 10)) {
|
||||
ForEach(category.emojis) { emoji in
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct EmojiPickerHeaderView: View {
|
||||
struct EmojiPickerScreenHeaderView: View {
|
||||
let title: String
|
||||
|
||||
var body: some View {
|
||||
@ -29,10 +29,10 @@ struct EmojiPickerHeaderView: View {
|
||||
}
|
||||
}
|
||||
|
||||
struct EmojiPickerHeaderView_Previews: PreviewProvider {
|
||||
struct EmojiPickerScreenHeaderView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group {
|
||||
EmojiPickerHeaderView(title: "")
|
||||
EmojiPickerScreenHeaderView(title: "")
|
||||
}
|
||||
}
|
||||
}
|
@ -16,25 +16,25 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct FilePreviewCoordinatorParameters {
|
||||
struct FilePreviewScreenCoordinatorParameters {
|
||||
let mediaFile: MediaFileHandleProxy
|
||||
let title: String?
|
||||
}
|
||||
|
||||
enum FilePreviewCoordinatorAction {
|
||||
enum FilePreviewScreenCoordinatorAction {
|
||||
case cancel
|
||||
}
|
||||
|
||||
final class FilePreviewCoordinator: CoordinatorProtocol {
|
||||
private let parameters: FilePreviewCoordinatorParameters
|
||||
private var viewModel: FilePreviewViewModelProtocol
|
||||
final class FilePreviewScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: FilePreviewScreenCoordinatorParameters
|
||||
private var viewModel: FilePreviewScreenViewModelProtocol
|
||||
|
||||
var callback: ((FilePreviewCoordinatorAction) -> Void)?
|
||||
var callback: ((FilePreviewScreenCoordinatorAction) -> Void)?
|
||||
|
||||
init(parameters: FilePreviewCoordinatorParameters) {
|
||||
init(parameters: FilePreviewScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = FilePreviewViewModel(mediaFile: parameters.mediaFile, title: parameters.title)
|
||||
viewModel = FilePreviewScreenViewModel(mediaFile: parameters.mediaFile, title: parameters.title)
|
||||
}
|
||||
|
||||
// MARK: - Public
|
@ -16,15 +16,15 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum FilePreviewViewModelAction {
|
||||
enum FilePreviewScreenViewModelAction {
|
||||
case cancel
|
||||
}
|
||||
|
||||
struct FilePreviewViewState: BindableState {
|
||||
struct FilePreviewScreenViewState: BindableState {
|
||||
let mediaFile: MediaFileHandleProxy
|
||||
let title: String?
|
||||
}
|
||||
|
||||
enum FilePreviewViewAction {
|
||||
enum FilePreviewScreenViewAction {
|
||||
case cancel
|
||||
}
|
@ -16,16 +16,16 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
typealias FilePreviewViewModelType = StateStoreViewModel<FilePreviewViewState, FilePreviewViewAction>
|
||||
typealias FilePreviewScreenViewModelType = StateStoreViewModel<FilePreviewScreenViewState, FilePreviewScreenViewAction>
|
||||
|
||||
class FilePreviewViewModel: FilePreviewViewModelType, FilePreviewViewModelProtocol {
|
||||
var callback: ((FilePreviewViewModelAction) -> Void)?
|
||||
class FilePreviewScreenViewModel: FilePreviewScreenViewModelType, FilePreviewScreenViewModelProtocol {
|
||||
var callback: ((FilePreviewScreenViewModelAction) -> Void)?
|
||||
|
||||
init(mediaFile: MediaFileHandleProxy, title: String? = nil) {
|
||||
super.init(initialViewState: FilePreviewViewState(mediaFile: mediaFile, title: title))
|
||||
super.init(initialViewState: FilePreviewScreenViewState(mediaFile: mediaFile, title: title))
|
||||
}
|
||||
|
||||
override func process(viewAction: FilePreviewViewAction) {
|
||||
override func process(viewAction: FilePreviewScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .cancel:
|
||||
callback?(.cancel)
|
@ -17,7 +17,7 @@
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
protocol RoomMemberDetailsViewModelProtocol {
|
||||
var callback: ((RoomMemberDetailsViewModelAction) -> Void)? { get set }
|
||||
var context: RoomMemberDetailsViewModelType.Context { get }
|
||||
protocol FilePreviewScreenViewModelProtocol {
|
||||
var callback: ((FilePreviewScreenViewModelAction) -> Void)? { get set }
|
||||
var context: FilePreviewScreenViewModelType.Context { get }
|
||||
}
|
@ -19,7 +19,7 @@ import SwiftUI
|
||||
import UIKit
|
||||
|
||||
struct FilePreviewScreen: View {
|
||||
@ObservedObject var context: FilePreviewViewModel.Context
|
||||
@ObservedObject var context: FilePreviewScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
ZStack(alignment: .leading) {
|
||||
@ -40,7 +40,7 @@ struct FilePreviewScreen: View {
|
||||
}
|
||||
|
||||
private struct PreviewView: UIViewControllerRepresentable {
|
||||
let context: FilePreviewViewModel.Context
|
||||
let context: FilePreviewScreenViewModel.Context
|
||||
let fileURL: URL
|
||||
let title: String?
|
||||
|
||||
@ -92,8 +92,8 @@ private class PreviewItem: NSObject, QLPreviewItem {
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
struct FilePreview_Previews: PreviewProvider {
|
||||
static let viewModel = FilePreviewViewModel(mediaFile: .unmanaged(url: URL(staticString: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf")))
|
||||
struct FilePreviewScreen_Previews: PreviewProvider {
|
||||
static let viewModel = FilePreviewScreenViewModel(mediaFile: .unmanaged(url: URL(staticString: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf")))
|
||||
|
||||
static var previews: some View {
|
||||
FilePreviewScreen(context: viewModel.context)
|
@ -17,29 +17,29 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
struct InviteUsersCoordinatorParameters {
|
||||
struct InviteUsersScreenCoordinatorParameters {
|
||||
let userSession: UserSessionProtocol
|
||||
let userDiscoveryService: UserDiscoveryServiceProtocol
|
||||
}
|
||||
|
||||
enum InviteUsersCoordinatorAction {
|
||||
enum InviteUsersScreenCoordinatorAction {
|
||||
case close
|
||||
}
|
||||
|
||||
final class InviteUsersCoordinator: CoordinatorProtocol {
|
||||
private let parameters: InviteUsersCoordinatorParameters
|
||||
private let viewModel: InviteUsersViewModelProtocol
|
||||
private let actionsSubject: PassthroughSubject<InviteUsersCoordinatorAction, Never> = .init()
|
||||
final class InviteUsersScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: InviteUsersScreenCoordinatorParameters
|
||||
private let viewModel: InviteUsersScreenViewModelProtocol
|
||||
private let actionsSubject: PassthroughSubject<InviteUsersScreenCoordinatorAction, Never> = .init()
|
||||
private var cancellables: Set<AnyCancellable> = .init()
|
||||
|
||||
var actions: AnyPublisher<InviteUsersCoordinatorAction, Never> {
|
||||
var actions: AnyPublisher<InviteUsersScreenCoordinatorAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
init(parameters: InviteUsersCoordinatorParameters) {
|
||||
init(parameters: InviteUsersScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = InviteUsersViewModel(userSession: parameters.userSession, userDiscoveryService: parameters.userDiscoveryService)
|
||||
viewModel = InviteUsersScreenViewModel(userSession: parameters.userSession, userDiscoveryService: parameters.userDiscoveryService)
|
||||
}
|
||||
|
||||
func start() {
|
@ -16,16 +16,16 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum InviteUsersErrorType: Error {
|
||||
enum InviteUsersScreenErrorType: Error {
|
||||
case unknown
|
||||
}
|
||||
|
||||
enum InviteUsersViewModelAction {
|
||||
enum InviteUsersScreenViewModelAction {
|
||||
case close
|
||||
}
|
||||
|
||||
struct InviteUsersViewState: BindableState {
|
||||
var bindings = InviteUsersViewStateBindings()
|
||||
struct InviteUsersScreenViewState: BindableState {
|
||||
var bindings = InviteUsersScreenViewStateBindings()
|
||||
|
||||
var usersSection: UserDiscoverySection = .init(type: .suggestions, users: [])
|
||||
var selectedUsers: [UserProfile] = []
|
||||
@ -45,14 +45,14 @@ struct InviteUsersViewState: BindableState {
|
||||
}
|
||||
}
|
||||
|
||||
struct InviteUsersViewStateBindings {
|
||||
struct InviteUsersScreenViewStateBindings {
|
||||
var searchQuery = ""
|
||||
|
||||
/// Information describing the currently displayed alert.
|
||||
var alertInfo: AlertInfo<InviteUsersErrorType>?
|
||||
var alertInfo: AlertInfo<InviteUsersScreenErrorType>?
|
||||
}
|
||||
|
||||
enum InviteUsersViewAction {
|
||||
enum InviteUsersScreenViewAction {
|
||||
case close
|
||||
case proceed
|
||||
case tapUser(UserProfile)
|
@ -17,28 +17,28 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
typealias InviteUsersViewModelType = StateStoreViewModel<InviteUsersViewState, InviteUsersViewAction>
|
||||
typealias InviteUsersScreenViewModelType = StateStoreViewModel<InviteUsersScreenViewState, InviteUsersScreenViewAction>
|
||||
|
||||
class InviteUsersViewModel: InviteUsersViewModelType, InviteUsersViewModelProtocol {
|
||||
class InviteUsersScreenViewModel: InviteUsersScreenViewModelType, InviteUsersScreenViewModelProtocol {
|
||||
private let userSession: UserSessionProtocol
|
||||
private let userDiscoveryService: UserDiscoveryServiceProtocol
|
||||
private let actionsSubject: PassthroughSubject<InviteUsersViewModelAction, Never> = .init()
|
||||
private let actionsSubject: PassthroughSubject<InviteUsersScreenViewModelAction, Never> = .init()
|
||||
|
||||
var actions: AnyPublisher<InviteUsersViewModelAction, Never> {
|
||||
var actions: AnyPublisher<InviteUsersScreenViewModelAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
init(userSession: UserSessionProtocol, userDiscoveryService: UserDiscoveryServiceProtocol) {
|
||||
self.userSession = userSession
|
||||
self.userDiscoveryService = userDiscoveryService
|
||||
super.init(initialViewState: InviteUsersViewState(), imageProvider: userSession.mediaProvider)
|
||||
super.init(initialViewState: InviteUsersScreenViewState(), imageProvider: userSession.mediaProvider)
|
||||
|
||||
setupSubscriptions()
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: InviteUsersViewAction) {
|
||||
override func process(viewAction: InviteUsersScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .close:
|
||||
actionsSubject.send(.close)
|
@ -17,7 +17,7 @@
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
protocol InviteUsersViewModelProtocol {
|
||||
var actions: AnyPublisher<InviteUsersViewModelAction, Never> { get }
|
||||
var context: InviteUsersViewModelType.Context { get }
|
||||
protocol InviteUsersScreenViewModelProtocol {
|
||||
var actions: AnyPublisher<InviteUsersScreenViewModelAction, Never> { get }
|
||||
var context: InviteUsersScreenViewModelType.Context { get }
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
import SwiftUI
|
||||
|
||||
struct InviteUsersScreen: View {
|
||||
@ObservedObject var context: InviteUsersViewModel.Context
|
||||
@ObservedObject var context: InviteUsersScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
@ -86,7 +86,7 @@ struct InviteUsersScreen: View {
|
||||
ScrollViewReader { scrollView in
|
||||
HStack(spacing: 28) {
|
||||
ForEach(context.viewState.selectedUsers, id: \.userID) { user in
|
||||
InviteUsersSelectedItem(user: user, imageProvider: context.imageProvider) {
|
||||
InviteUsersScreenSelectedItem(user: user, imageProvider: context.imageProvider) {
|
||||
deselect(user)
|
||||
}
|
||||
.frame(width: cellWidth)
|
||||
@ -123,7 +123,7 @@ struct InviteUsersScreen_Previews: PreviewProvider {
|
||||
let userDiscoveryService = UserDiscoveryServiceMock()
|
||||
userDiscoveryService.fetchSuggestionsReturnValue = .success([.mockAlice])
|
||||
userDiscoveryService.searchProfilesWithReturnValue = .success([.mockAlice])
|
||||
return InviteUsersViewModel(userSession: userSession, userDiscoveryService: userDiscoveryService)
|
||||
return InviteUsersScreenViewModel(userSession: userSession, userDiscoveryService: userDiscoveryService)
|
||||
}()
|
||||
|
||||
static var previews: some View {
|
@ -16,7 +16,7 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct InviteUsersSelectedItem: View {
|
||||
struct InviteUsersScreenSelectedItem: View {
|
||||
let user: UserProfile
|
||||
let imageProvider: ImageProviderProtocol?
|
||||
let dismissAction: () -> Void
|
||||
@ -43,8 +43,8 @@ struct InviteUsersSelectedItem: View {
|
||||
}
|
||||
}
|
||||
|
||||
struct InviteUsersSelectedItem_Previews: PreviewProvider {
|
||||
struct InviteUsersScreenSelectedItem_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
InviteUsersSelectedItem(user: .mockAlice, imageProvider: MockMediaProvider(), dismissAction: { })
|
||||
InviteUsersScreenSelectedItem(user: .mockAlice, imageProvider: MockMediaProvider(), dismissAction: { })
|
||||
}
|
||||
}
|
@ -17,27 +17,27 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
struct InvitesCoordinatorParameters {
|
||||
struct InvitesScreenCoordinatorParameters {
|
||||
let userSession: UserSessionProtocol
|
||||
}
|
||||
|
||||
enum InvitesCoordinatorAction {
|
||||
enum InvitesScreenCoordinatorAction {
|
||||
case openRoom(withIdentifier: String)
|
||||
}
|
||||
|
||||
final class InvitesCoordinator: CoordinatorProtocol {
|
||||
private let parameters: InvitesCoordinatorParameters
|
||||
private var viewModel: InvitesViewModelProtocol
|
||||
private let actionsSubject: PassthroughSubject<InvitesCoordinatorAction, Never> = .init()
|
||||
final class InvitesScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: InvitesScreenCoordinatorParameters
|
||||
private var viewModel: InvitesScreenViewModelProtocol
|
||||
private let actionsSubject: PassthroughSubject<InvitesScreenCoordinatorAction, Never> = .init()
|
||||
private var cancellables: Set<AnyCancellable> = .init()
|
||||
|
||||
var actions: AnyPublisher<InvitesCoordinatorAction, Never> {
|
||||
var actions: AnyPublisher<InvitesScreenCoordinatorAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
init(parameters: InvitesCoordinatorParameters) {
|
||||
init(parameters: InvitesScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
viewModel = InvitesViewModel(userSession: parameters.userSession)
|
||||
viewModel = InvitesScreenViewModel(userSession: parameters.userSession)
|
||||
}
|
||||
|
||||
func start() {
|
@ -14,20 +14,20 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
enum InvitesViewModelAction {
|
||||
enum InvitesScreenViewModelAction {
|
||||
case openRoom(withIdentifier: String)
|
||||
}
|
||||
|
||||
struct InvitesViewState: BindableState {
|
||||
var invites: [InvitesRoomDetails]?
|
||||
var bindings: InvitesViewStateBindings = .init()
|
||||
struct InvitesScreenViewState: BindableState {
|
||||
var invites: [InvitesScreenRoomDetails]?
|
||||
var bindings: InvitesScreenViewStateBindings = .init()
|
||||
}
|
||||
|
||||
struct InvitesViewStateBindings {
|
||||
struct InvitesScreenViewStateBindings {
|
||||
var alertInfo: AlertInfo<Bool>?
|
||||
}
|
||||
|
||||
struct InvitesRoomDetails {
|
||||
struct InvitesScreenRoomDetails {
|
||||
let roomDetails: RoomSummaryDetails
|
||||
var inviter: RoomMemberProxyProtocol?
|
||||
var isUnread: Bool
|
||||
@ -37,7 +37,7 @@ struct InvitesRoomDetails {
|
||||
}
|
||||
}
|
||||
|
||||
enum InvitesViewAction {
|
||||
case accept(InvitesRoomDetails)
|
||||
case decline(InvitesRoomDetails)
|
||||
enum InvitesScreenViewAction {
|
||||
case accept(InvitesScreenRoomDetails)
|
||||
case decline(InvitesScreenRoomDetails)
|
||||
}
|
@ -17,27 +17,27 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
typealias InvitesViewModelType = StateStoreViewModel<InvitesViewState, InvitesViewAction>
|
||||
typealias InvitesScreenViewModelType = StateStoreViewModel<InvitesScreenViewState, InvitesScreenViewAction>
|
||||
|
||||
class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
private var actionsSubject: PassthroughSubject<InvitesViewModelAction, Never> = .init()
|
||||
class InvitesScreenViewModel: InvitesScreenViewModelType, InvitesScreenViewModelProtocol {
|
||||
private var actionsSubject: PassthroughSubject<InvitesScreenViewModelAction, Never> = .init()
|
||||
private let userSession: UserSessionProtocol
|
||||
private let previouslySeenInvites: Set<String>
|
||||
|
||||
var actions: AnyPublisher<InvitesViewModelAction, Never> {
|
||||
var actions: AnyPublisher<InvitesScreenViewModelAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
init(userSession: UserSessionProtocol) {
|
||||
self.userSession = userSession
|
||||
previouslySeenInvites = ServiceLocator.shared.settings.seenInvites
|
||||
super.init(initialViewState: InvitesViewState(), imageProvider: userSession.mediaProvider)
|
||||
super.init(initialViewState: InvitesScreenViewState(), imageProvider: userSession.mediaProvider)
|
||||
setupSubscriptions()
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: InvitesViewAction) {
|
||||
override func process(viewAction: InvitesScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .accept(let invite):
|
||||
accept(invite: invite)
|
||||
@ -78,12 +78,12 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
private func buildInvites(from summaries: [RoomSummary]) -> [InvitesRoomDetails] {
|
||||
private func buildInvites(from summaries: [RoomSummary]) -> [InvitesScreenRoomDetails] {
|
||||
summaries.compactMap { summary in
|
||||
guard case .filled(let details) = summary else {
|
||||
return nil
|
||||
}
|
||||
return InvitesRoomDetails(roomDetails: details, isUnread: !previouslySeenInvites.contains(details.id))
|
||||
return InvitesScreenRoomDetails(roomDetails: details, isUnread: !previouslySeenInvites.contains(details.id))
|
||||
}
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
private func startDeclineFlow(invite: InvitesRoomDetails) {
|
||||
private func startDeclineFlow(invite: InvitesScreenRoomDetails) {
|
||||
let roomPlaceholder = invite.isDirect ? (invite.inviter?.displayName ?? invite.roomDetails.name) : invite.roomDetails.name
|
||||
let title = invite.isDirect ? L10n.screenInvitesDeclineDirectChatTitle : L10n.screenInvitesDeclineChatTitle
|
||||
let message = invite.isDirect ? L10n.screenInvitesDeclineDirectChatMessage(roomPlaceholder) : L10n.screenInvitesDeclineChatMessage(roomPlaceholder)
|
||||
@ -115,7 +115,7 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
secondaryButton: .init(title: L10n.actionDecline, role: .destructive, action: { self.decline(invite: invite) }))
|
||||
}
|
||||
|
||||
private func accept(invite: InvitesRoomDetails) {
|
||||
private func accept(invite: InvitesScreenRoomDetails) {
|
||||
Task {
|
||||
let roomID = invite.roomDetails.id
|
||||
defer {
|
||||
@ -138,7 +138,7 @@ class InvitesViewModel: InvitesViewModelType, InvitesViewModelProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
private func decline(invite: InvitesRoomDetails) {
|
||||
private func decline(invite: InvitesScreenRoomDetails) {
|
||||
Task {
|
||||
let roomID = invite.roomDetails.id
|
||||
defer {
|
@ -17,7 +17,7 @@
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
protocol BugReportViewModelProtocol {
|
||||
var actions: AnyPublisher<BugReportViewModelAction, Never> { get }
|
||||
var context: BugReportViewModelType.Context { get }
|
||||
protocol InvitesScreenViewModelProtocol {
|
||||
var actions: AnyPublisher<InvitesScreenViewModelAction, Never> { get }
|
||||
var context: InvitesScreenViewModelType.Context { get }
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
import SwiftUI
|
||||
|
||||
struct InvitesScreen: View {
|
||||
@ObservedObject var context: InvitesViewModel.Context
|
||||
@ObservedObject var context: InvitesScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
@ -56,32 +56,32 @@ struct InvitesScreen: View {
|
||||
struct InvitesScreen_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
NavigationView {
|
||||
InvitesScreen(context: InvitesViewModel.noInvites.context)
|
||||
InvitesScreen(context: InvitesScreenViewModel.noInvites.context)
|
||||
}
|
||||
.previewDisplayName("No Invites")
|
||||
|
||||
NavigationView {
|
||||
InvitesScreen(context: InvitesViewModel.someInvite.context)
|
||||
InvitesScreen(context: InvitesScreenViewModel.someInvite.context)
|
||||
}
|
||||
.previewDisplayName("Some Invite")
|
||||
}
|
||||
}
|
||||
|
||||
private extension InvitesViewModel {
|
||||
static let noInvites: InvitesViewModel = {
|
||||
private extension InvitesScreenViewModel {
|
||||
static let noInvites: InvitesScreenViewModel = {
|
||||
let userSession = MockUserSession(clientProxy: MockClientProxy(userID: "@userid:example.com"),
|
||||
mediaProvider: MockMediaProvider())
|
||||
let regularViewModel = InvitesViewModel(userSession: userSession)
|
||||
let regularViewModel = InvitesScreenViewModel(userSession: userSession)
|
||||
return regularViewModel
|
||||
}()
|
||||
|
||||
static let someInvite: InvitesViewModel = {
|
||||
static let someInvite: InvitesScreenViewModel = {
|
||||
let clientProxy = MockClientProxy(userID: "@userid:example.com")
|
||||
clientProxy.invitesSummaryProvider = MockRoomSummaryProvider(state: .loaded(.mockInvites))
|
||||
clientProxy.visibleRoomsSummaryProvider = MockRoomSummaryProvider(state: .loaded(.mockInvites))
|
||||
let userSession = MockUserSession(clientProxy: clientProxy,
|
||||
mediaProvider: MockMediaProvider())
|
||||
let regularViewModel = InvitesViewModel(userSession: userSession)
|
||||
let regularViewModel = InvitesScreenViewModel(userSession: userSession)
|
||||
return regularViewModel
|
||||
}()
|
||||
}
|
@ -18,7 +18,7 @@ import SwiftUI
|
||||
|
||||
@MainActor
|
||||
struct InvitesScreenCell: View {
|
||||
let invite: InvitesRoomDetails
|
||||
let invite: InvitesScreenRoomDetails
|
||||
let imageProvider: ImageProviderProtocol?
|
||||
let acceptAction: () -> Void
|
||||
let declineAction: () -> Void
|
||||
@ -169,8 +169,8 @@ struct InvitesScreenCell_Previews: PreviewProvider {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
private extension InvitesRoomDetails {
|
||||
static var dm: InvitesRoomDetails {
|
||||
private extension InvitesScreenRoomDetails {
|
||||
static var dm: InvitesScreenRoomDetails {
|
||||
let dmRoom = RoomSummaryDetails(id: "@someone:somewhere.com",
|
||||
name: "Some Guy",
|
||||
isDirect: true,
|
||||
@ -186,7 +186,7 @@ private extension InvitesRoomDetails {
|
||||
return .init(roomDetails: dmRoom, inviter: inviter, isUnread: false)
|
||||
}
|
||||
|
||||
static func room(alias: String?) -> InvitesRoomDetails {
|
||||
static func room(alias: String?) -> InvitesScreenRoomDetails {
|
||||
let dmRoom = RoomSummaryDetails(id: "@someone:somewhere.com",
|
||||
name: "Awesome Room",
|
||||
isDirect: false,
|
@ -16,23 +16,23 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
enum MediaPickerSource {
|
||||
enum MediaPickerScreenSource {
|
||||
case camera
|
||||
case photoLibrary
|
||||
case documents
|
||||
}
|
||||
|
||||
enum MediaPickerCoordinatorAction {
|
||||
enum MediaPickerScreenCoordinatorAction {
|
||||
case selectMediaAtURL(URL)
|
||||
case cancel
|
||||
case error(Error?)
|
||||
}
|
||||
|
||||
class MediaPickerCoordinator: CoordinatorProtocol {
|
||||
private let source: MediaPickerSource
|
||||
private let callback: ((MediaPickerCoordinatorAction) -> Void)?
|
||||
class MediaPickerScreenCoordinator: CoordinatorProtocol {
|
||||
private let source: MediaPickerScreenSource
|
||||
private let callback: ((MediaPickerScreenCoordinatorAction) -> Void)?
|
||||
|
||||
init(source: MediaPickerSource, callback: @escaping (MediaPickerCoordinatorAction) -> Void) {
|
||||
init(source: MediaPickerScreenSource, callback: @escaping (MediaPickerScreenCoordinatorAction) -> Void) {
|
||||
self.source = source
|
||||
self.callback = callback
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
//
|
||||
// Copyright 2022 New Vector Ltd
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct UIActivityViewControllerWrapper: UIViewControllerRepresentable {
|
||||
var activityItems: [Any]
|
||||
var applicationActivities: [UIActivity]?
|
||||
|
||||
func makeUIViewController(context: UIViewControllerRepresentableContext<UIActivityViewControllerWrapper>) -> UIActivityViewController {
|
||||
UIActivityViewController(activityItems: activityItems, applicationActivities: applicationActivities)
|
||||
}
|
||||
|
||||
func updateUIViewController(_ uiViewController: UIActivityViewController, context: UIViewControllerRepresentableContext<UIActivityViewControllerWrapper>) { }
|
||||
}
|
@ -17,29 +17,29 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
struct ReportContentCoordinatorParameters {
|
||||
struct ReportContentScreenCoordinatorParameters {
|
||||
let itemID: String
|
||||
let senderID: String
|
||||
let roomProxy: RoomProxyProtocol
|
||||
weak var userIndicatorController: UserIndicatorControllerProtocol?
|
||||
}
|
||||
|
||||
enum ReportContentCoordinatorAction {
|
||||
enum ReportContentScreenCoordinatorAction {
|
||||
case cancel
|
||||
case finish
|
||||
}
|
||||
|
||||
final class ReportContentCoordinator: CoordinatorProtocol {
|
||||
private let parameters: ReportContentCoordinatorParameters
|
||||
private var viewModel: ReportContentViewModelProtocol
|
||||
final class ReportContentScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: ReportContentScreenCoordinatorParameters
|
||||
private var viewModel: ReportContentScreenViewModelProtocol
|
||||
private var cancellables: Set<AnyCancellable> = .init()
|
||||
|
||||
var callback: ((ReportContentCoordinatorAction) -> Void)?
|
||||
var callback: ((ReportContentScreenCoordinatorAction) -> Void)?
|
||||
|
||||
init(parameters: ReportContentCoordinatorParameters) {
|
||||
init(parameters: ReportContentScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = ReportContentViewModel(itemID: parameters.itemID, senderID: parameters.senderID, roomProxy: parameters.roomProxy)
|
||||
viewModel = ReportContentScreenViewModel(itemID: parameters.itemID, senderID: parameters.senderID, roomProxy: parameters.roomProxy)
|
||||
}
|
||||
|
||||
// MARK: - Public
|
@ -16,23 +16,23 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum ReportContentViewModelAction {
|
||||
enum ReportContentScreenViewModelAction {
|
||||
case cancel
|
||||
case submitStarted
|
||||
case submitFinished
|
||||
case submitFailed(error: Error)
|
||||
}
|
||||
|
||||
struct ReportContentViewState: BindableState {
|
||||
var bindings: ReportContentViewStateBindings
|
||||
struct ReportContentScreenViewState: BindableState {
|
||||
var bindings: ReportContentScreenViewStateBindings
|
||||
}
|
||||
|
||||
struct ReportContentViewStateBindings {
|
||||
struct ReportContentScreenViewStateBindings {
|
||||
var reasonText: String
|
||||
var ignoreUser: Bool
|
||||
}
|
||||
|
||||
enum ReportContentViewAction {
|
||||
enum ReportContentScreenViewAction {
|
||||
case cancel
|
||||
case submit
|
||||
}
|
@ -17,15 +17,15 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
typealias ReportContentViewModelType = StateStoreViewModel<ReportContentViewState, ReportContentViewAction>
|
||||
typealias ReportContentScreenViewModelType = StateStoreViewModel<ReportContentScreenViewState, ReportContentScreenViewAction>
|
||||
|
||||
class ReportContentViewModel: ReportContentViewModelType, ReportContentViewModelProtocol {
|
||||
class ReportContentScreenViewModel: ReportContentScreenViewModelType, ReportContentScreenViewModelProtocol {
|
||||
private let itemID: String
|
||||
private let senderID: String
|
||||
private let roomProxy: RoomProxyProtocol
|
||||
private let actionsSubject: PassthroughSubject<ReportContentViewModelAction, Never> = .init()
|
||||
private let actionsSubject: PassthroughSubject<ReportContentScreenViewModelAction, Never> = .init()
|
||||
|
||||
var actions: AnyPublisher<ReportContentViewModelAction, Never> {
|
||||
var actions: AnyPublisher<ReportContentScreenViewModelAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
@ -34,12 +34,12 @@ class ReportContentViewModel: ReportContentViewModelType, ReportContentViewModel
|
||||
self.senderID = senderID
|
||||
self.roomProxy = roomProxy
|
||||
|
||||
super.init(initialViewState: ReportContentViewState(bindings: ReportContentViewStateBindings(reasonText: "", ignoreUser: false)))
|
||||
super.init(initialViewState: ReportContentScreenViewState(bindings: ReportContentScreenViewStateBindings(reasonText: "", ignoreUser: false)))
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: ReportContentViewAction) {
|
||||
override func process(viewAction: ReportContentScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .cancel:
|
||||
actionsSubject.send(.cancel)
|
@ -18,7 +18,7 @@ import Combine
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
protocol ReportContentViewModelProtocol {
|
||||
var actions: AnyPublisher<ReportContentViewModelAction, Never> { get }
|
||||
var context: ReportContentViewModelType.Context { get }
|
||||
protocol ReportContentScreenViewModelProtocol {
|
||||
var actions: AnyPublisher<ReportContentScreenViewModelAction, Never> { get }
|
||||
var context: ReportContentScreenViewModelType.Context { get }
|
||||
}
|
@ -19,7 +19,7 @@ import SwiftUI
|
||||
struct ReportContentScreen: View {
|
||||
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
|
||||
|
||||
@ObservedObject var context: ReportContentViewModel.Context
|
||||
@ObservedObject var context: ReportContentScreenViewModel.Context
|
||||
|
||||
private var horizontalPadding: CGFloat {
|
||||
horizontalSizeClass == .regular ? 50 : 16
|
||||
@ -83,8 +83,8 @@ struct ReportContentScreen: View {
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
struct ReportContent_Previews: PreviewProvider {
|
||||
static let viewModel = ReportContentViewModel(itemID: "",
|
||||
struct ReportContentScreen_Previews: PreviewProvider {
|
||||
static let viewModel = ReportContentScreenViewModel(itemID: "",
|
||||
senderID: "",
|
||||
roomProxy: RoomProxyMock(with: .init(displayName: nil)))
|
||||
|
@ -16,28 +16,28 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RoomDetailsCoordinatorParameters {
|
||||
struct RoomDetailsScreenCoordinatorParameters {
|
||||
let navigationStackCoordinator: NavigationStackCoordinator
|
||||
let roomProxy: RoomProxyProtocol
|
||||
let mediaProvider: MediaProviderProtocol
|
||||
}
|
||||
|
||||
enum RoomDetailsCoordinatorAction {
|
||||
enum RoomDetailsScreenCoordinatorAction {
|
||||
case cancel
|
||||
case leftRoom
|
||||
}
|
||||
|
||||
final class RoomDetailsCoordinator: CoordinatorProtocol {
|
||||
private let parameters: RoomDetailsCoordinatorParameters
|
||||
private var viewModel: RoomDetailsViewModelProtocol
|
||||
final class RoomDetailsScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: RoomDetailsScreenCoordinatorParameters
|
||||
private var viewModel: RoomDetailsScreenViewModelProtocol
|
||||
private var navigationStackCoordinator: NavigationStackCoordinator { parameters.navigationStackCoordinator }
|
||||
|
||||
var callback: ((RoomDetailsCoordinatorAction) -> Void)?
|
||||
var callback: ((RoomDetailsScreenCoordinatorAction) -> Void)?
|
||||
|
||||
init(parameters: RoomDetailsCoordinatorParameters) {
|
||||
init(parameters: RoomDetailsScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = RoomDetailsViewModel(roomProxy: parameters.roomProxy,
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: parameters.roomProxy,
|
||||
mediaProvider: parameters.mediaProvider)
|
||||
}
|
||||
|
||||
@ -63,10 +63,10 @@ final class RoomDetailsCoordinator: CoordinatorProtocol {
|
||||
}
|
||||
|
||||
private func presentRoomMembersList(_ members: [RoomMemberProxyProtocol]) {
|
||||
let params = RoomMembersListCoordinatorParameters(navigationStackCoordinator: navigationStackCoordinator,
|
||||
let params = RoomMembersListScreenCoordinatorParameters(navigationStackCoordinator: navigationStackCoordinator,
|
||||
mediaProvider: parameters.mediaProvider,
|
||||
members: members)
|
||||
let coordinator = RoomMembersListCoordinator(parameters: params)
|
||||
let coordinator = RoomMembersListScreenCoordinator(parameters: params)
|
||||
|
||||
navigationStackCoordinator.push(coordinator)
|
||||
}
|
@ -21,7 +21,7 @@ import UIKit
|
||||
|
||||
// MARK: View model
|
||||
|
||||
enum RoomDetailsViewModelAction {
|
||||
enum RoomDetailsScreenViewModelAction {
|
||||
case requestMemberDetailsPresentation([RoomMemberProxyProtocol])
|
||||
case leftRoom
|
||||
case cancel
|
||||
@ -29,7 +29,7 @@ enum RoomDetailsViewModelAction {
|
||||
|
||||
// MARK: View
|
||||
|
||||
struct RoomDetailsViewState: BindableState {
|
||||
struct RoomDetailsScreenViewState: BindableState {
|
||||
let roomId: String
|
||||
let canonicalAlias: String?
|
||||
let isEncrypted: Bool
|
||||
@ -45,7 +45,7 @@ struct RoomDetailsViewState: BindableState {
|
||||
members.isEmpty
|
||||
}
|
||||
|
||||
var bindings: RoomDetailsViewStateBindings
|
||||
var bindings: RoomDetailsScreenViewStateBindings
|
||||
|
||||
var dmRecipient: RoomMemberDetails?
|
||||
|
||||
@ -54,7 +54,7 @@ struct RoomDetailsViewState: BindableState {
|
||||
}
|
||||
}
|
||||
|
||||
struct RoomDetailsViewStateBindings {
|
||||
struct RoomDetailsScreenViewStateBindings {
|
||||
struct IgnoreUserAlertItem: AlertItem, Equatable {
|
||||
enum Action {
|
||||
case ignore
|
||||
@ -85,7 +85,7 @@ struct RoomDetailsViewStateBindings {
|
||||
}
|
||||
}
|
||||
|
||||
var viewAction: RoomDetailsViewAction {
|
||||
var viewAction: RoomDetailsScreenViewAction {
|
||||
switch action {
|
||||
case .ignore: return .ignoreConfirmed
|
||||
case .unignore: return .unignoreConfirmed
|
||||
@ -94,7 +94,7 @@ struct RoomDetailsViewStateBindings {
|
||||
}
|
||||
|
||||
/// Information describing the currently displayed alert.
|
||||
var alertInfo: AlertInfo<RoomDetailsErrorType>?
|
||||
var alertInfo: AlertInfo<RoomDetailsScreenErrorType>?
|
||||
var leaveRoomAlertItem: LeaveRoomAlertItem?
|
||||
var ignoreUserRoomAlertItem: IgnoreUserAlertItem?
|
||||
}
|
||||
@ -120,7 +120,7 @@ struct LeaveRoomAlertItem: AlertItem {
|
||||
}
|
||||
}
|
||||
|
||||
enum RoomDetailsViewAction {
|
||||
enum RoomDetailsScreenViewAction {
|
||||
case processTapPeople
|
||||
case processTapLeave
|
||||
case processTapIgnore
|
||||
@ -130,7 +130,7 @@ enum RoomDetailsViewAction {
|
||||
case unignoreConfirmed
|
||||
}
|
||||
|
||||
enum RoomDetailsErrorType: Hashable {
|
||||
enum RoomDetailsScreenErrorType: Hashable {
|
||||
/// A specific error message shown in an alert.
|
||||
case alert(String)
|
||||
/// Leaving room has failed..
|
@ -17,9 +17,9 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
typealias RoomDetailsViewModelType = StateStoreViewModel<RoomDetailsViewState, RoomDetailsViewAction>
|
||||
typealias RoomDetailsScreenViewModelType = StateStoreViewModel<RoomDetailsScreenViewState, RoomDetailsScreenViewAction>
|
||||
|
||||
class RoomDetailsViewModel: RoomDetailsViewModelType, RoomDetailsViewModelProtocol {
|
||||
class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScreenViewModelProtocol {
|
||||
private let roomProxy: RoomProxyProtocol
|
||||
private var members: [RoomMemberProxyProtocol] = [] {
|
||||
didSet {
|
||||
@ -42,7 +42,7 @@ class RoomDetailsViewModel: RoomDetailsViewModelType, RoomDetailsViewModelProtoc
|
||||
}
|
||||
}
|
||||
|
||||
var callback: ((RoomDetailsViewModelAction) -> Void)?
|
||||
var callback: ((RoomDetailsScreenViewModelAction) -> Void)?
|
||||
|
||||
init(roomProxy: RoomProxyProtocol,
|
||||
mediaProvider: MediaProviderProtocol) {
|
||||
@ -70,7 +70,7 @@ class RoomDetailsViewModel: RoomDetailsViewModelType, RoomDetailsViewModelProtoc
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: RoomDetailsViewAction) {
|
||||
override func process(viewAction: RoomDetailsScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .processTapPeople:
|
||||
callback?(.requestMemberDetailsPresentation(members))
|
@ -17,7 +17,7 @@
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
protocol RoomMembersListViewModelProtocol {
|
||||
var callback: ((RoomMembersListViewModelAction) -> Void)? { get set }
|
||||
var context: RoomMembersListViewModelType.Context { get }
|
||||
protocol RoomDetailsScreenViewModelProtocol {
|
||||
var callback: ((RoomDetailsScreenViewModelAction) -> Void)? { get set }
|
||||
var context: RoomDetailsScreenViewModelType.Context { get }
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
import SwiftUI
|
||||
|
||||
struct RoomDetailsScreen: View {
|
||||
@ObservedObject var context: RoomDetailsViewModel.Context
|
||||
@ObservedObject var context: RoomDetailsScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
@ -199,7 +199,7 @@ struct RoomDetailsScreen: View {
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private func blockUserAlertActions(_ item: RoomDetailsViewStateBindings.IgnoreUserAlertItem) -> some View {
|
||||
private func blockUserAlertActions(_ item: RoomDetailsScreenViewStateBindings.IgnoreUserAlertItem) -> some View {
|
||||
Button(item.cancelTitle, role: .cancel) { }
|
||||
Button(item.confirmationTitle,
|
||||
role: item.action == .ignore ? .destructive : nil) {
|
||||
@ -207,14 +207,14 @@ struct RoomDetailsScreen: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func blockUserAlertMessage(_ item: RoomDetailsViewStateBindings.IgnoreUserAlertItem) -> some View {
|
||||
private func blockUserAlertMessage(_ item: RoomDetailsScreenViewStateBindings.IgnoreUserAlertItem) -> some View {
|
||||
Text(item.description)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
struct RoomDetails_Previews: PreviewProvider {
|
||||
struct RoomDetailsScreen_Previews: PreviewProvider {
|
||||
static let genericRoomViewModel = {
|
||||
let members: [RoomMemberProxyMock] = [
|
||||
.mockAlice,
|
||||
@ -228,7 +228,7 @@ struct RoomDetails_Previews: PreviewProvider {
|
||||
canonicalAlias: "#alias:domain.com",
|
||||
members: members))
|
||||
|
||||
return RoomDetailsViewModel(roomProxy: roomProxy,
|
||||
return RoomDetailsScreenViewModel(roomProxy: roomProxy,
|
||||
mediaProvider: MockMediaProvider())
|
||||
}()
|
||||
|
||||
@ -245,7 +245,7 @@ struct RoomDetails_Previews: PreviewProvider {
|
||||
canonicalAlias: "#alias:domain.com",
|
||||
members: members))
|
||||
|
||||
return RoomDetailsViewModel(roomProxy: roomProxy,
|
||||
return RoomDetailsScreenViewModel(roomProxy: roomProxy,
|
||||
mediaProvider: MockMediaProvider())
|
||||
}()
|
||||
|
@ -16,23 +16,23 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RoomMemberDetailsCoordinatorParameters {
|
||||
struct RoomMemberDetailsScreenCoordinatorParameters {
|
||||
let roomMemberProxy: RoomMemberProxyProtocol
|
||||
let mediaProvider: MediaProviderProtocol
|
||||
}
|
||||
|
||||
enum RoomMemberDetailsCoordinatorAction { }
|
||||
enum RoomMemberDetailsScreenCoordinatorAction { }
|
||||
|
||||
final class RoomMemberDetailsCoordinator: CoordinatorProtocol {
|
||||
private let parameters: RoomMemberDetailsCoordinatorParameters
|
||||
private var viewModel: RoomMemberDetailsViewModelProtocol
|
||||
final class RoomMemberDetailsScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: RoomMemberDetailsScreenCoordinatorParameters
|
||||
private var viewModel: RoomMemberDetailsScreenViewModelProtocol
|
||||
|
||||
var callback: ((RoomMemberDetailsCoordinatorAction) -> Void)?
|
||||
var callback: ((RoomMemberDetailsScreenCoordinatorAction) -> Void)?
|
||||
|
||||
init(parameters: RoomMemberDetailsCoordinatorParameters) {
|
||||
init(parameters: RoomMemberDetailsScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: parameters.roomMemberProxy, mediaProvider: parameters.mediaProvider)
|
||||
viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: parameters.roomMemberProxy, mediaProvider: parameters.mediaProvider)
|
||||
}
|
||||
|
||||
func start() { }
|
@ -16,16 +16,16 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum RoomMemberDetailsViewModelAction { }
|
||||
enum RoomMemberDetailsScreenViewModelAction { }
|
||||
|
||||
struct RoomMemberDetailsViewState: BindableState {
|
||||
struct RoomMemberDetailsScreenViewState: BindableState {
|
||||
var details: RoomMemberDetails
|
||||
var isProcessingIgnoreRequest = false
|
||||
|
||||
var bindings: RoomMemberDetailsViewStateBindings
|
||||
var bindings: RoomMemberDetailsScreenViewStateBindings
|
||||
}
|
||||
|
||||
struct RoomMemberDetailsViewStateBindings {
|
||||
struct RoomMemberDetailsScreenViewStateBindings {
|
||||
struct IgnoreUserAlertItem: AlertItem, Equatable {
|
||||
enum Action {
|
||||
case ignore
|
||||
@ -56,7 +56,7 @@ struct RoomMemberDetailsViewStateBindings {
|
||||
}
|
||||
}
|
||||
|
||||
var viewAction: RoomMemberDetailsViewAction {
|
||||
var viewAction: RoomMemberDetailsScreenViewAction {
|
||||
switch action {
|
||||
case .ignore: return .ignoreConfirmed
|
||||
case .unignore: return .unignoreConfirmed
|
||||
@ -68,7 +68,7 @@ struct RoomMemberDetailsViewStateBindings {
|
||||
var errorAlert: ErrorAlertItem?
|
||||
}
|
||||
|
||||
enum RoomMemberDetailsViewAction {
|
||||
enum RoomMemberDetailsScreenViewAction {
|
||||
case showUnignoreAlert
|
||||
case showIgnoreAlert
|
||||
case ignoreConfirmed
|
@ -16,23 +16,23 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
typealias RoomMemberDetailsViewModelType = StateStoreViewModel<RoomMemberDetailsViewState, RoomMemberDetailsViewAction>
|
||||
typealias RoomMemberDetailsScreenViewModelType = StateStoreViewModel<RoomMemberDetailsScreenViewState, RoomMemberDetailsScreenViewAction>
|
||||
|
||||
class RoomMemberDetailsViewModel: RoomMemberDetailsViewModelType, RoomMemberDetailsViewModelProtocol {
|
||||
class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, RoomMemberDetailsScreenViewModelProtocol {
|
||||
let roomMemberProxy: RoomMemberProxyProtocol
|
||||
|
||||
var callback: ((RoomMemberDetailsViewModelAction) -> Void)?
|
||||
var callback: ((RoomMemberDetailsScreenViewModelAction) -> Void)?
|
||||
|
||||
init(roomMemberProxy: RoomMemberProxyProtocol, mediaProvider: MediaProviderProtocol) {
|
||||
self.roomMemberProxy = roomMemberProxy
|
||||
let initialViewState = RoomMemberDetailsViewState(details: RoomMemberDetails(withProxy: roomMemberProxy),
|
||||
let initialViewState = RoomMemberDetailsScreenViewState(details: RoomMemberDetails(withProxy: roomMemberProxy),
|
||||
bindings: .init())
|
||||
super.init(initialViewState: initialViewState, imageProvider: mediaProvider)
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: RoomMemberDetailsViewAction) {
|
||||
override func process(viewAction: RoomMemberDetailsScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .showUnignoreAlert:
|
||||
state.bindings.ignoreUserAlert = .init(action: .unignore)
|
@ -17,7 +17,7 @@
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
protocol RoomDetailsViewModelProtocol {
|
||||
var callback: ((RoomDetailsViewModelAction) -> Void)? { get set }
|
||||
var context: RoomDetailsViewModelType.Context { get }
|
||||
protocol RoomMemberDetailsScreenViewModelProtocol {
|
||||
var callback: ((RoomMemberDetailsScreenViewModelAction) -> Void)? { get set }
|
||||
var context: RoomMemberDetailsScreenViewModelType.Context { get }
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
import SwiftUI
|
||||
|
||||
struct RoomMemberDetailsScreen: View {
|
||||
@ObservedObject var context: RoomMemberDetailsViewModel.Context
|
||||
@ObservedObject var context: RoomMemberDetailsScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
@ -69,7 +69,7 @@ struct RoomMemberDetailsScreen: View {
|
||||
.formSectionStyle()
|
||||
}
|
||||
|
||||
private var blockUserButtonAction: RoomMemberDetailsViewAction {
|
||||
private var blockUserButtonAction: RoomMemberDetailsScreenViewAction {
|
||||
context.viewState.details.isIgnored ? .showUnignoreAlert : .showIgnoreAlert
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ struct RoomMemberDetailsScreen: View {
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private func blockUserAlertActions(_ item: RoomMemberDetailsViewStateBindings.IgnoreUserAlertItem) -> some View {
|
||||
private func blockUserAlertActions(_ item: RoomMemberDetailsScreenViewStateBindings.IgnoreUserAlertItem) -> some View {
|
||||
Button(item.cancelTitle, role: .cancel) { }
|
||||
Button(item.confirmationTitle,
|
||||
role: item.action == .ignore ? .destructive : nil) {
|
||||
@ -90,27 +90,27 @@ struct RoomMemberDetailsScreen: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func blockUserAlertMessage(_ item: RoomMemberDetailsViewStateBindings.IgnoreUserAlertItem) -> some View {
|
||||
private func blockUserAlertMessage(_ item: RoomMemberDetailsScreenViewStateBindings.IgnoreUserAlertItem) -> some View {
|
||||
Text(item.description)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
struct RoomMemberDetails_Previews: PreviewProvider {
|
||||
struct RoomMemberDetailsScreen_Previews: PreviewProvider {
|
||||
static let otherUserViewModel = {
|
||||
let member = RoomMemberProxyMock.mockDan
|
||||
return RoomMemberDetailsViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider())
|
||||
return RoomMemberDetailsScreenViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider())
|
||||
}()
|
||||
|
||||
static let accountOwnerViewModel = {
|
||||
let member = RoomMemberProxyMock.mockMe
|
||||
return RoomMemberDetailsViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider())
|
||||
return RoomMemberDetailsScreenViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider())
|
||||
}()
|
||||
|
||||
static let ignoredUserViewModel = {
|
||||
let member = RoomMemberProxyMock.mockIgnored
|
||||
return RoomMemberDetailsViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider())
|
||||
return RoomMemberDetailsScreenViewModel(roomMemberProxy: member, mediaProvider: MockMediaProvider())
|
||||
}()
|
||||
|
||||
static var previews: some View {
|
@ -16,25 +16,25 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RoomMembersListCoordinatorParameters {
|
||||
struct RoomMembersListScreenCoordinatorParameters {
|
||||
let navigationStackCoordinator: NavigationStackCoordinator
|
||||
let mediaProvider: MediaProviderProtocol
|
||||
let members: [RoomMemberProxyProtocol]
|
||||
}
|
||||
|
||||
enum RoomMembersListCoordinatorAction { }
|
||||
enum RoomMembersListScreenCoordinatorAction { }
|
||||
|
||||
final class RoomMembersListCoordinator: CoordinatorProtocol {
|
||||
private let parameters: RoomMembersListCoordinatorParameters
|
||||
private var viewModel: RoomMembersListViewModelProtocol
|
||||
final class RoomMembersListScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: RoomMembersListScreenCoordinatorParameters
|
||||
private var viewModel: RoomMembersListScreenViewModelProtocol
|
||||
private var navigationStackCoordinator: NavigationStackCoordinator { parameters.navigationStackCoordinator }
|
||||
|
||||
var callback: ((RoomMembersListCoordinatorAction) -> Void)?
|
||||
var callback: ((RoomMembersListScreenCoordinatorAction) -> Void)?
|
||||
|
||||
init(parameters: RoomMembersListCoordinatorParameters) {
|
||||
init(parameters: RoomMembersListScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = RoomMembersListViewModel(mediaProvider: parameters.mediaProvider,
|
||||
viewModel = RoomMembersListScreenViewModel(mediaProvider: parameters.mediaProvider,
|
||||
members: parameters.members)
|
||||
}
|
||||
|
||||
@ -56,8 +56,8 @@ final class RoomMembersListCoordinator: CoordinatorProtocol {
|
||||
// MARK: - Private
|
||||
|
||||
private func selectMember(_ member: RoomMemberProxyProtocol) {
|
||||
let parameters = RoomMemberDetailsCoordinatorParameters(roomMemberProxy: member, mediaProvider: parameters.mediaProvider)
|
||||
let coordinator = RoomMemberDetailsCoordinator(parameters: parameters)
|
||||
let parameters = RoomMemberDetailsScreenCoordinatorParameters(roomMemberProxy: member, mediaProvider: parameters.mediaProvider)
|
||||
let coordinator = RoomMemberDetailsScreenCoordinator(parameters: parameters)
|
||||
|
||||
navigationStackCoordinator.push(coordinator)
|
||||
}
|
@ -16,14 +16,14 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum RoomMembersListViewModelAction {
|
||||
enum RoomMembersListScreenViewModelAction {
|
||||
case selectMember(_ member: RoomMemberProxyProtocol)
|
||||
}
|
||||
|
||||
struct RoomMembersListViewState: BindableState {
|
||||
struct RoomMembersListScreenViewState: BindableState {
|
||||
var members: [RoomMemberDetails]
|
||||
|
||||
var bindings: RoomMembersListViewStateBindings
|
||||
var bindings: RoomMembersListScreenViewStateBindings
|
||||
|
||||
var visibleMembers: [RoomMemberDetails] {
|
||||
if bindings.searchQuery.isEmpty {
|
||||
@ -37,13 +37,13 @@ struct RoomMembersListViewState: BindableState {
|
||||
}
|
||||
}
|
||||
|
||||
struct RoomMembersListViewStateBindings {
|
||||
struct RoomMembersListScreenViewStateBindings {
|
||||
var searchQuery = ""
|
||||
|
||||
/// Information describing the currently displayed alert.
|
||||
var alertInfo: AlertInfo<RoomDetailsErrorType>?
|
||||
var alertInfo: AlertInfo<RoomDetailsScreenErrorType>?
|
||||
}
|
||||
|
||||
enum RoomMembersListViewAction {
|
||||
enum RoomMembersListScreenViewAction {
|
||||
case selectMember(id: String)
|
||||
}
|
@ -16,13 +16,13 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
typealias RoomMembersListViewModelType = StateStoreViewModel<RoomMembersListViewState, RoomMembersListViewAction>
|
||||
typealias RoomMembersListScreenViewModelType = StateStoreViewModel<RoomMembersListScreenViewState, RoomMembersListScreenViewAction>
|
||||
|
||||
class RoomMembersListViewModel: RoomMembersListViewModelType, RoomMembersListViewModelProtocol {
|
||||
class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMembersListScreenViewModelProtocol {
|
||||
private let mediaProvider: MediaProviderProtocol
|
||||
private let members: [RoomMemberProxyProtocol]
|
||||
|
||||
var callback: ((RoomMembersListViewModelAction) -> Void)?
|
||||
var callback: ((RoomMembersListScreenViewModelAction) -> Void)?
|
||||
|
||||
init(mediaProvider: MediaProviderProtocol,
|
||||
members: [RoomMemberProxyProtocol]) {
|
||||
@ -35,7 +35,7 @@ class RoomMembersListViewModel: RoomMembersListViewModelType, RoomMembersListVie
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
override func process(viewAction: RoomMembersListViewAction) {
|
||||
override func process(viewAction: RoomMembersListScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .selectMember(let id):
|
||||
guard let member = members.first(where: { $0.userID == id }) else {
|
@ -17,7 +17,7 @@
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
protocol FilePreviewViewModelProtocol {
|
||||
var callback: ((FilePreviewViewModelAction) -> Void)? { get set }
|
||||
var context: FilePreviewViewModelType.Context { get }
|
||||
protocol RoomMembersListScreenViewModelProtocol {
|
||||
var callback: ((RoomMembersListScreenViewModelAction) -> Void)? { get set }
|
||||
var context: RoomMembersListScreenViewModelType.Context { get }
|
||||
}
|
@ -19,14 +19,14 @@ import SwiftUI
|
||||
struct RoomMembersListScreen: View {
|
||||
@Environment(\.colorScheme) private var colorScheme
|
||||
|
||||
@ObservedObject var context: RoomMembersListViewModel.Context
|
||||
@ObservedObject var context: RoomMembersListScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
LazyVStack(alignment: .leading) {
|
||||
Section {
|
||||
ForEach(context.viewState.visibleMembers) { member in
|
||||
RoomMembersListMemberCell(member: member, context: context)
|
||||
RoomMembersListScreenMemberCell(member: member, context: context)
|
||||
.id(member.id)
|
||||
}
|
||||
} header: {
|
||||
@ -48,14 +48,14 @@ struct RoomMembersListScreen: View {
|
||||
|
||||
// MARK: - Previews
|
||||
|
||||
struct RoomMembersList_Previews: PreviewProvider {
|
||||
struct RoomMembersListScreen_Previews: PreviewProvider {
|
||||
static let viewModel = {
|
||||
let members: [RoomMemberProxyMock] = [
|
||||
.mockAlice,
|
||||
.mockBob,
|
||||
.mockCharlie
|
||||
]
|
||||
return RoomMembersListViewModel(mediaProvider: MockMediaProvider(),
|
||||
return RoomMembersListScreenViewModel(mediaProvider: MockMediaProvider(),
|
||||
members: members)
|
||||
}()
|
||||
|
@ -16,11 +16,11 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RoomMembersListMemberCell: View {
|
||||
struct RoomMembersListScreenMemberCell: View {
|
||||
@ScaledMetric private var avatarSize = AvatarSize.user(on: .roomDetails).value
|
||||
|
||||
let member: RoomMemberDetails
|
||||
let context: RoomMembersListViewModel.Context
|
||||
let context: RoomMembersListScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
Button {
|
||||
@ -53,12 +53,12 @@ struct RoomMembersListMemberCell_Previews: PreviewProvider {
|
||||
.mockBob,
|
||||
.mockCharlie
|
||||
]
|
||||
let viewModel = RoomMembersListViewModel(mediaProvider: MockMediaProvider(),
|
||||
let viewModel = RoomMembersListScreenViewModel(mediaProvider: MockMediaProvider(),
|
||||
members: members)
|
||||
|
||||
return VStack {
|
||||
ForEach(members, id: \.userID) { member in
|
||||
RoomMembersListMemberCell(member: .init(withProxy: member), context: viewModel.context)
|
||||
RoomMembersListScreenMemberCell(member: .init(withProxy: member), context: viewModel.context)
|
||||
}
|
||||
}
|
||||
}
|
@ -83,8 +83,8 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func displayMediaPickerWithSource(_ source: MediaPickerSource) {
|
||||
let mediaPickerCoordinator = MediaPickerCoordinator(source: source) { [weak self] action in
|
||||
private func displayMediaPickerWithSource(_ source: MediaPickerScreenSource) {
|
||||
let mediaPickerCoordinator = MediaPickerScreenCoordinator(source: source) { [weak self] action in
|
||||
switch action {
|
||||
case .cancel:
|
||||
self?.navigationStackCoordinator.setSheetCoordinator(nil)
|
||||
@ -125,8 +125,8 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
}
|
||||
|
||||
private func displayFilePreview(for file: MediaFileHandleProxy, with title: String?) {
|
||||
let params = FilePreviewCoordinatorParameters(mediaFile: file, title: title)
|
||||
let coordinator = FilePreviewCoordinator(parameters: params)
|
||||
let params = FilePreviewScreenCoordinatorParameters(mediaFile: file, title: title)
|
||||
let coordinator = FilePreviewScreenCoordinator(parameters: params)
|
||||
coordinator.callback = { [weak self] _ in
|
||||
self?.navigationStackCoordinator.pop()
|
||||
}
|
||||
@ -160,10 +160,10 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
}
|
||||
|
||||
private func displayRoomDetails() {
|
||||
let params = RoomDetailsCoordinatorParameters(navigationStackCoordinator: navigationStackCoordinator,
|
||||
let params = RoomDetailsScreenCoordinatorParameters(navigationStackCoordinator: navigationStackCoordinator,
|
||||
roomProxy: parameters.roomProxy,
|
||||
mediaProvider: parameters.mediaProvider)
|
||||
let coordinator = RoomDetailsCoordinator(parameters: params)
|
||||
let coordinator = RoomDetailsScreenCoordinator(parameters: params)
|
||||
coordinator.callback = { [weak self] action in
|
||||
switch action {
|
||||
case .cancel:
|
||||
@ -179,11 +179,11 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
private func displayReportContent(for itemID: String, from senderID: String) {
|
||||
let navigationCoordinator = NavigationStackCoordinator()
|
||||
let userIndicatorController = UserIndicatorController(rootCoordinator: navigationCoordinator)
|
||||
let parameters = ReportContentCoordinatorParameters(itemID: itemID,
|
||||
let parameters = ReportContentScreenCoordinatorParameters(itemID: itemID,
|
||||
senderID: senderID,
|
||||
roomProxy: parameters.roomProxy,
|
||||
userIndicatorController: userIndicatorController)
|
||||
let coordinator = ReportContentCoordinator(parameters: parameters)
|
||||
let coordinator = ReportContentScreenCoordinator(parameters: parameters)
|
||||
coordinator.callback = { [weak self] completion in
|
||||
self?.navigationStackCoordinator.setSheetCoordinator(nil)
|
||||
switch completion {
|
||||
|
@ -16,20 +16,20 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct SessionVerificationCoordinatorParameters {
|
||||
struct SessionVerificationScreenCoordinatorParameters {
|
||||
let sessionVerificationControllerProxy: SessionVerificationControllerProxyProtocol
|
||||
}
|
||||
|
||||
final class SessionVerificationCoordinator: CoordinatorProtocol {
|
||||
private let parameters: SessionVerificationCoordinatorParameters
|
||||
private var viewModel: SessionVerificationViewModelProtocol
|
||||
final class SessionVerificationScreenCoordinator: CoordinatorProtocol {
|
||||
private let parameters: SessionVerificationScreenCoordinatorParameters
|
||||
private var viewModel: SessionVerificationScreenViewModelProtocol
|
||||
|
||||
var callback: (() -> Void)?
|
||||
|
||||
init(parameters: SessionVerificationCoordinatorParameters) {
|
||||
init(parameters: SessionVerificationScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
viewModel = SessionVerificationViewModel(sessionVerificationControllerProxy: parameters.sessionVerificationControllerProxy)
|
||||
viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: parameters.sessionVerificationControllerProxy)
|
||||
}
|
||||
|
||||
// MARK: - Public
|
@ -16,12 +16,12 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum SessionVerificationViewModelAction {
|
||||
enum SessionVerificationScreenViewModelAction {
|
||||
case finished
|
||||
}
|
||||
|
||||
struct SessionVerificationViewState: BindableState {
|
||||
var verificationState: SessionVerificationStateMachine.State = .initial
|
||||
struct SessionVerificationScreenViewState: BindableState {
|
||||
var verificationState: SessionVerificationScreenStateMachine.State = .initial
|
||||
|
||||
var title: String? {
|
||||
switch verificationState {
|
||||
@ -78,7 +78,7 @@ struct SessionVerificationViewState: BindableState {
|
||||
}
|
||||
}
|
||||
|
||||
enum SessionVerificationViewAction {
|
||||
enum SessionVerificationScreenViewAction {
|
||||
case requestVerification
|
||||
case startSasVerification
|
||||
case restart
|
@ -17,7 +17,7 @@
|
||||
import Foundation
|
||||
import SwiftState
|
||||
|
||||
class SessionVerificationStateMachine {
|
||||
class SessionVerificationScreenStateMachine {
|
||||
/// States the SessionVerificationViewModel can find itself in
|
||||
enum State: StateType {
|
||||
/// The initial state, before verification started
|
@ -16,20 +16,20 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
typealias SessionVerificationViewModelType = StateStoreViewModel<SessionVerificationViewState, SessionVerificationViewAction>
|
||||
typealias SessionVerificationViewModelType = StateStoreViewModel<SessionVerificationScreenViewState, SessionVerificationScreenViewAction>
|
||||
|
||||
class SessionVerificationViewModel: SessionVerificationViewModelType, SessionVerificationViewModelProtocol {
|
||||
class SessionVerificationScreenViewModel: SessionVerificationViewModelType, SessionVerificationScreenViewModelProtocol {
|
||||
private let sessionVerificationControllerProxy: SessionVerificationControllerProxyProtocol
|
||||
|
||||
private var stateMachine: SessionVerificationStateMachine
|
||||
private var stateMachine: SessionVerificationScreenStateMachine
|
||||
|
||||
var callback: ((SessionVerificationViewModelAction) -> Void)?
|
||||
var callback: ((SessionVerificationScreenViewModelAction) -> Void)?
|
||||
|
||||
init(sessionVerificationControllerProxy: SessionVerificationControllerProxyProtocol,
|
||||
initialState: SessionVerificationViewState = SessionVerificationViewState()) {
|
||||
initialState: SessionVerificationScreenViewState = SessionVerificationScreenViewState()) {
|
||||
self.sessionVerificationControllerProxy = sessionVerificationControllerProxy
|
||||
|
||||
stateMachine = SessionVerificationStateMachine()
|
||||
stateMachine = SessionVerificationScreenStateMachine()
|
||||
|
||||
super.init(initialViewState: initialState)
|
||||
|
||||
@ -63,7 +63,7 @@ class SessionVerificationViewModel: SessionVerificationViewModelType, SessionVer
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
override func process(viewAction: SessionVerificationViewAction) {
|
||||
override func process(viewAction: SessionVerificationScreenViewAction) {
|
||||
switch viewAction {
|
||||
case .requestVerification:
|
||||
stateMachine.processEvent(.requestVerification)
|
@ -17,7 +17,7 @@
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
protocol SessionVerificationViewModelProtocol {
|
||||
var callback: ((SessionVerificationViewModelAction) -> Void)? { get set }
|
||||
protocol SessionVerificationScreenViewModelProtocol {
|
||||
var callback: ((SessionVerificationScreenViewModelAction) -> Void)? { get set }
|
||||
var context: SessionVerificationViewModelType.Context { get }
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
import SwiftUI
|
||||
|
||||
struct SessionVerificationScreen: View {
|
||||
@ObservedObject var context: SessionVerificationViewModel.Context
|
||||
@ObservedObject var context: SessionVerificationScreenViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
@ -245,9 +245,9 @@ struct SessionVerification_Previews: PreviewProvider {
|
||||
.previewDisplayName("Verified")
|
||||
}
|
||||
|
||||
static func sessionVerificationScreen(state: SessionVerificationStateMachine.State) -> some View {
|
||||
let viewModel = SessionVerificationViewModel(sessionVerificationControllerProxy: SessionVerificationControllerProxyMock.configureMock(),
|
||||
initialState: SessionVerificationViewState(verificationState: state))
|
||||
static func sessionVerificationScreen(state: SessionVerificationScreenStateMachine.State) -> some View {
|
||||
let viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: SessionVerificationControllerProxyMock.configureMock(),
|
||||
initialState: SessionVerificationScreenViewState(verificationState: state))
|
||||
|
||||
return SessionVerificationScreen(context: viewModel.context)
|
||||
}
|
@ -74,13 +74,13 @@ final class SettingsScreenCoordinator: CoordinatorProtocol {
|
||||
}
|
||||
|
||||
private func presentBugReportScreen() {
|
||||
let params = BugReportCoordinatorParameters(bugReportService: parameters.bugReportService,
|
||||
let params = BugReportScreenCoordinatorParameters(bugReportService: parameters.bugReportService,
|
||||
userID: parameters.userSession.userID,
|
||||
deviceID: parameters.userSession.deviceID,
|
||||
userIndicatorController: parameters.userIndicatorController,
|
||||
screenshot: nil,
|
||||
isModallyPresented: false)
|
||||
let coordinator = BugReportCoordinator(parameters: params)
|
||||
let coordinator = BugReportScreenCoordinator(parameters: params)
|
||||
coordinator.completion = { [weak self] result in
|
||||
switch result {
|
||||
case .finish:
|
||||
@ -100,8 +100,8 @@ final class SettingsScreenCoordinator: CoordinatorProtocol {
|
||||
fatalError("The sessionVerificationController should aways be valid at this point")
|
||||
}
|
||||
|
||||
let verificationParameters = SessionVerificationCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController)
|
||||
let coordinator = SessionVerificationCoordinator(parameters: verificationParameters)
|
||||
let verificationParameters = SessionVerificationScreenCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController)
|
||||
let coordinator = SessionVerificationScreenCoordinator(parameters: verificationParameters)
|
||||
|
||||
coordinator.callback = { [weak self] in
|
||||
self?.parameters.navigationStackCoordinator?.setSheetCoordinator(nil)
|
@ -70,8 +70,8 @@ final class StartChatCoordinator: CoordinatorProtocol {
|
||||
// MARK: - Private
|
||||
|
||||
private func presentInviteUsersScreen() {
|
||||
let inviteParameters = InviteUsersCoordinatorParameters(userSession: parameters.userSession, userDiscoveryService: parameters.userDiscoveryService)
|
||||
let coordinator = InviteUsersCoordinator(parameters: inviteParameters)
|
||||
let inviteParameters = InviteUsersScreenCoordinatorParameters(userSession: parameters.userSession, userDiscoveryService: parameters.userDiscoveryService)
|
||||
let coordinator = InviteUsersScreenCoordinator(parameters: inviteParameters)
|
||||
coordinator.actions.sink { [weak self] result in
|
||||
switch result {
|
||||
case .close:
|
||||
|
@ -269,9 +269,9 @@ class UserSessionFlowCoordinator: CoordinatorProtocol {
|
||||
fatalError("The sessionVerificationController should aways be valid at this point")
|
||||
}
|
||||
|
||||
let parameters = SessionVerificationCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController)
|
||||
let parameters = SessionVerificationScreenCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController)
|
||||
|
||||
let coordinator = SessionVerificationCoordinator(parameters: parameters)
|
||||
let coordinator = SessionVerificationScreenCoordinator(parameters: parameters)
|
||||
|
||||
coordinator.callback = { [weak self] in
|
||||
self?.navigationSplitCoordinator.setSheetCoordinator(nil)
|
||||
@ -317,13 +317,13 @@ class UserSessionFlowCoordinator: CoordinatorProtocol {
|
||||
|
||||
let userIndicatorController = UserIndicatorController(rootCoordinator: feedbackNavigationStackCoordinator)
|
||||
|
||||
let parameters = BugReportCoordinatorParameters(bugReportService: bugReportService,
|
||||
let parameters = BugReportScreenCoordinatorParameters(bugReportService: bugReportService,
|
||||
userID: userSession.userID,
|
||||
deviceID: userSession.deviceID,
|
||||
userIndicatorController: userIndicatorController,
|
||||
screenshot: image,
|
||||
isModallyPresented: true)
|
||||
let coordinator = BugReportCoordinator(parameters: parameters)
|
||||
let coordinator = BugReportScreenCoordinator(parameters: parameters)
|
||||
coordinator.completion = { [weak self] _ in
|
||||
self?.navigationSplitCoordinator.setSheetCoordinator(nil)
|
||||
}
|
||||
@ -338,8 +338,8 @@ class UserSessionFlowCoordinator: CoordinatorProtocol {
|
||||
// MARK: Invites list
|
||||
|
||||
private func presentInvitesList(animated: Bool) {
|
||||
let parameters = InvitesCoordinatorParameters(userSession: userSession)
|
||||
let coordinator = InvitesCoordinator(parameters: parameters)
|
||||
let parameters = InvitesScreenCoordinatorParameters(userSession: userSession)
|
||||
let coordinator = InvitesScreenCoordinator(parameters: parameters)
|
||||
|
||||
coordinator.actions
|
||||
.sink { [weak self] action in
|
||||
|
@ -78,7 +78,7 @@ class MockScreen: Identifiable {
|
||||
userIndicatorController: MockUserIndicatorController(),
|
||||
isModallyPresented: false))
|
||||
case .analyticsPrompt:
|
||||
return AnalyticsPromptCoordinator()
|
||||
return AnalyticsPromptScreenCoordinator()
|
||||
case .analyticsSettingsScreen:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = AnalyticsSettingsScreenCoordinator()
|
||||
@ -124,7 +124,7 @@ class MockScreen: Identifiable {
|
||||
return navigationStackCoordinator
|
||||
case .bugReport:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = BugReportCoordinator(parameters: .init(bugReportService: BugReportServiceMock(),
|
||||
let coordinator = BugReportScreenCoordinator(parameters: .init(bugReportService: BugReportServiceMock(),
|
||||
userID: "@mock:client.com",
|
||||
deviceID: nil,
|
||||
userIndicatorController: nil,
|
||||
@ -134,7 +134,7 @@ class MockScreen: Identifiable {
|
||||
return navigationStackCoordinator
|
||||
case .bugReportWithScreenshot:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = BugReportCoordinator(parameters: .init(bugReportService: BugReportServiceMock(),
|
||||
let coordinator = BugReportScreenCoordinator(parameters: .init(bugReportService: BugReportServiceMock(),
|
||||
userID: "@mock:client.com",
|
||||
deviceID: nil,
|
||||
userIndicatorController: nil,
|
||||
@ -255,8 +255,8 @@ class MockScreen: Identifiable {
|
||||
return navigationStackCoordinator
|
||||
case .sessionVerification:
|
||||
var sessionVerificationControllerProxy = SessionVerificationControllerProxyMock.configureMock(requestDelay: .seconds(2))
|
||||
let parameters = SessionVerificationCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationControllerProxy)
|
||||
return SessionVerificationCoordinator(parameters: parameters)
|
||||
let parameters = SessionVerificationScreenCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationControllerProxy)
|
||||
return SessionVerificationScreenCoordinator(parameters: parameters)
|
||||
case .userSessionScreen:
|
||||
let navigationSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: SplashScreenCoordinator())
|
||||
|
||||
@ -279,7 +279,7 @@ class MockScreen: Identifiable {
|
||||
displayName: "Room",
|
||||
isEncrypted: true,
|
||||
members: members))
|
||||
let coordinator = RoomDetailsCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator,
|
||||
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator,
|
||||
roomProxy: roomProxy,
|
||||
mediaProvider: MockMediaProvider()))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
@ -294,7 +294,7 @@ class MockScreen: Identifiable {
|
||||
isEncrypted: true,
|
||||
canonicalAlias: "#mock:room.org",
|
||||
members: members))
|
||||
let coordinator = RoomDetailsCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator,
|
||||
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator,
|
||||
roomProxy: roomProxy,
|
||||
mediaProvider: MockMediaProvider()))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
@ -302,14 +302,14 @@ class MockScreen: Identifiable {
|
||||
case .roomMembersListScreen:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let members: [RoomMemberProxyMock] = [.mockAlice, .mockBob, .mockCharlie]
|
||||
let coordinator = RoomMembersListCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator,
|
||||
let coordinator = RoomMembersListScreenCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator,
|
||||
mediaProvider: MockMediaProvider(),
|
||||
members: members))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
return navigationStackCoordinator
|
||||
case .reportContent:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = ReportContentCoordinator(parameters: .init(itemID: "test",
|
||||
let coordinator = ReportContentScreenCoordinator(parameters: .init(itemID: "test",
|
||||
senderID: RoomMemberProxyMock.mockAlice.userID,
|
||||
roomProxy: RoomProxyMock(with: .init(displayName: "test"))))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
@ -337,17 +337,17 @@ class MockScreen: Identifiable {
|
||||
return navigationStackCoordinator
|
||||
case .roomMemberDetailsAccountOwner:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = RoomMemberDetailsCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockMe, mediaProvider: MockMediaProvider()))
|
||||
let coordinator = RoomMemberDetailsScreenCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockMe, mediaProvider: MockMediaProvider()))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
return navigationStackCoordinator
|
||||
case .roomMemberDetails:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = RoomMemberDetailsCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockAlice, mediaProvider: MockMediaProvider()))
|
||||
let coordinator = RoomMemberDetailsScreenCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockAlice, mediaProvider: MockMediaProvider()))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
return navigationStackCoordinator
|
||||
case .roomMemberDetailsIgnoredUser:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = RoomMemberDetailsCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockIgnored, mediaProvider: MockMediaProvider()))
|
||||
let coordinator = RoomMemberDetailsScreenCoordinator(parameters: .init(roomMemberProxy: RoomMemberProxyMock.mockIgnored, mediaProvider: MockMediaProvider()))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
return navigationStackCoordinator
|
||||
case .roomDetailsScreenDmDetails:
|
||||
@ -359,7 +359,7 @@ class MockScreen: Identifiable {
|
||||
isDirect: true,
|
||||
isEncrypted: true,
|
||||
members: members))
|
||||
let coordinator = RoomDetailsCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator,
|
||||
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(navigationStackCoordinator: navigationStackCoordinator,
|
||||
roomProxy: roomProxy,
|
||||
mediaProvider: MockMediaProvider()))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
@ -373,7 +373,7 @@ class MockScreen: Identifiable {
|
||||
clientProxy.visibleRoomsSummaryProvider = summaryProvider
|
||||
clientProxy.invitesSummaryProvider = summaryProvider
|
||||
|
||||
let coordinator = InvitesCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider())))
|
||||
let coordinator = InvitesScreenCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider())))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
return navigationStackCoordinator
|
||||
case .invites:
|
||||
@ -385,13 +385,13 @@ class MockScreen: Identifiable {
|
||||
clientProxy.visibleRoomsSummaryProvider = summaryProvider
|
||||
clientProxy.invitesSummaryProvider = summaryProvider
|
||||
|
||||
let coordinator = InvitesCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider())))
|
||||
let coordinator = InvitesScreenCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider())))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
return navigationStackCoordinator
|
||||
case .invitesNoInvites:
|
||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||
let clientProxy = MockClientProxy(userID: "@mock:client.com")
|
||||
let coordinator = InvitesCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider())))
|
||||
let coordinator = InvitesScreenCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider())))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
return navigationStackCoordinator
|
||||
case .inviteUsers:
|
||||
@ -400,7 +400,7 @@ class MockScreen: Identifiable {
|
||||
let userDiscoveryMock = UserDiscoveryServiceMock()
|
||||
userDiscoveryMock.fetchSuggestionsReturnValue = .success([.mockAlice, .mockBob, .mockCharlie])
|
||||
userDiscoveryMock.searchProfilesWithReturnValue = .success([])
|
||||
let coordinator = InviteUsersCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: MockClientProxy(userID: "@mock:client.com"), mediaProvider: MockMediaProvider()), userDiscoveryService: userDiscoveryMock))
|
||||
let coordinator = InviteUsersScreenCoordinator(parameters: .init(userSession: MockUserSession(clientProxy: MockClientProxy(userID: "@mock:client.com"), mediaProvider: MockMediaProvider()), userDiscoveryService: userDiscoveryMock))
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
return navigationStackCoordinator
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ class BugReportViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testInitialState() {
|
||||
let viewModel = BugReportViewModel(bugReportService: BugReportServiceMock(),
|
||||
let viewModel = BugReportScreenViewModel(bugReportService: BugReportServiceMock(),
|
||||
userID: "@mock.client.com",
|
||||
deviceID: nil,
|
||||
screenshot: nil,
|
||||
@ -38,7 +38,7 @@ class BugReportViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testClearScreenshot() async throws {
|
||||
let viewModel = BugReportViewModel(bugReportService: BugReportServiceMock(),
|
||||
let viewModel = BugReportScreenViewModel(bugReportService: BugReportServiceMock(),
|
||||
userID: "@mock.client.com",
|
||||
deviceID: nil,
|
||||
screenshot: UIImage.actions,
|
||||
@ -50,7 +50,7 @@ class BugReportViewModelTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testAttachScreenshot() async throws {
|
||||
let viewModel = BugReportViewModel(bugReportService: BugReportServiceMock(),
|
||||
let viewModel = BugReportScreenViewModel(bugReportService: BugReportServiceMock(),
|
||||
userID: "@mock.client.com",
|
||||
deviceID: nil,
|
||||
screenshot: nil, isModallyPresented: false)
|
||||
@ -63,7 +63,7 @@ class BugReportViewModelTests: XCTestCase {
|
||||
func testSendReportWithSuccess() async throws {
|
||||
let mockService = BugReportServiceMock()
|
||||
mockService.submitBugReportProgressListenerReturnValue = SubmitBugReportResponse(reportUrl: "https://test.test")
|
||||
let viewModel = BugReportViewModel(bugReportService: mockService,
|
||||
let viewModel = BugReportScreenViewModel(bugReportService: mockService,
|
||||
userID: "@mock.client.com",
|
||||
deviceID: nil,
|
||||
screenshot: nil, isModallyPresented: false)
|
||||
@ -89,7 +89,7 @@ class BugReportViewModelTests: XCTestCase {
|
||||
mockService.submitBugReportProgressListenerClosure = { _, _ in
|
||||
throw TestError.testError
|
||||
}
|
||||
let viewModel = BugReportViewModel(bugReportService: mockService,
|
||||
let viewModel = BugReportScreenViewModel(bugReportService: mockService,
|
||||
userID: "@mock.client.com",
|
||||
deviceID: nil,
|
||||
screenshot: nil, isModallyPresented: false)
|
||||
|
@ -20,11 +20,11 @@ import XCTest
|
||||
|
||||
@MainActor
|
||||
class FilePreviewScreenViewModelTests: XCTestCase {
|
||||
var viewModel: FilePreviewViewModelProtocol!
|
||||
var context: FilePreviewViewModelType.Context!
|
||||
var viewModel: FilePreviewScreenViewModelProtocol!
|
||||
var context: FilePreviewScreenViewModelType.Context!
|
||||
|
||||
override func setUpWithError() throws {
|
||||
viewModel = FilePreviewViewModel(mediaFile: .unmanaged(url: URL(staticString: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf")))
|
||||
viewModel = FilePreviewScreenViewModel(mediaFile: .unmanaged(url: URL(staticString: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf")))
|
||||
context = viewModel.context
|
||||
}
|
||||
|
||||
|
@ -20,11 +20,11 @@ import XCTest
|
||||
|
||||
@MainActor
|
||||
class InviteUsersScreenViewModelTests: XCTestCase {
|
||||
var viewModel: InviteUsersViewModelProtocol!
|
||||
var viewModel: InviteUsersScreenViewModelProtocol!
|
||||
var clientProxy: MockClientProxy!
|
||||
var userDiscoveryService: UserDiscoveryServiceMock!
|
||||
|
||||
var context: InviteUsersViewModel.Context {
|
||||
var context: InviteUsersScreenViewModel.Context {
|
||||
viewModel.context
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ class InviteUsersScreenViewModelTests: XCTestCase {
|
||||
userDiscoveryService.fetchSuggestionsReturnValue = .success([])
|
||||
userDiscoveryService.searchProfilesWithReturnValue = .success([])
|
||||
let userSession = MockUserSession(clientProxy: clientProxy, mediaProvider: MockMediaProvider())
|
||||
let viewModel = InviteUsersViewModel(userSession: userSession, userDiscoveryService: userDiscoveryService)
|
||||
let viewModel = InviteUsersScreenViewModel(userSession: userSession, userDiscoveryService: userDiscoveryService)
|
||||
viewModel.state.usersSection = .init(type: .suggestions, users: [.mockAlice, .mockBob, .mockCharlie])
|
||||
self.viewModel = viewModel
|
||||
}
|
||||
|
@ -19,11 +19,11 @@ import XCTest
|
||||
|
||||
@MainActor
|
||||
class InvitesViewModelTests: XCTestCase {
|
||||
var viewModel: InvitesViewModelProtocol!
|
||||
var viewModel: InvitesScreenViewModelProtocol!
|
||||
var clientProxy: MockClientProxy!
|
||||
var userSession: MockUserSession!
|
||||
|
||||
var context: InvitesViewModelType.Context {
|
||||
var context: InvitesScreenViewModelType.Context {
|
||||
viewModel.context
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@ class InvitesViewModelTests: XCTestCase {
|
||||
}
|
||||
setupViewModel(roomSummaries: invites)
|
||||
context.send(viewAction: .accept(.init(roomDetails: details, isUnread: false)))
|
||||
let action: InvitesViewModelAction? = await viewModel.actions.values.first()
|
||||
let action: InvitesScreenViewModelAction? = await viewModel.actions.values.first()
|
||||
guard case .openRoom(let roomID) = action else {
|
||||
XCTFail("Wrong view model action")
|
||||
return
|
||||
@ -82,6 +82,6 @@ class InvitesViewModelTests: XCTestCase {
|
||||
clientProxy.visibleRoomsSummaryProvider = summaryProvider
|
||||
}
|
||||
|
||||
viewModel = InvitesViewModel(userSession: userSession)
|
||||
viewModel = InvitesScreenViewModel(userSession: userSession)
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ class ReportContentScreenViewModelTests: XCTestCase {
|
||||
// Given the report content view for some content.
|
||||
let roomProxy = RoomProxyMock(with: .init(displayName: "test"))
|
||||
roomProxy.reportContentReasonReturnValue = .success(())
|
||||
let viewModel = ReportContentViewModel(itemID: itemID,
|
||||
let viewModel = ReportContentScreenViewModel(itemID: itemID,
|
||||
senderID: senderID,
|
||||
roomProxy: roomProxy)
|
||||
|
||||
@ -52,7 +52,7 @@ class ReportContentScreenViewModelTests: XCTestCase {
|
||||
let roomProxy = RoomProxyMock(with: .init(displayName: "test"))
|
||||
roomProxy.reportContentReasonReturnValue = .success(())
|
||||
roomProxy.ignoreUserReturnValue = .success(())
|
||||
let viewModel = ReportContentViewModel(itemID: itemID,
|
||||
let viewModel = ReportContentScreenViewModel(itemID: itemID,
|
||||
senderID: senderID,
|
||||
roomProxy: roomProxy)
|
||||
|
||||
|
@ -20,19 +20,19 @@ import XCTest
|
||||
|
||||
@MainActor
|
||||
class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
var viewModel: RoomDetailsViewModelProtocol!
|
||||
var viewModel: RoomDetailsScreenViewModelProtocol!
|
||||
var roomProxyMock: RoomProxyMock!
|
||||
var context: RoomDetailsViewModelType.Context { viewModel.context }
|
||||
var context: RoomDetailsScreenViewModelType.Context { viewModel.context }
|
||||
|
||||
override func setUp() {
|
||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test"))
|
||||
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
}
|
||||
|
||||
func testLeaveRoomTappedWhenPublic() async {
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
context.send(viewAction: .processTapLeave)
|
||||
XCTAssertEqual(context.leaveRoomAlertItem?.state, .public)
|
||||
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertSubtitle)
|
||||
@ -41,7 +41,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
func testLeaveRoomTappedWhenRoomNotPublic() async {
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: mockedMembers))
|
||||
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
context.send(viewAction: .processTapLeave)
|
||||
XCTAssertEqual(context.leaveRoomAlertItem?.state, .private)
|
||||
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertPrivateSubtitle)
|
||||
@ -84,19 +84,19 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
let recipient = RoomMemberProxyMock.mockDan
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||
}
|
||||
|
||||
func testIgnoreSuccess() async throws {
|
||||
let recipient = RoomMemberProxyMock.mockDan
|
||||
recipient.ignoreUserClosure = {
|
||||
try? await Task.sleep(for: .milliseconds(10))
|
||||
try? await Task.sleep(for: .milliseconds(100))
|
||||
return .success(())
|
||||
}
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||
|
||||
context.send(viewAction: .ignoreConfirmed)
|
||||
@ -116,7 +116,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
}
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||
|
||||
context.send(viewAction: .ignoreConfirmed)
|
||||
@ -137,7 +137,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
}
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||
|
||||
context.send(viewAction: .unignoreConfirmed)
|
||||
@ -152,12 +152,12 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||
func testUnignoreFailure() async throws {
|
||||
let recipient = RoomMemberProxyMock.mockIgnored
|
||||
recipient.unignoreUserClosure = {
|
||||
try? await Task.sleep(for: .milliseconds(10))
|
||||
try? await Task.sleep(for: .milliseconds(100))
|
||||
return .failure(.unignoreUserFailed)
|
||||
}
|
||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||
viewModel = RoomDetailsViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
|
||||
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
|
||||
|
||||
context.send(viewAction: .unignoreConfirmed)
|
||||
|
@ -20,13 +20,13 @@ import XCTest
|
||||
|
||||
@MainActor
|
||||
class RoomMemberDetailsViewModelTests: XCTestCase {
|
||||
var viewModel: RoomMemberDetailsViewModelProtocol!
|
||||
var viewModel: RoomMemberDetailsScreenViewModelProtocol!
|
||||
var roomMemberProxyMock: RoomMemberProxyMock!
|
||||
var context: RoomMemberDetailsViewModelType.Context { viewModel.context }
|
||||
var context: RoomMemberDetailsScreenViewModelType.Context { viewModel.context }
|
||||
|
||||
func testInitialState() async {
|
||||
roomMemberProxyMock = RoomMemberProxyMock.mockAlice
|
||||
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
|
||||
XCTAssertEqual(context.viewState.details, RoomMemberDetails(withProxy: roomMemberProxyMock))
|
||||
XCTAssertNil(context.ignoreUserAlert)
|
||||
@ -36,10 +36,10 @@ class RoomMemberDetailsViewModelTests: XCTestCase {
|
||||
func testIgnoreSuccess() async throws {
|
||||
roomMemberProxyMock = RoomMemberProxyMock.mockAlice
|
||||
roomMemberProxyMock.ignoreUserClosure = {
|
||||
try? await Task.sleep(for: .milliseconds(10))
|
||||
try? await Task.sleep(for: .milliseconds(100))
|
||||
return .success(())
|
||||
}
|
||||
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
|
||||
context.send(viewAction: .showIgnoreAlert)
|
||||
XCTAssertEqual(context.ignoreUserAlert, .init(action: .ignore))
|
||||
@ -56,10 +56,10 @@ class RoomMemberDetailsViewModelTests: XCTestCase {
|
||||
func testIgnoreFailure() async throws {
|
||||
roomMemberProxyMock = RoomMemberProxyMock.mockAlice
|
||||
roomMemberProxyMock.ignoreUserClosure = {
|
||||
try? await Task.sleep(for: .milliseconds(10))
|
||||
try? await Task.sleep(for: .milliseconds(100))
|
||||
return .failure(.ignoreUserFailed)
|
||||
}
|
||||
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
context.send(viewAction: .showIgnoreAlert)
|
||||
XCTAssertEqual(context.ignoreUserAlert, .init(action: .ignore))
|
||||
|
||||
@ -76,10 +76,10 @@ class RoomMemberDetailsViewModelTests: XCTestCase {
|
||||
func testUnignoreSuccess() async throws {
|
||||
roomMemberProxyMock = RoomMemberProxyMock.mockIgnored
|
||||
roomMemberProxyMock.unignoreUserClosure = {
|
||||
try? await Task.sleep(for: .milliseconds(10))
|
||||
try? await Task.sleep(for: .milliseconds(100))
|
||||
return .success(())
|
||||
}
|
||||
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
|
||||
context.send(viewAction: .showUnignoreAlert)
|
||||
XCTAssertEqual(context.ignoreUserAlert, .init(action: .unignore))
|
||||
@ -96,10 +96,10 @@ class RoomMemberDetailsViewModelTests: XCTestCase {
|
||||
func testUnignoreFailure() async throws {
|
||||
roomMemberProxyMock = RoomMemberProxyMock.mockIgnored
|
||||
roomMemberProxyMock.unignoreUserClosure = {
|
||||
try? await Task.sleep(for: .milliseconds(10))
|
||||
try? await Task.sleep(for: .milliseconds(100))
|
||||
return .failure(.unignoreUserFailed)
|
||||
}
|
||||
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
|
||||
context.send(viewAction: .showUnignoreAlert)
|
||||
XCTAssertEqual(context.ignoreUserAlert, .init(action: .unignore))
|
||||
@ -116,7 +116,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase {
|
||||
|
||||
func testInitialStateAccountOwner() async {
|
||||
roomMemberProxyMock = RoomMemberProxyMock.mockMe
|
||||
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
|
||||
XCTAssertEqual(context.viewState.details, RoomMemberDetails(withProxy: roomMemberProxyMock))
|
||||
XCTAssertNil(context.ignoreUserAlert)
|
||||
@ -125,7 +125,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase {
|
||||
|
||||
func testInitialStateIgnoredUser() async {
|
||||
roomMemberProxyMock = RoomMemberProxyMock.mockIgnored
|
||||
viewModel = RoomMemberDetailsViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
viewModel = RoomMemberDetailsScreenViewModel(roomMemberProxy: roomMemberProxyMock, mediaProvider: MockMediaProvider())
|
||||
|
||||
XCTAssertEqual(context.viewState.details, RoomMemberDetails(withProxy: roomMemberProxyMock))
|
||||
XCTAssertNil(context.ignoreUserAlert)
|
||||
|
@ -20,11 +20,11 @@ import XCTest
|
||||
|
||||
@MainActor
|
||||
class SessionVerificationStateMachineTests: XCTestCase {
|
||||
private var stateMachine: SessionVerificationStateMachine!
|
||||
private var stateMachine: SessionVerificationScreenStateMachine!
|
||||
|
||||
@MainActor
|
||||
override func setUpWithError() throws {
|
||||
stateMachine = SessionVerificationStateMachine()
|
||||
stateMachine = SessionVerificationScreenStateMachine()
|
||||
}
|
||||
|
||||
func testAcceptChallenge() {
|
||||
|
@ -21,13 +21,13 @@ import XCTest
|
||||
|
||||
@MainActor
|
||||
class SessionVerificationViewModelTests: XCTestCase {
|
||||
var viewModel: SessionVerificationViewModelProtocol!
|
||||
var viewModel: SessionVerificationScreenViewModelProtocol!
|
||||
var context: SessionVerificationViewModelType.Context!
|
||||
var sessionVerificationController: SessionVerificationControllerProxyMock!
|
||||
|
||||
override func setUpWithError() throws {
|
||||
sessionVerificationController = SessionVerificationControllerProxyMock.configureMock()
|
||||
viewModel = SessionVerificationViewModel(sessionVerificationControllerProxy: sessionVerificationController)
|
||||
viewModel = SessionVerificationScreenViewModel(sessionVerificationControllerProxy: sessionVerificationController)
|
||||
context = viewModel.context
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user