Iterate on Save change dialog.

This commit is contained in:
Benoit Marty 2025-12-03 14:35:52 +01:00 committed by Benoit Marty
parent e9e699ee19
commit 63f7c9a4fd
10 changed files with 36 additions and 25 deletions

View file

@ -66,8 +66,9 @@ fun CreatePollView(
BackHandler(onBack = navBack)
if (state.showBackConfirmation) {
SaveChangesDialog(
onSubmitClick = { state.eventSink(CreatePollEvents.NavBack) },
onDismiss = { state.eventSink(CreatePollEvents.HideConfirmation) }
onSaveClick = { state.eventSink(CreatePollEvents.Save) },
onDiscardClick = { state.eventSink(CreatePollEvents.NavBack) },
onDismiss = { state.eventSink(CreatePollEvents.HideConfirmation) },
)
}
if (state.showDeleteConfirmation) {

View file

@ -147,8 +147,9 @@ fun EditUserProfileView(
when (confirming) {
is AsyncAction.ConfirmingCancellation -> {
SaveChangesDialog(
onSubmitClick = { state.eventSink(EditUserProfileEvents.Exit) },
onDismiss = { state.eventSink(EditUserProfileEvents.CloseDialog) }
onSaveClick = { state.eventSink(EditUserProfileEvents.Save) },
onDiscardClick = { state.eventSink(EditUserProfileEvents.Exit) },
onDismiss = { state.eventSink(EditUserProfileEvents.CloseDialog) },
)
}
}

View file

@ -20,7 +20,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import io.element.android.features.rolesandpermissions.impl.R
import io.element.android.libraries.designsystem.components.async.AsyncActionView
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
import io.element.android.libraries.designsystem.components.dialogs.SaveChangesDialog
import io.element.android.libraries.designsystem.components.preferences.PreferenceDropdown
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
@ -99,13 +99,10 @@ fun ChangeRoomPermissionsView(
async = state.confirmExitAction,
onSuccess = { onComplete(false) },
confirmationDialog = {
ConfirmationDialog(
title = stringResource(R.string.screen_room_change_role_unsaved_changes_title),
content = stringResource(R.string.screen_room_change_role_unsaved_changes_description),
submitText = stringResource(CommonStrings.action_save),
cancelText = stringResource(CommonStrings.action_discard),
onSubmitClick = { state.eventSink(ChangeRoomPermissionsEvent.Save) },
onDismiss = { state.eventSink(ChangeRoomPermissionsEvent.Exit) }
SaveChangesDialog(
onSaveClick = { state.eventSink(ChangeRoomPermissionsEvent.Save) },
onDiscardClick = { state.eventSink(ChangeRoomPermissionsEvent.Exit) },
onDismiss = { state.eventSink(ChangeRoomPermissionsEvent.ResetPendingActions) },
)
},
onErrorDismiss = {},

View file

@ -172,8 +172,9 @@ fun ChangeRolesView(
when (confirming) {
is AsyncAction.ConfirmingCancellation -> {
SaveChangesDialog(
onSubmitClick = { state.eventSink(ChangeRolesEvent.Exit) },
onDismiss = { state.eventSink(ChangeRolesEvent.CloseDialog) }
onSaveClick = { state.eventSink(ChangeRolesEvent.Save) },
onDiscardClick = { state.eventSink(ChangeRolesEvent.Exit) },
onDismiss = { state.eventSink(ChangeRolesEvent.CloseDialog) },
)
}
is ConfirmingModifyingOwners -> {

View file

@ -119,7 +119,7 @@ class ChangeRolesViewTest {
}
@Test
fun `exit confirmation dialog - submit exits the screen`() {
fun `exit confirmation dialog - discard exits the screen`() {
val eventsRecorder = EventsRecorder<ChangeRolesEvent>()
rule.setChangeRolesContent(
state = aChangeRolesState(
@ -128,12 +128,12 @@ class ChangeRolesViewTest {
eventSink = eventsRecorder,
),
)
rule.clickOn(CommonStrings.action_ok)
rule.clickOn(CommonStrings.action_discard)
eventsRecorder.assertSingle(ChangeRolesEvent.Exit)
}
@Test
fun `exit confirmation dialog - cancel removes the dialog`() {
fun `exit confirmation dialog - save emits the save event`() {
val eventsRecorder = EventsRecorder<ChangeRolesEvent>()
rule.setChangeRolesContent(
state = aChangeRolesState(
@ -142,8 +142,8 @@ class ChangeRolesViewTest {
eventSink = eventsRecorder,
),
)
rule.clickOn(CommonStrings.action_cancel)
eventsRecorder.assertSingle(ChangeRolesEvent.CloseDialog)
rule.clickOn(CommonStrings.action_save)
eventsRecorder.assertSingle(ChangeRolesEvent.Save)
}
@Test

View file

@ -159,7 +159,8 @@ fun RoomDetailsEditView(
confirmationDialog = {
if (state.saveAction == AsyncAction.ConfirmingCancellation) {
SaveChangesDialog(
onSubmitClick = { state.eventSink(RoomDetailsEditEvents.OnBackPress) },
onSaveClick = { state.eventSink(RoomDetailsEditEvents.Save) },
onDiscardClick = { state.eventSink(RoomDetailsEditEvents.OnBackPress) },
onDismiss = { state.eventSink(RoomDetailsEditEvents.CloseDialog) }
)
}

View file

@ -144,7 +144,8 @@ fun SecurityAndPrivacyView(
onErrorDismiss = { },
confirmationDialog = {
SaveChangesDialog(
onSubmitClick = { state.eventSink(SecurityAndPrivacyEvents.Exit) },
onSaveClick = { state.eventSink(SecurityAndPrivacyEvents.Save) },
onDiscardClick = { state.eventSink(SecurityAndPrivacyEvents.Exit) },
onDismiss = { state.eventSink(SecurityAndPrivacyEvents.DismissExitConfirmation) }
)
},