@@ -4,10 +4,7 @@ import androidx.compose.material3.AlertDialog
4
4
import androidx.compose.material3.MaterialTheme
5
5
import androidx.compose.material3.Text
6
6
import androidx.compose.runtime.Composable
7
- import androidx.compose.runtime.derivedStateOf
8
7
import androidx.compose.runtime.getValue
9
- import androidx.compose.runtime.mutableStateOf
10
- import androidx.compose.runtime.remember
11
8
import androidx.compose.ui.Modifier
12
9
import androidx.compose.ui.platform.testTag
13
10
import androidx.compose.ui.res.stringResource
@@ -35,23 +32,27 @@ import net.mullvad.mullvadvpn.usecase.customlists.RenameError
35
32
import net.mullvad.mullvadvpn.viewmodel.EditCustomListNameDialogSideEffect
36
33
import net.mullvad.mullvadvpn.viewmodel.EditCustomListNameDialogViewModel
37
34
import org.koin.androidx.compose.koinViewModel
38
- import org.koin.core.parameter.parametersOf
39
35
40
36
@Preview
41
37
@Composable
42
38
private fun PreviewEditCustomListNameDialog () {
43
39
AppTheme { EditCustomListNameDialog (EditCustomListNameUiState ()) }
44
40
}
45
41
42
+ data class EditCustomListNameNavArgs (
43
+ val customListId : CustomListId ,
44
+ val initialName : CustomListName
45
+ )
46
+
46
47
@Composable
47
- @Destination<RootGraph >(style = DestinationStyle .Dialog ::class )
48
+ @Destination<RootGraph >(
49
+ style = DestinationStyle .Dialog ::class ,
50
+ navArgs = EditCustomListNameNavArgs ::class
51
+ )
48
52
fun EditCustomListName (
49
53
backNavigator : ResultBackNavigator <Renamed >,
50
- customListId : CustomListId ,
51
- initialName : CustomListName
52
54
) {
53
- val vm: EditCustomListNameDialogViewModel =
54
- koinViewModel(parameters = { parametersOf(customListId, initialName) })
55
+ val vm: EditCustomListNameDialogViewModel = koinViewModel()
55
56
LaunchedEffectCollect (vm.uiSideEffect) { sideEffect ->
56
57
when (sideEffect) {
57
58
is EditCustomListNameDialogSideEffect .ReturnWithResult -> {
@@ -64,7 +65,7 @@ fun EditCustomListName(
64
65
EditCustomListNameDialog (
65
66
state = state,
66
67
updateName = vm::updateCustomListName,
67
- onInputChanged = vm::clearError ,
68
+ onInputChanged = vm::onNameChanged ,
68
69
onDismiss = dropUnlessResumed { backNavigator.navigateBack() }
69
70
)
70
71
}
@@ -73,12 +74,9 @@ fun EditCustomListName(
73
74
fun EditCustomListNameDialog (
74
75
state : EditCustomListNameUiState ,
75
76
updateName : (String ) -> Unit = {},
76
- onInputChanged : () -> Unit = {},
77
+ onInputChanged : (String ) -> Unit = {},
77
78
onDismiss : () -> Unit = {}
78
79
) {
79
- val name = remember { mutableStateOf(state.name) }
80
- val isValidName by remember { derivedStateOf { name.value.isNotBlank() } }
81
-
82
80
AlertDialog (
83
81
title = {
84
82
Text (
@@ -87,14 +85,11 @@ fun EditCustomListNameDialog(
87
85
},
88
86
text = {
89
87
CustomListNameTextField (
90
- name = name.value ,
91
- isValidName = isValidName,
88
+ name = state.name ,
89
+ isValidName = state. isValidName,
92
90
error = state.error?.errorString(),
93
91
onSubmit = updateName,
94
- onValueChanged = {
95
- name.value = it
96
- onInputChanged()
97
- },
92
+ onValueChanged = onInputChanged,
98
93
modifier = Modifier .testTag(EDIT_CUSTOM_LIST_DIALOG_INPUT_TEST_TAG )
99
94
)
100
95
},
@@ -104,8 +99,8 @@ fun EditCustomListNameDialog(
104
99
confirmButton = {
105
100
PrimaryButton (
106
101
text = stringResource(id = R .string.save),
107
- onClick = { updateName(name.value ) },
108
- isEnabled = isValidName
102
+ onClick = { updateName(state.name ) },
103
+ isEnabled = state. isValidName
109
104
)
110
105
},
111
106
dismissButton = {
0 commit comments