mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
UserListEvents -> UserListEvent
This commit is contained in:
+7
-7
@@ -24,7 +24,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import io.element.android.features.startchat.impl.userlist.UserListEvents
|
import io.element.android.features.startchat.impl.userlist.UserListEvent
|
||||||
import io.element.android.features.startchat.impl.userlist.UserListState
|
import io.element.android.features.startchat.impl.userlist.UserListState
|
||||||
import io.element.android.features.startchat.impl.userlist.UserListStatePreviewParam
|
import io.element.android.features.startchat.impl.userlist.UserListStatePreviewParam
|
||||||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||||
@@ -63,13 +63,13 @@ fun UserListView(
|
|||||||
showLoader = state.showSearchLoader,
|
showLoader = state.showSearchLoader,
|
||||||
isMultiSelectionEnable = state.isMultiSelectionEnabled,
|
isMultiSelectionEnable = state.isMultiSelectionEnabled,
|
||||||
showBackButton = showBackButton,
|
showBackButton = showBackButton,
|
||||||
onActiveChange = { state.eventSink(UserListEvents.OnSearchActiveChanged(it)) },
|
onActiveChange = { state.eventSink(UserListEvent.OnSearchActiveChanged(it)) },
|
||||||
onUserSelect = {
|
onUserSelect = {
|
||||||
state.eventSink(UserListEvents.AddToSelection(it))
|
state.eventSink(UserListEvent.AddToSelection(it))
|
||||||
onSelectUser(it)
|
onSelectUser(it)
|
||||||
},
|
},
|
||||||
onUserDeselect = {
|
onUserDeselect = {
|
||||||
state.eventSink(UserListEvents.RemoveFromSelection(it))
|
state.eventSink(UserListEvent.RemoveFromSelection(it))
|
||||||
onDeselectUser(it)
|
onDeselectUser(it)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -80,7 +80,7 @@ fun UserListView(
|
|||||||
selectedUsers = state.selectedUsers,
|
selectedUsers = state.selectedUsers,
|
||||||
autoScroll = true,
|
autoScroll = true,
|
||||||
onUserRemove = {
|
onUserRemove = {
|
||||||
state.eventSink(UserListEvents.RemoveFromSelection(it))
|
state.eventSink(UserListEvent.RemoveFromSelection(it))
|
||||||
onDeselectUser(it)
|
onDeselectUser(it)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -104,10 +104,10 @@ fun UserListView(
|
|||||||
checked = isSelected,
|
checked = isSelected,
|
||||||
onCheckedChange = {
|
onCheckedChange = {
|
||||||
if (isSelected) {
|
if (isSelected) {
|
||||||
state.eventSink(UserListEvents.RemoveFromSelection(recentDirectRoom.matrixUser))
|
state.eventSink(UserListEvent.RemoveFromSelection(recentDirectRoom.matrixUser))
|
||||||
onDeselectUser(recentDirectRoom.matrixUser)
|
onDeselectUser(recentDirectRoom.matrixUser)
|
||||||
} else {
|
} else {
|
||||||
state.eventSink(UserListEvents.AddToSelection(recentDirectRoom.matrixUser))
|
state.eventSink(UserListEvent.AddToSelection(recentDirectRoom.matrixUser))
|
||||||
onSelectUser(recentDirectRoom.matrixUser)
|
onSelectUser(recentDirectRoom.matrixUser)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
+4
-4
@@ -85,11 +85,11 @@ class DefaultUserListPresenter(
|
|||||||
}.launchIn(this)
|
}.launchIn(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleEvent(event: UserListEvents) {
|
fun handleEvent(event: UserListEvent) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is UserListEvents.OnSearchActiveChanged -> isSearchActive = event.active
|
is UserListEvent.OnSearchActiveChanged -> isSearchActive = event.active
|
||||||
is UserListEvents.AddToSelection -> userListDataStore.selectUser(event.matrixUser)
|
is UserListEvent.AddToSelection -> userListDataStore.selectUser(event.matrixUser)
|
||||||
is UserListEvents.RemoveFromSelection -> userListDataStore.removeUserFromSelection(event.matrixUser)
|
is UserListEvent.RemoveFromSelection -> userListDataStore.removeUserFromSelection(event.matrixUser)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -10,8 +10,8 @@ package io.element.android.features.startchat.impl.userlist
|
|||||||
|
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
|
|
||||||
sealed interface UserListEvents {
|
sealed interface UserListEvent {
|
||||||
data class AddToSelection(val matrixUser: MatrixUser) : UserListEvents
|
data class AddToSelection(val matrixUser: MatrixUser) : UserListEvent
|
||||||
data class RemoveFromSelection(val matrixUser: MatrixUser) : UserListEvents
|
data class RemoveFromSelection(val matrixUser: MatrixUser) : UserListEvent
|
||||||
data class OnSearchActiveChanged(val active: Boolean) : UserListEvents
|
data class OnSearchActiveChanged(val active: Boolean) : UserListEvent
|
||||||
}
|
}
|
||||||
+1
-1
@@ -23,7 +23,7 @@ data class UserListState(
|
|||||||
val isSearchActive: Boolean,
|
val isSearchActive: Boolean,
|
||||||
val selectionMode: SelectionMode,
|
val selectionMode: SelectionMode,
|
||||||
val recentDirectRooms: ImmutableList<RecentDirectRoom>,
|
val recentDirectRooms: ImmutableList<RecentDirectRoom>,
|
||||||
val eventSink: (UserListEvents) -> Unit,
|
val eventSink: (UserListEvent) -> Unit,
|
||||||
) {
|
) {
|
||||||
val isMultiSelectionEnabled = selectionMode == SelectionMode.Multiple
|
val isMultiSelectionEnabled = selectionMode == SelectionMode.Multiple
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -68,7 +68,7 @@ fun aUserListState(
|
|||||||
showSearchLoader: Boolean = false,
|
showSearchLoader: Boolean = false,
|
||||||
selectionMode: SelectionMode = SelectionMode.Single,
|
selectionMode: SelectionMode = SelectionMode.Single,
|
||||||
recentDirectRooms: List<RecentDirectRoom> = emptyList(),
|
recentDirectRooms: List<RecentDirectRoom> = emptyList(),
|
||||||
eventSink: (UserListEvents) -> Unit = {},
|
eventSink: (UserListEvent) -> Unit = {},
|
||||||
) = UserListState(
|
) = UserListState(
|
||||||
searchQuery = TextFieldState(initialText = searchQuery),
|
searchQuery = TextFieldState(initialText = searchQuery),
|
||||||
isSearchActive = isSearchActive,
|
isSearchActive = isSearchActive,
|
||||||
|
|||||||
+9
-9
@@ -80,7 +80,7 @@ class DefaultUserListPresenterTest {
|
|||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
|
||||||
initialState.eventSink(UserListEvents.OnSearchActiveChanged(true))
|
initialState.eventSink(UserListEvent.OnSearchActiveChanged(true))
|
||||||
assertThat(awaitItem().isSearchActive).isTrue()
|
assertThat(awaitItem().isSearchActive).isTrue()
|
||||||
|
|
||||||
val matrixIdQuery = "@name:matrix.org"
|
val matrixIdQuery = "@name:matrix.org"
|
||||||
@@ -93,7 +93,7 @@ class DefaultUserListPresenterTest {
|
|||||||
assertThat(awaitItem().searchQuery.text.toString()).isEqualTo(notMatrixIdQuery)
|
assertThat(awaitItem().searchQuery.text.toString()).isEqualTo(notMatrixIdQuery)
|
||||||
assertThat(userRepository.providedQuery).isEqualTo(notMatrixIdQuery)
|
assertThat(userRepository.providedQuery).isEqualTo(notMatrixIdQuery)
|
||||||
|
|
||||||
initialState.eventSink(UserListEvents.OnSearchActiveChanged(false))
|
initialState.eventSink(UserListEvent.OnSearchActiveChanged(false))
|
||||||
assertThat(awaitItem().isSearchActive).isFalse()
|
assertThat(awaitItem().isSearchActive).isFalse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,22 +190,22 @@ class DefaultUserListPresenterTest {
|
|||||||
val userABis = aMatrixUser("@userA:domain", "A")
|
val userABis = aMatrixUser("@userA:domain", "A")
|
||||||
val userC = aMatrixUser("@userC:domain", "C")
|
val userC = aMatrixUser("@userC:domain", "C")
|
||||||
|
|
||||||
initialState.eventSink(UserListEvents.AddToSelection(userA))
|
initialState.eventSink(UserListEvent.AddToSelection(userA))
|
||||||
assertThat(awaitItem().selectedUsers).containsExactly(userA)
|
assertThat(awaitItem().selectedUsers).containsExactly(userA)
|
||||||
|
|
||||||
initialState.eventSink(UserListEvents.AddToSelection(userB))
|
initialState.eventSink(UserListEvent.AddToSelection(userB))
|
||||||
assertThat(awaitItem().selectedUsers).containsExactly(userA, userB)
|
assertThat(awaitItem().selectedUsers).containsExactly(userA, userB)
|
||||||
|
|
||||||
initialState.eventSink(UserListEvents.AddToSelection(userABis))
|
initialState.eventSink(UserListEvent.AddToSelection(userABis))
|
||||||
initialState.eventSink(UserListEvents.AddToSelection(userC))
|
initialState.eventSink(UserListEvent.AddToSelection(userC))
|
||||||
// duplicated users should be ignored
|
// duplicated users should be ignored
|
||||||
assertThat(awaitItem().selectedUsers).containsExactly(userA, userB, userC)
|
assertThat(awaitItem().selectedUsers).containsExactly(userA, userB, userC)
|
||||||
|
|
||||||
initialState.eventSink(UserListEvents.RemoveFromSelection(userB))
|
initialState.eventSink(UserListEvent.RemoveFromSelection(userB))
|
||||||
assertThat(awaitItem().selectedUsers).containsExactly(userA, userC)
|
assertThat(awaitItem().selectedUsers).containsExactly(userA, userC)
|
||||||
initialState.eventSink(UserListEvents.RemoveFromSelection(userA))
|
initialState.eventSink(UserListEvent.RemoveFromSelection(userA))
|
||||||
assertThat(awaitItem().selectedUsers).containsExactly(userC)
|
assertThat(awaitItem().selectedUsers).containsExactly(userC)
|
||||||
initialState.eventSink(UserListEvents.RemoveFromSelection(userC))
|
initialState.eventSink(UserListEvent.RemoveFromSelection(userC))
|
||||||
assertThat(awaitItem().selectedUsers).isEmpty()
|
assertThat(awaitItem().selectedUsers).isEmpty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user