mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 19:44:05 +00:00
allow copying blocked user id
This commit is contained in:
@@ -21,6 +21,7 @@ struct BlockedUsersScreenViewStateBindings {
|
|||||||
|
|
||||||
enum BlockedUsersScreenViewAction {
|
enum BlockedUsersScreenViewAction {
|
||||||
case unblockUser(UserProfile)
|
case unblockUser(UserProfile)
|
||||||
|
case copyUserID(UserProfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
enum BlockedUsersScreenViewStateAlertType: Hashable {
|
enum BlockedUsersScreenViewStateAlertType: Hashable {
|
||||||
|
|||||||
@@ -51,6 +51,12 @@ class BlockedUsersScreenViewModel: BlockedUsersScreenViewModelType, BlockedUsers
|
|||||||
self?.unblockUser(user)
|
self?.unblockUser(user)
|
||||||
},
|
},
|
||||||
secondaryButton: .init(title: L10n.actionCancel, role: .cancel, action: nil))
|
secondaryButton: .init(title: L10n.actionCancel, role: .cancel, action: nil))
|
||||||
|
case .copyUserID(let user):
|
||||||
|
UIPasteboard.general.string = user.id
|
||||||
|
userIndicatorController.submitIndicator(UserIndicator(id: Self.copiedIndicatorIdentifier,
|
||||||
|
type: .toast,
|
||||||
|
title: L10n.commonCopiedToClipboard,
|
||||||
|
icon: \.check))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,6 +114,7 @@ class BlockedUsersScreenViewModel: BlockedUsersScreenViewModelType, BlockedUsers
|
|||||||
// MARK: Loading indicator
|
// MARK: Loading indicator
|
||||||
|
|
||||||
private static let loadingIndicatorIdentifier = "\(BlockedUsersScreenViewModel.self)-Loading"
|
private static let loadingIndicatorIdentifier = "\(BlockedUsersScreenViewModel.self)-Loading"
|
||||||
|
private static let copiedIndicatorIdentifier = "\(BlockedUsersScreenViewModel.self)-Copied"
|
||||||
|
|
||||||
private func showLoadingIndicator() {
|
private func showLoadingIndicator() {
|
||||||
userIndicatorController.submitIndicator(UserIndicator(id: Self.loadingIndicatorIdentifier,
|
userIndicatorController.submitIndicator(UserIndicator(id: Self.loadingIndicatorIdentifier,
|
||||||
|
|||||||
@@ -38,6 +38,13 @@ struct BlockedUsersScreen: View {
|
|||||||
icon: avatar(for: user)),
|
icon: avatar(for: user)),
|
||||||
details: .isWaiting(context.viewState.processingUserID == user.id),
|
details: .isWaiting(context.viewState.processingUserID == user.id),
|
||||||
kind: .button { context.send(viewAction: .unblockUser(user)) })
|
kind: .button { context.send(viewAction: .unblockUser(user)) })
|
||||||
|
.contextMenu {
|
||||||
|
Button {
|
||||||
|
context.send(viewAction: .copyUserID(user))
|
||||||
|
} label: {
|
||||||
|
Label(L10n.actionCopy, icon: \.copy)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import Combine
|
|||||||
@testable import ElementX
|
@testable import ElementX
|
||||||
import Foundation
|
import Foundation
|
||||||
import Testing
|
import Testing
|
||||||
|
import UIKit
|
||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
struct BlockedUsersScreenViewModelTests {
|
struct BlockedUsersScreenViewModelTests {
|
||||||
@@ -42,4 +43,22 @@ struct BlockedUsersScreenViewModelTests {
|
|||||||
#expect(!viewModel.context.viewState.blockedUsers.isEmpty)
|
#expect(!viewModel.context.viewState.blockedUsers.isEmpty)
|
||||||
#expect(clientProxy.profileForCalled)
|
#expect(clientProxy.profileForCalled)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func copyUserID() throws {
|
||||||
|
let clientProxy = ClientProxyMock(.init(userID: RoomMemberProxyMock.mockMe.userID))
|
||||||
|
let userIndicatorController = UserIndicatorControllerMock()
|
||||||
|
|
||||||
|
let viewModel = BlockedUsersScreenViewModel(hideProfiles: true,
|
||||||
|
userSession: UserSessionMock(.init(clientProxy: clientProxy)),
|
||||||
|
userIndicatorController: userIndicatorController)
|
||||||
|
|
||||||
|
let user = try #require(viewModel.context.viewState.blockedUsers.first)
|
||||||
|
UIPasteboard.general.string = ""
|
||||||
|
|
||||||
|
viewModel.context.send(viewAction: .copyUserID(user))
|
||||||
|
|
||||||
|
#expect(UIPasteboard.general.string == user.id)
|
||||||
|
#expect(userIndicatorController.submitIndicatorDelayReceivedArguments?.indicator.title == L10n.commonCopiedToClipboard)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user