Coverage Summary for Class: SurferQuickActionsWidgetKt (com.georgeci.moneysurfer.uikit.widgets)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| SurferQuickActionsWidgetKt |
100%
(1/1)
|
33.3%
(1/3)
|
57.1%
(16/28)
|
96.2%
(25/26)
|
88.3%
(309/350)
|
package com.georgeci.moneysurfer.uikit.widgets
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.SwapHoriz
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.georgeci.moneysurfer.uikit.components.SurferButton
import com.georgeci.moneysurfer.uikit.components.SurferButtonSize
import com.georgeci.moneysurfer.uikit.components.SurferButtonStyle
import com.georgeci.moneysurfer.uikit.icons.SurferIcons
import com.georgeci.moneysurfer.uikit.preview.SurferComponentPreview
@Composable
fun SurferQuickActionsWidget(
primaryLabel: String,
primaryIcon: ImageVector,
onPrimaryClick: () -> Unit,
secondaryLabel: String,
secondaryIcon: ImageVector,
onSecondaryClick: () -> Unit,
modifier: Modifier = Modifier,
size: SurferWidgetSize = LocalSurferWidgetSize.current,
) {
val hero = size == SurferWidgetSize.Expanded
val buttonSize = if (hero) SurferButtonSize.Biggest else SurferButtonSize.Regular
val gap = if (hero) 10.dp else 8.dp
Row(
modifier = modifier,
horizontalArrangement = Arrangement.spacedBy(gap),
) {
SurferButton(
text = primaryLabel,
onClick = onPrimaryClick,
modifier = Modifier.weight(1f),
style = SurferButtonStyle.Filled,
size = buttonSize,
startIcon = primaryIcon,
)
SurferButton(
text = secondaryLabel,
onClick = onSecondaryClick,
modifier = Modifier.weight(1f),
style = SurferButtonStyle.Tonal,
size = buttonSize,
startIcon = secondaryIcon,
)
}
}
@Preview
@Composable
private fun SurferQuickActionsHeroPreview() {
SurferComponentPreview {
Box(modifier = Modifier.padding(16.dp)) {
SurferQuickActionsWidget(
primaryLabel = "Add transaction",
primaryIcon = SurferIcons.Add,
onPrimaryClick = {},
secondaryLabel = "Transfer",
secondaryIcon = Icons.Filled.SwapHoriz,
onSecondaryClick = {},
modifier = Modifier
.fillMaxWidth()
.height(80.dp),
)
}
}
}
@Preview
@Composable
private fun SurferQuickActionsCompactPreview() {
SurferComponentPreview {
Box(modifier = Modifier.padding(16.dp)) {
SurferQuickActionsWidget(
primaryLabel = "Add",
primaryIcon = SurferIcons.Add,
onPrimaryClick = {},
secondaryLabel = "Transfer",
secondaryIcon = Icons.Filled.SwapHoriz,
onSecondaryClick = {},
size = SurferWidgetSize.Compact,
modifier = Modifier
.width(260.dp)
.height(64.dp),
)
}
}
}