knock requests : accept all ui

This commit is contained in:
ganfra 2024-11-26 21:31:23 +01:00
parent 62dc795023
commit 58365730de
2 changed files with 37 additions and 6 deletions

View file

@ -16,7 +16,9 @@ data class KnockRequestsListState(
val knockRequests: AsyncData<ImmutableList<KnockRequest>>, val knockRequests: AsyncData<ImmutableList<KnockRequest>>,
val currentAction: KnockRequestsCurrentAction, val currentAction: KnockRequestsCurrentAction,
val eventSink: (KnockRequestsListEvents) -> Unit, val eventSink: (KnockRequestsListEvents) -> Unit,
) ) {
val canAcceptAll = knockRequests is AsyncData.Success && knockRequests.data.size > 1
}
sealed interface KnockRequestsCurrentAction { sealed interface KnockRequestsCurrentAction {
data object None : KnockRequestsCurrentAction data object None : KnockRequestsCurrentAction

View file

@ -7,12 +7,14 @@
package io.element.android.features.knockrequests.impl.list package io.element.android.features.knockrequests.impl.list
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -25,6 +27,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.draw.clipToBounds
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
@ -88,12 +92,12 @@ private fun KnockRequestsListContent(state: KnockRequestsListState, modifier: Mo
state.eventSink(KnockRequestsListEvents.Decline(knockRequest)) state.eventSink(KnockRequestsListEvents.Decline(knockRequest))
} }
Box(modifier, contentAlignment = Alignment.Center) { Box(modifier.fillMaxSize()) {
when (state.knockRequests) { when (state.knockRequests) {
is AsyncData.Success -> { is AsyncData.Success -> {
val knockRequests = state.knockRequests.data val knockRequests = state.knockRequests.data
if (knockRequests.isEmpty()) { if (knockRequests.isEmpty()) {
KnockRequestsListEmpty() KnockRequestsEmptyList()
} else { } else {
KnockRequestsList( KnockRequestsList(
knockRequests = knockRequests, knockRequests = knockRequests,
@ -107,10 +111,17 @@ private fun KnockRequestsListContent(state: KnockRequestsListState, modifier: Mo
KnockRequestsActionsView( KnockRequestsActionsView(
actions = state.currentAction, actions = state.currentAction,
onDismiss = { onDismiss = {
state.eventSink(KnockRequestsListEvents.AcceptAll) state.eventSink(KnockRequestsListEvents.DismissCurrentAction)
}, },
modifier = Modifier.align(Alignment.BottomCenter),
) )
if (state.canAcceptAll) {
KnockRequestsAcceptAll(
onClick = {
state.eventSink(KnockRequestsListEvents.AcceptAll)
},
modifier = Modifier.align(Alignment.BottomCenter),
)
}
} }
} }
@ -247,7 +258,25 @@ private fun KnockRequestItem(
} }
@Composable @Composable
private fun KnockRequestsListEmpty( private fun KnockRequestsAcceptAll(onClick: () -> Unit, modifier: Modifier) {
Box(
modifier = modifier
.shadow(elevation = 24.dp, spotColor = Color.Transparent)
.background(color = ElementTheme.colors.bgCanvasDefault)
.padding(vertical = 12.dp, horizontal = 16.dp)
)
{
OutlinedButton(
text = ("Accept all"),
onClick = onClick,
size = ButtonSize.Medium,
modifier = Modifier.fillMaxWidth(),
)
}
}
@Composable
private fun KnockRequestsEmptyList(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
Box( Box(