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