mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
implemented the presentation of transfer ownership screen from the space flow and update UI and preview tests
This commit is contained in:
@@ -304,6 +304,7 @@
|
||||
"common_server_url" = "Server URL";
|
||||
"common_settings" = "Settings";
|
||||
"common_share_space" = "Share space";
|
||||
"common_shared_history" = "New members see history";
|
||||
"common_shared_location" = "Shared location";
|
||||
"common_shared_space" = "Shared space";
|
||||
"common_signing_out" = "Signing out";
|
||||
@@ -611,6 +612,7 @@
|
||||
"screen_leave_space_last_admin_info" = "%1$@ (Admin)";
|
||||
"screen_leave_space_subtitle" = "Select the rooms you’d like to leave which you're not the only administrator for:";
|
||||
"screen_leave_space_subtitle_last_admin" = "You need to assign another admin for this space before you can leave.";
|
||||
"screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave.";
|
||||
"screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:";
|
||||
"screen_leave_space_title" = "Leave %1$@?";
|
||||
"screen_leave_space_title_last_admin" = "You are the only admin for %1$@";
|
||||
|
||||
@@ -304,6 +304,7 @@
|
||||
"common_server_url" = "Server URL";
|
||||
"common_settings" = "Settings";
|
||||
"common_share_space" = "Share space";
|
||||
"common_shared_history" = "New members see history";
|
||||
"common_shared_location" = "Shared location";
|
||||
"common_shared_space" = "Shared space";
|
||||
"common_signing_out" = "Signing out";
|
||||
@@ -611,6 +612,7 @@
|
||||
"screen_leave_space_last_admin_info" = "%1$@ (Admin)";
|
||||
"screen_leave_space_subtitle" = "Select the rooms you’d like to leave which you're not the only administrator for:";
|
||||
"screen_leave_space_subtitle_last_admin" = "You need to assign another admin for this space before you can leave.";
|
||||
"screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave.";
|
||||
"screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:";
|
||||
"screen_leave_space_title" = "Leave %1$@?";
|
||||
"screen_leave_space_title_last_admin" = "You are the only admin for %1$@";
|
||||
|
||||
@@ -349,9 +349,8 @@ class SpaceFlowCoordinator: FlowCoordinatorProtocol {
|
||||
stateMachine.tryEvent(.addRooms)
|
||||
case .displayCreateChildRoomFlow(let space):
|
||||
stateMachine.tryEvent(.startCreateChildRoomFlow, userInfo: space)
|
||||
case .displayTransferOwnership(roomProxy: let roomProxy):
|
||||
// TODO: Implement
|
||||
break
|
||||
case .displayTransferOwnership(let roomProxy):
|
||||
presentTransferOwnershipScreen(roomProxy: roomProxy)
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
@@ -442,6 +441,27 @@ class SpaceFlowCoordinator: FlowCoordinatorProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
private func presentTransferOwnershipScreen(roomProxy: JoinedRoomProxyProtocol) {
|
||||
let parameters = RoomChangeRolesScreenCoordinatorParameters(mode: .owner,
|
||||
roomProxy: roomProxy,
|
||||
mediaProvider: flowParameters.userSession.mediaProvider,
|
||||
userIndicatorController: flowParameters.userIndicatorController,
|
||||
analytics: flowParameters.analytics)
|
||||
let stackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = RoomChangeRolesScreenCoordinator(parameters: parameters)
|
||||
coordinator.actionsPublisher.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
switch action {
|
||||
case .complete:
|
||||
navigationStackCoordinator.setSheetCoordinator(nil)
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
stackCoordinator.setRootCoordinator(coordinator)
|
||||
navigationStackCoordinator.setSheetCoordinator(stackCoordinator)
|
||||
}
|
||||
|
||||
// MARK: - Other flows
|
||||
|
||||
private func startChildFlow(with entryPoint: SpaceFlowCoordinatorEntryPoint) {
|
||||
|
||||
@@ -222,10 +222,11 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
case .leftRoom:
|
||||
leftRoom = true
|
||||
navigationStackCoordinator.pop()
|
||||
case .presentRecipientDetails, .presentNotificationSettingsScreen, .transferOwnership,
|
||||
case .transferOwnership:
|
||||
presentTransferOwnershipScreen()
|
||||
case .presentRecipientDetails, .presentNotificationSettingsScreen, .presentReportRoomScreen,
|
||||
.presentInviteUsersScreen, .presentPollsHistory, .presentCall,
|
||||
.presentPinnedEventsTimeline, .presentMediaEventsTimeline, .presentKnockingRequestsListScreen,
|
||||
.presentReportRoomScreen:
|
||||
.presentPinnedEventsTimeline, .presentMediaEventsTimeline, .presentKnockingRequestsListScreen:
|
||||
fatalError("Not handled in the space context")
|
||||
}
|
||||
}
|
||||
@@ -326,6 +327,27 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
private func presentTransferOwnershipScreen() {
|
||||
let parameters = RoomChangeRolesScreenCoordinatorParameters(mode: .owner,
|
||||
roomProxy: roomProxy,
|
||||
mediaProvider: flowParameters.userSession.mediaProvider,
|
||||
userIndicatorController: flowParameters.userIndicatorController,
|
||||
analytics: flowParameters.analytics)
|
||||
let stackCoordinator = NavigationStackCoordinator()
|
||||
let coordinator = RoomChangeRolesScreenCoordinator(parameters: parameters)
|
||||
coordinator.actionsPublisher.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
switch action {
|
||||
case .complete:
|
||||
navigationStackCoordinator.setSheetCoordinator(nil)
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
stackCoordinator.setRootCoordinator(coordinator)
|
||||
navigationStackCoordinator.setSheetCoordinator(stackCoordinator, animated: true)
|
||||
}
|
||||
|
||||
// MARK: - Other flows
|
||||
|
||||
private func startRolesAndPermissionsFlow() {
|
||||
|
||||
@@ -690,6 +690,8 @@ internal enum L10n {
|
||||
internal static var commonSettings: String { return L10n.tr("Localizable", "common_settings") }
|
||||
/// Share space
|
||||
internal static var commonShareSpace: String { return L10n.tr("Localizable", "common_share_space") }
|
||||
/// New members see history
|
||||
internal static var commonSharedHistory: String { return L10n.tr("Localizable", "common_shared_history") }
|
||||
/// Shared location
|
||||
internal static var commonSharedLocation: String { return L10n.tr("Localizable", "common_shared_location") }
|
||||
/// Shared space
|
||||
@@ -1940,6 +1942,10 @@ internal enum L10n {
|
||||
internal static var screenLeaveSpaceSubtitle: String { return L10n.tr("Localizable", "screen_leave_space_subtitle") }
|
||||
/// You need to assign another admin for this space before you can leave.
|
||||
internal static var screenLeaveSpaceSubtitleLastAdmin: String { return L10n.tr("Localizable", "screen_leave_space_subtitle_last_admin") }
|
||||
/// You are the only owner of %1$@. You need to transfer ownership to someone else before you leave.
|
||||
internal static func screenLeaveSpaceSubtitleLastOwner(_ p1: Any) -> String {
|
||||
return L10n.tr("Localizable", "screen_leave_space_subtitle_last_owner", String(describing: p1))
|
||||
}
|
||||
/// You will not be removed from the following room(s) because you're the only administrator:
|
||||
internal static var screenLeaveSpaceSubtitleOnlyLastAdmin: String { return L10n.tr("Localizable", "screen_leave_space_subtitle_only_last_admin") }
|
||||
/// Leave %1$@?
|
||||
|
||||
@@ -185,11 +185,15 @@ class RoomChangeRolesScreenViewModel: RoomChangeRolesScreenViewModelType, RoomCh
|
||||
}
|
||||
|
||||
private func confirmDiscardChanges() {
|
||||
state.bindings.alertInfo = AlertInfo(id: .discardChanges,
|
||||
title: L10n.screenRoomChangeRoleUnsavedChangesTitle,
|
||||
message: L10n.screenRoomChangeRoleUnsavedChangesDescription,
|
||||
primaryButton: .init(title: L10n.actionSave) { Task { await self.save() } },
|
||||
secondaryButton: .init(title: L10n.actionDiscard, role: .cancel) { self.actionsSubject.send(.complete) })
|
||||
if state.hasChanges {
|
||||
state.bindings.alertInfo = AlertInfo(id: .discardChanges,
|
||||
title: L10n.screenRoomChangeRoleUnsavedChangesTitle,
|
||||
message: L10n.screenRoomChangeRoleUnsavedChangesDescription,
|
||||
primaryButton: .init(title: L10n.actionSave) { Task { await self.save() } },
|
||||
secondaryButton: .init(title: L10n.actionDiscard, role: .cancel) { self.actionsSubject.send(.complete) })
|
||||
} else {
|
||||
actionsSubject.send(.complete)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Loading indicator
|
||||
|
||||
@@ -22,7 +22,8 @@ struct LeaveSpaceViewState: BindableState {
|
||||
|
||||
var title: String {
|
||||
switch leaveHandle.mode {
|
||||
case .spaceNeedsNewOwner: L10n.screenLeaveSpaceTitleLastAdmin(spaceName)
|
||||
case .spaceNeedsNewOwner(let useTransferOwnershipFlow):
|
||||
useTransferOwnershipFlow ? L10n.leaveRoomAlertSelectNewOwnerTitle : L10n.screenLeaveSpaceTitleLastAdmin(spaceName)
|
||||
default: L10n.screenLeaveSpaceTitle(spaceName)
|
||||
}
|
||||
}
|
||||
@@ -32,7 +33,8 @@ struct LeaveSpaceViewState: BindableState {
|
||||
case .manyRooms: L10n.screenLeaveSpaceSubtitle
|
||||
case .roomsNeedNewOwner: L10n.screenLeaveSpaceSubtitleOnlyLastAdmin
|
||||
case .noRooms: nil
|
||||
case .spaceNeedsNewOwner: L10n.screenLeaveSpaceSubtitleLastAdmin
|
||||
case .spaceNeedsNewOwner(let useTransferOwnershipFlow):
|
||||
useTransferOwnershipFlow ? L10n.screenLeaveSpaceSubtitleLastOwner(spaceName) : L10n.screenLeaveSpaceSubtitleLastAdmin
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,8 +20,7 @@ struct LeaveSpaceRoomDetailsCell: View {
|
||||
|
||||
private var subtitle: String? {
|
||||
guard !room.spaceServiceRoom.isSpace else { return nil }
|
||||
let memberCount = L10n.commonMemberCount(room.spaceServiceRoom.joinedMembersCount)
|
||||
return !room.canLeave ? L10n.screenLeaveSpaceLastAdminInfo(memberCount) : memberCount
|
||||
return L10n.commonMemberCount(room.spaceServiceRoom.joinedMembersCount)
|
||||
}
|
||||
|
||||
var visibilityIcon: KeyPath<CompoundIcons, Image>? {
|
||||
|
||||
@@ -94,10 +94,8 @@ struct LeaveSpaceView: View {
|
||||
case .spaceNeedsNewOwner(let useTransferOwnershipFlow):
|
||||
if context.viewState.canEditRolesAndPermissions {
|
||||
if useTransferOwnershipFlow {
|
||||
Button(role: .destructive) {
|
||||
Button(L10n.leaveRoomAlertSelectNewOwnerAction, role: .destructive) {
|
||||
context.send(viewAction: .transferOwnership)
|
||||
} label: {
|
||||
Label(L10n.actionGoToRolesAndPermissions, icon: \.settings)
|
||||
}
|
||||
.buttonStyle(.compound(.primary))
|
||||
} else {
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5851e5b7b8556d5a72e4d5d7557957547a1a7f2d9ec80f324522e67599365362
|
||||
size 111868
|
||||
oid sha256:4dddd4326b36afa32d0953d39ae7013bfaed915f9913d74187da07033e308149
|
||||
size 108296
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a2a32f990080fa0445e3cc0e83b8ea109dd3101f4a12fe804b3d5a325df516ad
|
||||
size 126584
|
||||
oid sha256:26e7031ba08576dacddff52a0d0290348c8fe90dbf8008d63df1c9f66046830e
|
||||
size 120214
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3b4c93ea3a20e890eee10c47d100a77cdf0f6ead386055e0e11a59c2287742b1
|
||||
size 66152
|
||||
oid sha256:2cca1960c43b392f50d3cfc2d63ce13fddf6f46e9ff0d3c3846eaaf0e76b9e93
|
||||
size 63396
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8187cd536e01a3a940c683fd1d9e8636ff0cb8f973f8f5a2ce0e0e1d83dd32e6
|
||||
size 75159
|
||||
oid sha256:97cbd734fb0a160fe233f7e84e978e939b30131087af4a66d809a61130dd3850
|
||||
size 72133
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:312afadcc532592b73ea185c60665489d5bc0ad22b49f7d445c31c900feaee78
|
||||
size 99431
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:09e0e50995de534261096ec3b9d1370f65c5dd1b48fa30e6fe4093fa5aedc211
|
||||
size 113438
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7dc02dfee863f883145cd843cd6a0d5d7168b8d00fddcbea6c1aa22456500e7e
|
||||
size 59405
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fc8531cd3bfd4550fe8cc5b7b9ec61a7cec5ff909efcaec484de870f1044e0b2
|
||||
size 79601
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4ff955a433b413f91ce08fdc54b9097f59bdd28fdbd3af9dd0374564eb1beb24
|
||||
size 144012
|
||||
oid sha256:c9ad306e0be48b82c3d289c1900afdf79b2efcf0403f3e86cbb09013e7705a16
|
||||
size 143185
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:910ba40be143efd2bcf7043918063ee13c31fb5d9d04db2691f13bc9d4cced90
|
||||
size 171504
|
||||
oid sha256:153e608bd51747e151a6901bfc4214ef355d4f2b422e28c16e888948306c6c70
|
||||
size 166095
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6ee340c15db21c874e45553294f98fea342502bf08b28b286c337ddc2d243a6b
|
||||
size 94684
|
||||
oid sha256:7c1946343246044027e21fc27989935ee7fa80768f76542fc8a56c9eca4db792
|
||||
size 93713
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5244fdcad023960dd896206cb51196f310b34251321e1cf6e17d9348c6fdf622
|
||||
size 123733
|
||||
oid sha256:6ed5e1592778ff49f919299c9f7fc2e530827890310f9af77133acdc12633a9f
|
||||
size 121020
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:db8bbcaf5378c1cd76aca715b87abf154aaac80c36d9a0826c220c1b8e277169
|
||||
size 220752
|
||||
oid sha256:8154a4c0048bf73ec546fb3e0f00c34b9326e0ef59bf302779f34a24fd7edaff
|
||||
size 218929
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9215dc41e16b7e90b2dacc3ad6a3c02becfae8165f563718891d9dc549bb8f8d
|
||||
size 234793
|
||||
oid sha256:2a3e28f05bebb9af7c80b3478936f78fbdbde18e27ba75768de69077440b9aaa
|
||||
size 232076
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8ddedca04fbf6e9030451a3c6ba0025b1c6ff9577c6f9578d3d9d307f39bcfc6
|
||||
size 158365
|
||||
oid sha256:345d4c135154fa0f883d6ee02341d71ea91c2531c8b2cdbaf9debc2026ccc148
|
||||
size 158494
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:71cd85f5ac299594f430982b5fba3ef988c161307a4a41472f23f33f2fedc464
|
||||
size 168321
|
||||
oid sha256:34ff2823b4059bac4c869ec7b7bd004622c8fae025a82bb7582902592b59a436
|
||||
size 169124
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f426d30ad4465b4e783d96203baa6bb6fc971fc97eb143fb2ef3d57b47d80394
|
||||
size 217524
|
||||
oid sha256:25ebe66044af44ea220c48a42670f40305b2bdd6385886fd2c9b3f50d78456bf
|
||||
size 215589
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:16693391ca8ca7cd3836f23c94f71aa77651083bb18291690b10415e0987334f
|
||||
size 229537
|
||||
oid sha256:2057e5c4703ab3dca54aa460c59870534763e0d981e57777bc5de7bad29189a6
|
||||
size 227402
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:074bc6caf8e32b4f14577bd628d97db3669cc7c01af6a738364d1921a5092e65
|
||||
size 165177
|
||||
oid sha256:4a18a8dc74c266f9889c0c2229528296a0eab4e01e6f75997391156389f7d5a7
|
||||
size 165317
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c767bfe53bdd85af6eeb922b80bc917cbda754b39293dac23e1358767039f1b8
|
||||
size 229301
|
||||
oid sha256:7d3ccf933292d7b65b4503e26dca4cd2bd15dc6acb291eeccff7331bb8e47cf5
|
||||
size 227686
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2f905d871856bd90614acc05401cfe88a962d2d26055ffa6fc6b15a6cac450fe
|
||||
size 246657
|
||||
oid sha256:b00c5a311df4499b66745667e37a558b8ff43a007688af0eef4dcea385c6774c
|
||||
size 244268
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f4ddcfc17e81a78304aebd44eb929853de8f8ce17e7c96a245eb0b4d3303494a
|
||||
size 177153
|
||||
oid sha256:4456db32942bb0b3b51b057f8a944eb766436df93b5725ff0c9d676726d5e794
|
||||
size 177395
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:802721c039422e2cca42c4808131f068e0aa5688879b403690024c86b641915e
|
||||
size 209405
|
||||
oid sha256:8884d96a7f9fc5a4a4537dd823530e9c0c573176a475eea6bc92b633732917b7
|
||||
size 207781
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c899b3472c5fdb9377da2e7b1dad616f327964642e88de0834dbdd6114501439
|
||||
size 217934
|
||||
oid sha256:100878418a7e4797203eddd69b20b0fc305e0bb83103e141683fc2fad1a5ef6c
|
||||
size 216298
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c9986f6d03a60a550cfa7d59e10ff44f9478562f9bb2f229a5f715a39550b0ac
|
||||
size 159565
|
||||
oid sha256:f86a0c3a9b17ed5fee2540a9f66d69d4718067612a1c5fcf378cd676415aeced
|
||||
size 159817
|
||||
|
||||
Reference in New Issue
Block a user