@@ -23,13 +23,15 @@ import androidx.compose.material3.TextFieldDefaults
23
23
import androidx.compose.material3.TopAppBarDefaults
24
24
import androidx.compose.runtime.Composable
25
25
import androidx.compose.runtime.LaunchedEffect
26
+ import androidx.compose.runtime.getValue
27
+ import androidx.compose.runtime.remember
28
+ import androidx.compose.runtime.setValue
26
29
import androidx.compose.ui.Modifier
27
30
import androidx.compose.ui.draw.drawBehind
28
31
import androidx.compose.ui.focus.FocusRequester
29
32
import androidx.compose.ui.focus.focusRequester
30
33
import androidx.compose.ui.geometry.Offset
31
34
import androidx.compose.ui.graphics.Color
32
- import androidx.compose.ui.input.pointer.pointerInput
33
35
import androidx.compose.ui.res.stringResource
34
36
import androidx.compose.ui.tooling.preview.PreviewParameter
35
37
import androidx.compose.ui.unit.dp
@@ -39,7 +41,7 @@ import io.element.android.features.home.impl.contentType
39
41
import io.element.android.features.home.impl.model.RoomListRoomSummary
40
42
import io.element.android.features.home.impl.roomlist.RoomListEvents
41
43
import io.element.android.libraries.designsystem.components.button.BackButton
42
- import io.element.android.libraries.designsystem.modifiers.applyIf
44
+ import io.element.android.libraries.designsystem.components.form.textFieldState
43
45
import io.element.android.libraries.designsystem.preview.ElementPreview
44
46
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
45
47
import io.element.android.libraries.designsystem.theme.components.FilledTextField
@@ -68,24 +70,13 @@ internal fun RoomListSearchView(
68
70
enter = fadeIn(),
69
71
exit = fadeOut(),
70
72
) {
71
- Column (
72
- modifier = modifier
73
- .applyIf(
74
- condition = state.isSearchActive,
75
- ifTrue = {
76
- // Disable input interaction to underlying views
77
- pointerInput(Unit ) {}
78
- }
79
- )
80
- ) {
81
- if (state.isSearchActive) {
82
- RoomListSearchContent (
83
- state = state,
84
- hideInvitesAvatars = hideInvitesAvatars,
85
- onRoomClick = onRoomClick,
86
- eventSink = eventSink,
87
- )
88
- }
73
+ Column (modifier = modifier) {
74
+ RoomListSearchContent (
75
+ state = state,
76
+ hideInvitesAvatars = hideInvitesAvatars,
77
+ onRoomClick = onRoomClick,
78
+ eventSink = eventSink,
79
+ )
89
80
}
90
81
}
91
82
}
@@ -120,15 +111,19 @@ private fun RoomListSearchContent(
120
111
},
121
112
navigationIcon = { BackButton (onClick = ::onBackButtonClick) },
122
113
title = {
123
- val filter = state.query
124
- val focusRequester = FocusRequester ()
114
+ var filter by textFieldState(state.query)
115
+
116
+ val focusRequester = remember { FocusRequester () }
125
117
FilledTextField (
126
118
modifier = Modifier
127
119
.fillMaxWidth()
128
120
.focusRequester(focusRequester),
129
121
value = filter,
130
122
singleLine = true ,
131
- onValueChange = { state.eventSink(RoomListSearchEvents .QueryChanged (it)) },
123
+ onValueChange = {
124
+ filter = it
125
+ state.eventSink(RoomListSearchEvents .QueryChanged (it))
126
+ },
132
127
colors = TextFieldDefaults .colors(
133
128
focusedContainerColor = Color .Transparent ,
134
129
unfocusedContainerColor = Color .Transparent ,
@@ -152,10 +147,8 @@ private fun RoomListSearchContent(
152
147
}
153
148
)
154
149
155
- LaunchedEffect (state.isSearchActive) {
156
- if (state.isSearchActive) {
157
- focusRequester.requestFocus()
158
- }
150
+ LaunchedEffect (Unit ) {
151
+ focusRequester.requestFocus()
159
152
}
160
153
},
161
154
windowInsets = TopAppBarDefaults .windowInsets.copy(top = 0 )
0 commit comments