Iterate on Save change dialog.
This commit is contained in:
committed by
Benoit Marty
parent
5bd194b2b6
commit
eeef1b11ea
@@ -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) {
|
||||
|
||||
@@ -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) },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 = {},
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) }
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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) }
|
||||
)
|
||||
},
|
||||
|
||||
@@ -17,16 +17,22 @@ import io.element.android.libraries.ui.strings.CommonStrings
|
||||
|
||||
@Composable
|
||||
fun SaveChangesDialog(
|
||||
onSubmitClick: () -> Unit,
|
||||
onSaveClick: () -> Unit,
|
||||
onDiscardClick: () -> Unit,
|
||||
onDismiss: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
title: String = stringResource(CommonStrings.dialog_unsaved_changes_title),
|
||||
content: String = stringResource(CommonStrings.dialog_unsaved_changes_description_android),
|
||||
content: String = stringResource(CommonStrings.dialog_unsaved_changes_description),
|
||||
submitText: String = stringResource(CommonStrings.action_save),
|
||||
cancelText: String = stringResource(CommonStrings.action_discard),
|
||||
) = ConfirmationDialog(
|
||||
modifier = modifier,
|
||||
title = title,
|
||||
content = content,
|
||||
onSubmitClick = onSubmitClick,
|
||||
submitText = submitText,
|
||||
cancelText = cancelText,
|
||||
onSubmitClick = onSaveClick,
|
||||
onCancelClick = onDiscardClick,
|
||||
onDismiss = onDismiss,
|
||||
)
|
||||
|
||||
@@ -34,7 +40,8 @@ fun SaveChangesDialog(
|
||||
@Composable
|
||||
internal fun SaveChangesDialogPreview() = ElementPreview {
|
||||
SaveChangesDialog(
|
||||
onSubmitClick = {},
|
||||
onSaveClick = {},
|
||||
onDiscardClick = {},
|
||||
onDismiss = {}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
<string name="notification_room_invite_body_with_sender">"%1$s invited you to join the room"</string>
|
||||
<string name="notification_sender_me">"Me"</string>
|
||||
<string name="notification_sender_mention_reply">"%1$s mentioned or replied"</string>
|
||||
<string name="notification_space_invite_body">"Invited you to join the space"</string>
|
||||
<string name="notification_test_push_notification_content">"You are viewing the notification! Click me!"</string>
|
||||
<string name="notification_thread_in_room">"Thread in %1$s"</string>
|
||||
<string name="notification_ticker_text_dm">"%1$s: %2$s"</string>
|
||||
|
||||
@@ -392,6 +392,7 @@ Are you sure you want to continue?"</string>
|
||||
<string name="dialog_title_error">"Error"</string>
|
||||
<string name="dialog_title_success">"Success"</string>
|
||||
<string name="dialog_title_warning">"Warning"</string>
|
||||
<string name="dialog_unsaved_changes_description">"You have unsaved changes."</string>
|
||||
<string name="dialog_unsaved_changes_description_android">"Your changes have not been saved. Are you sure you want to go back?"</string>
|
||||
<string name="dialog_unsaved_changes_title">"Save changes?"</string>
|
||||
<string name="dialog_video_quality_selector_subtitle_file_size">"The max file size allowed is: %1$s"</string>
|
||||
|
||||
Reference in New Issue
Block a user