From 5078f571ed3147001ace98d4c4db509466827c5c Mon Sep 17 00:00:00 2001 From: Doug <6060466+pixlwave@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:21:48 +0100 Subject: [PATCH] Push the deactivate account screen. (#3297) --- .../FlowCoordinators/SettingsFlowCoordinator.swift | 7 +------ .../DeactivateAccountScreenCoordinator.swift | 3 --- .../DeactivateAccountScreenModels.swift | 2 -- .../DeactivateAccountScreenViewModel.swift | 2 -- .../View/DeactivateAccountScreen.swift | 9 --------- .../Settings/SettingsScreen/View/SettingsScreen.swift | 3 ++- .../test_deactivateAccountScreen-iPad-en-GB.1.png | 4 ++-- .../test_deactivateAccountScreen-iPad-pseudo.1.png | 4 ++-- .../test_deactivateAccountScreen-iPhone-15-en-GB.1.png | 4 ++-- ...test_deactivateAccountScreen-iPhone-15-pseudo.1.png | 4 ++-- .../DeactivateAccountScreenViewModelTests.swift | 10 ---------- 11 files changed, 11 insertions(+), 41 deletions(-) diff --git a/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift index 109cc75f65..e78d5ab59f 100644 --- a/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift @@ -242,8 +242,6 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol { } private func presentDeactivateAccount() { - let navigationCoordinator = NavigationStackCoordinator() - let parameters = DeactivateAccountScreenCoordinatorParameters(clientProxy: parameters.userSession.clientProxy, userIndicatorController: parameters.userIndicatorController) let coordinator = DeactivateAccountScreenCoordinator(parameters: parameters) @@ -253,16 +251,13 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol { guard let self else { return } switch action { - case .cancel: - navigationStackCoordinator.setSheetCoordinator(nil) case .accountDeactivated: actionsSubject.send(.forceLogout) } } .store(in: &cancellables) - navigationCoordinator.setRootCoordinator(coordinator) - navigationStackCoordinator.setSheetCoordinator(navigationCoordinator) + navigationStackCoordinator.push(coordinator) } // MARK: OIDC Account Management diff --git a/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenCoordinator.swift b/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenCoordinator.swift index a6ff98fe13..138700a30b 100644 --- a/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenCoordinator.swift +++ b/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenCoordinator.swift @@ -14,7 +14,6 @@ struct DeactivateAccountScreenCoordinatorParameters { } enum DeactivateAccountScreenCoordinatorAction { - case cancel case accountDeactivated } @@ -42,8 +41,6 @@ final class DeactivateAccountScreenCoordinator: CoordinatorProtocol { guard let self else { return } switch action { - case .cancel: - actionsSubject.send(.cancel) case .accountDeactivated: actionsSubject.send(.accountDeactivated) } diff --git a/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenModels.swift b/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenModels.swift index f3fb7c0885..992740fa9a 100644 --- a/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenModels.swift +++ b/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenModels.swift @@ -8,7 +8,6 @@ import Foundation enum DeactivateAccountScreenViewModelAction { - case cancel case accountDeactivated } @@ -50,5 +49,4 @@ enum DeactivateAccountScreenAlert { enum DeactivateAccountScreenViewAction { case deactivate - case cancel } diff --git a/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenViewModel.swift b/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenViewModel.swift index 36b29a0278..09e5ee076e 100644 --- a/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenViewModel.swift +++ b/ElementX/Sources/Screens/DeactivateAccountScreen/DeactivateAccountScreenViewModel.swift @@ -30,8 +30,6 @@ class DeactivateAccountScreenViewModel: DeactivateAccountScreenViewModelType, De MXLog.info("View model: received view action: \(viewAction)") switch viewAction { - case .cancel: - actionsSubject.send(.cancel) case .deactivate: showDeactivationConfirmation() } diff --git a/ElementX/Sources/Screens/DeactivateAccountScreen/View/DeactivateAccountScreen.swift b/ElementX/Sources/Screens/DeactivateAccountScreen/View/DeactivateAccountScreen.swift index c26c1b52f4..cb894b25c2 100644 --- a/ElementX/Sources/Screens/DeactivateAccountScreen/View/DeactivateAccountScreen.swift +++ b/ElementX/Sources/Screens/DeactivateAccountScreen/View/DeactivateAccountScreen.swift @@ -29,7 +29,6 @@ struct DeactivateAccountScreen: View { } .navigationTitle(L10n.screenDeactivateAccountTitle) .navigationBarTitleDisplayMode(.inline) - .toolbar { toolbar } .alert(item: $context.alertInfo) } @@ -71,14 +70,6 @@ struct DeactivateAccountScreen: View { .compoundListSectionHeader() } } - - private var toolbar: some ToolbarContent { - ToolbarItem(placement: .cancellationAction) { - Button(L10n.actionCancel) { - context.send(viewAction: .cancel) - } - } - } } private struct InfoItem: View { diff --git a/ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift b/ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift index ea20de92b8..efe901dbcd 100644 --- a/ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift +++ b/ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift @@ -181,11 +181,12 @@ struct SettingsScreen: View { context.send(viewAction: .logout) }) .accessibilityIdentifier(A11yIdentifiers.settingsScreen.logout) + if context.viewState.showAccountDeactivation { ListRow(label: .action(title: L10n.actionDeactivateAccount, icon: \.warning, role: .destructive), - kind: .button { + kind: .navigationLink { context.send(viewAction: .deactivateAccount) }) } diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPad-en-GB.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPad-en-GB.1.png index 3f0eaf4398..f955dd7224 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPad-en-GB.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPad-en-GB.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49a19ce44c0cc157d621ad1d5067e9f0437646804778dae6b7090dac2a8d0cbe -size 168006 +oid sha256:f7810a4ae8150a5faa1a92d0cf58a5ea8abcb64d870660a7bbd4c8b3c6f3c51b +size 165278 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPad-pseudo.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPad-pseudo.1.png index 217e2cf6c1..2663e19c8f 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPad-pseudo.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPad-pseudo.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f92b9a6497e4b1262ff279021ced2787d662e243e85e1a11d43e36d495cab9c8 -size 214697 +oid sha256:90bdaeae27c7f49ad5d99334cebb933a03fa61cd415a2a0bbe16b30e388ca11d +size 212159 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPhone-15-en-GB.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPhone-15-en-GB.1.png index b865a950dd..10a85b3d6a 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPhone-15-en-GB.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPhone-15-en-GB.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:edd11721586663568ff973660f16fcff783dabba4bf5a2805caa0aa956ec2fd7 -size 124025 +oid sha256:9bce17faedcffc9205b7d64950e249f2400f488d971d6053c994a835d22bfcf5 +size 121819 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPhone-15-pseudo.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPhone-15-pseudo.1.png index 9c203d9cb1..96b62bf151 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPhone-15-pseudo.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_deactivateAccountScreen-iPhone-15-pseudo.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f4b0057cb0a667fee987afdad9fe1bf2bc4ee3455e2e87f1a5eac98d51be364 -size 192025 +oid sha256:f8d40ed55df8eaa86ba73d1d1a244a5cff097c15b310519f61a54058d556581d +size 189910 diff --git a/UnitTests/Sources/DeactivateAccountScreenViewModelTests.swift b/UnitTests/Sources/DeactivateAccountScreenViewModelTests.swift index e38c491b62..2a2946a126 100644 --- a/UnitTests/Sources/DeactivateAccountScreenViewModelTests.swift +++ b/UnitTests/Sources/DeactivateAccountScreenViewModelTests.swift @@ -78,14 +78,4 @@ class DeactivateAccountScreenViewModelTests: XCTestCase { XCTAssertEqual(clientProxy.deactivateAccountPasswordEraseDataReceivedArguments?.password, enteredPassword) XCTAssertEqual(clientProxy.deactivateAccountPasswordEraseDataReceivedArguments?.eraseData, shouldErase) } - - func testCancel() async throws { - // When cancelling the view. - let deferred = deferFulfillment(viewModel.actionsPublisher) { $0 == .cancel } - context.send(viewAction: .cancel) - try await deferred.fulfill() - - // Then no API call should be made to deactivate the account. - XCTAssertFalse(clientProxy.deactivateAccountPasswordEraseDataCalled) - } }