knock requests : accept all ui
This commit is contained in:
parent
62dc795023
commit
58365730de
2 changed files with 37 additions and 6 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue