mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 12:07:28 +00:00
DefaultInvitePeopleEvents -> DefaultInvitePeopleEvent
This commit is contained in:
+5
-5
@@ -11,9 +11,9 @@ package io.element.android.features.invitepeople.impl
|
||||
import io.element.android.features.invitepeople.api.InvitePeopleEvent
|
||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||
|
||||
sealed interface DefaultInvitePeopleEvents : InvitePeopleEvent {
|
||||
data class ToggleUser(val user: MatrixUser) : DefaultInvitePeopleEvents
|
||||
data class OnSearchActiveChanged(val active: Boolean) : DefaultInvitePeopleEvents
|
||||
data object DismissUnknownUsersModal : DefaultInvitePeopleEvents
|
||||
data object RemoveUnknownUsers : DefaultInvitePeopleEvents
|
||||
sealed interface DefaultInvitePeopleEvent : InvitePeopleEvent {
|
||||
data class ToggleUser(val user: MatrixUser) : DefaultInvitePeopleEvent
|
||||
data class OnSearchActiveChanged(val active: Boolean) : DefaultInvitePeopleEvent
|
||||
data object DismissUnknownUsersModal : DefaultInvitePeopleEvent
|
||||
data object RemoveUnknownUsers : DefaultInvitePeopleEvent
|
||||
}
|
||||
+5
-5
@@ -182,23 +182,23 @@ class DefaultInvitePeoplePresenter(
|
||||
fun handleEvent(event: InvitePeopleEvent) {
|
||||
when (event) {
|
||||
// Dedicated `when` for exhaustivity.
|
||||
is DefaultInvitePeopleEvents -> when (event) {
|
||||
is DefaultInvitePeopleEvents.OnSearchActiveChanged -> {
|
||||
is DefaultInvitePeopleEvent -> when (event) {
|
||||
is DefaultInvitePeopleEvent.OnSearchActiveChanged -> {
|
||||
searchActive = event.active
|
||||
if (!event.active) {
|
||||
queryState.clearText()
|
||||
}
|
||||
}
|
||||
|
||||
is DefaultInvitePeopleEvents.ToggleUser -> {
|
||||
is DefaultInvitePeopleEvent.ToggleUser -> {
|
||||
selectedUsers.toggleUser(event.user)
|
||||
searchResults.toggleUser(event.user)
|
||||
// suggestions will automatically update via derivedStateOf when selectedUsers changes
|
||||
}
|
||||
is DefaultInvitePeopleEvents.DismissUnknownUsersModal -> {
|
||||
is DefaultInvitePeopleEvent.DismissUnknownUsersModal -> {
|
||||
sendInvitesAction.value = AsyncAction.Uninitialized
|
||||
}
|
||||
is DefaultInvitePeopleEvents.RemoveUnknownUsers -> {
|
||||
is DefaultInvitePeopleEvent.RemoveUnknownUsers -> {
|
||||
val usersToRemove = selectedUsers.value.filter { it in unknownUsers }
|
||||
usersToRemove.forEach { user ->
|
||||
selectedUsers.toggleUser(user)
|
||||
|
||||
+5
-5
@@ -102,7 +102,7 @@ private fun InvitePeopleContentView(
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp),
|
||||
) {
|
||||
fun toggleUser(user: MatrixUser) {
|
||||
state.eventSink(DefaultInvitePeopleEvents.ToggleUser(user))
|
||||
state.eventSink(DefaultInvitePeopleEvent.ToggleUser(user))
|
||||
}
|
||||
|
||||
InvitePeopleSearchBar(
|
||||
@@ -114,7 +114,7 @@ private fun InvitePeopleContentView(
|
||||
active = state.isSearchActive,
|
||||
onActiveChange = {
|
||||
state.eventSink(
|
||||
DefaultInvitePeopleEvents.OnSearchActiveChanged(
|
||||
DefaultInvitePeopleEvent.OnSearchActiveChanged(
|
||||
it
|
||||
)
|
||||
)
|
||||
@@ -144,7 +144,7 @@ private fun InvitePeopleContentView(
|
||||
CheckableUserRow(
|
||||
checked = invitableUser.isSelected,
|
||||
onCheckedChange = {
|
||||
state.eventSink(DefaultInvitePeopleEvents.ToggleUser(invitableUser.matrixUser))
|
||||
state.eventSink(DefaultInvitePeopleEvent.ToggleUser(invitableUser.matrixUser))
|
||||
},
|
||||
data = CheckableUserRowData.Resolved(
|
||||
avatarData = invitableUser.matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
@@ -163,9 +163,9 @@ private fun InvitePeopleContentView(
|
||||
if (state.sendInvitesAction is ConfirmingUnknownUserInvitation) {
|
||||
InvitePeopleConfirmModal(
|
||||
users = state.sendInvitesAction.users,
|
||||
onDismiss = { state.eventSink.invoke(DefaultInvitePeopleEvents.DismissUnknownUsersModal) },
|
||||
onDismiss = { state.eventSink.invoke(DefaultInvitePeopleEvent.DismissUnknownUsersModal) },
|
||||
onInvite = { state.eventSink.invoke(InvitePeopleEvent.SendInvites) },
|
||||
onRemove = { state.eventSink.invoke(DefaultInvitePeopleEvents.RemoveUnknownUsers) }
|
||||
onRemove = { state.eventSink.invoke(DefaultInvitePeopleEvent.RemoveUnknownUsers) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+20
-20
@@ -88,7 +88,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
val initialState = awaitItem()
|
||||
skipItems(1)
|
||||
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.OnSearchActiveChanged(true))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.OnSearchActiveChanged(true))
|
||||
|
||||
val resultState = awaitItemAsDefault()
|
||||
assertThat(resultState.isSearchActive).isTrue()
|
||||
@@ -290,18 +290,18 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
// When we toggle a user not in the list, they are added
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(aMatrixUser()))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(aMatrixUser()))
|
||||
assertThat(awaitItemAsDefault().selectedUsers).containsExactly(aMatrixUser())
|
||||
|
||||
// Toggling a different user also adds them
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(aMatrixUser(id = A_USER_ID_2.value)))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(aMatrixUser(id = A_USER_ID_2.value)))
|
||||
assertThat(awaitItemAsDefault().selectedUsers).containsExactly(
|
||||
aMatrixUser(),
|
||||
aMatrixUser(id = A_USER_ID_2.value)
|
||||
)
|
||||
|
||||
// Toggling the first user removes them
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(aMatrixUser()))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(aMatrixUser()))
|
||||
assertThat(awaitItemAsDefault().selectedUsers).containsExactly(aMatrixUser(id = A_USER_ID_2.value))
|
||||
}
|
||||
}
|
||||
@@ -319,7 +319,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
|
||||
val selectedUser = aMatrixUser(displayName = "John Doe")
|
||||
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(selectedUser))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(selectedUser))
|
||||
|
||||
initialState.searchQuery.setTextAndPlaceCursorAtEnd("some query")
|
||||
skipItems(1)
|
||||
@@ -373,7 +373,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
}
|
||||
|
||||
// And then a user is toggled
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(selectedUser))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(selectedUser))
|
||||
skipItems(1)
|
||||
val resultState = awaitItemAsDefault()
|
||||
|
||||
@@ -414,7 +414,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
repository.emitStateWithUsers(users = aMatrixUserList() + selectedUser)
|
||||
skipItems(1)
|
||||
// And then a user is toggled
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(selectedUser))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(selectedUser))
|
||||
skipItems(1)
|
||||
val resultState = awaitItemAsDefault()
|
||||
// The results are updated...
|
||||
@@ -468,7 +468,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
repository.emitStateWithUsers(users = aMatrixUserList() + selectedUser)
|
||||
skipItems(1)
|
||||
// And then a user is toggled
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(selectedUser))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(selectedUser))
|
||||
skipItems(1)
|
||||
val resultState = awaitItemAsDefault()
|
||||
// The results are updated...
|
||||
@@ -645,11 +645,11 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
// When we toggle a user not in the list, they are added, and we fetch their identity.
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(alice))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(alice))
|
||||
delay(100)
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvents.ToggleUser(bob))
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvent.ToggleUser(bob))
|
||||
delay(100)
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvents.ToggleUser(charlie))
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvent.ToggleUser(charlie))
|
||||
delay(100)
|
||||
|
||||
// If we do not have their identity cached, or fail to fetch it, we should mark them as unknown.
|
||||
@@ -712,11 +712,11 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
// When we toggle a user not in the list, they are added, and we fetch their identity.
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(alice))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(alice))
|
||||
delay(100)
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvents.ToggleUser(bob))
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvent.ToggleUser(bob))
|
||||
delay(100)
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvents.ToggleUser(charlie))
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvent.ToggleUser(charlie))
|
||||
delay(100)
|
||||
|
||||
// And the search is matching Alice and Bob
|
||||
@@ -751,7 +751,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
awaitItemAsDefault().run {
|
||||
assertThat(sendInvitesAction).isInstanceOf(ConfirmingUnknownUserInvitation::class.java)
|
||||
assertThat(canInvite).isTrue()
|
||||
eventSink(DefaultInvitePeopleEvents.RemoveUnknownUsers)
|
||||
eventSink(DefaultInvitePeopleEvent.RemoveUnknownUsers)
|
||||
}
|
||||
|
||||
// Selecting "remove" should remove all unknown users, but keeps those who are known.
|
||||
@@ -794,11 +794,11 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
// When we toggle a user not in the list, they are added, and we fetch their identity.
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(alice))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(alice))
|
||||
delay(100)
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvents.ToggleUser(bob))
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvent.ToggleUser(bob))
|
||||
delay(100)
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvents.ToggleUser(charlie))
|
||||
awaitItemAsDefault().eventSink(DefaultInvitePeopleEvent.ToggleUser(charlie))
|
||||
delay(100)
|
||||
|
||||
awaitItemAsDefault().run {
|
||||
@@ -816,7 +816,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
awaitItemAsDefault().run {
|
||||
assertThat(sendInvitesAction).isInstanceOf(ConfirmingUnknownUserInvitation::class.java)
|
||||
assertThat(canInvite).isTrue()
|
||||
eventSink(DefaultInvitePeopleEvents.DismissUnknownUsersModal)
|
||||
eventSink(DefaultInvitePeopleEvent.DismissUnknownUsersModal)
|
||||
}
|
||||
|
||||
// Dismissing should not modify the selection at all
|
||||
@@ -853,7 +853,7 @@ internal class DefaultInvitePeoplePresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
// We want to add a new user to a DM
|
||||
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(alice))
|
||||
initialState.eventSink(DefaultInvitePeopleEvent.ToggleUser(alice))
|
||||
|
||||
// And we send the invites
|
||||
initialState.eventSink(InvitePeopleEvent.SendInvites)
|
||||
|
||||
Reference in New Issue
Block a user