11package to.bitkit.ui.screens.wallets.activity
22
33import androidx.compose.foundation.layout.Arrangement
4+ import androidx.compose.foundation.layout.Box
45import androidx.compose.foundation.layout.Column
56import androidx.compose.foundation.layout.ExperimentalLayoutApi
67import androidx.compose.foundation.layout.FlowRow
78import androidx.compose.foundation.layout.Row
89import androidx.compose.foundation.layout.Spacer
910import androidx.compose.foundation.layout.fillMaxHeight
11+ import androidx.compose.foundation.layout.fillMaxSize
1012import androidx.compose.foundation.layout.fillMaxWidth
1113import androidx.compose.foundation.layout.height
1214import androidx.compose.foundation.layout.navigationBarsPadding
@@ -18,20 +20,47 @@ import androidx.compose.runtime.getValue
1820import androidx.compose.ui.Alignment
1921import androidx.compose.ui.Modifier
2022import androidx.compose.ui.res.stringResource
23+ import androidx.compose.ui.tooling.preview.Preview
2124import androidx.compose.ui.unit.dp
2225import to.bitkit.R
26+ import to.bitkit.ui.activityListViewModel
27+ import to.bitkit.ui.appViewModel
2328import to.bitkit.ui.components.PrimaryButton
2429import to.bitkit.ui.components.SecondaryButton
2530import to.bitkit.ui.components.TagButton
2631import to.bitkit.ui.scaffold.SheetTopBar
27- import to.bitkit.viewmodels.ActivityListViewModel
32+ import to.bitkit.ui.theme.AppThemeSurface
2833
2934@OptIn(ExperimentalLayoutApi ::class )
3035@Composable
31- fun TagSelectorSheet (
32- viewModel : ActivityListViewModel ,
33- onClearClick : () -> Unit ,
34- onApplyClick : () -> Unit ,
36+ fun TagSelectorSheet () {
37+ val activity = activityListViewModel ? : return
38+ val app = appViewModel ? : return
39+ val availableTags by activity.availableTags.collectAsState()
40+ val selectedTags by activity.selectedTags.collectAsState()
41+
42+ TagSelectorSheetContent (
43+ availableTags = availableTags,
44+ selectedTags = selectedTags,
45+ onTagClick = { activity.toggleTag(it) },
46+ onClearClick = {
47+ activity.clearTags()
48+ app.hideSheet()
49+ },
50+ onApplyClick = {
51+ app.hideSheet()
52+ },
53+ )
54+ }
55+
56+ @OptIn(ExperimentalLayoutApi ::class )
57+ @Composable
58+ private fun TagSelectorSheetContent (
59+ availableTags : List <String >,
60+ selectedTags : Set <String >,
61+ onTagClick : (String ) -> Unit = {},
62+ onClearClick : () -> Unit = {},
63+ onApplyClick : () -> Unit = {},
3564) {
3665 Column (
3766 modifier = Modifier
@@ -51,14 +80,11 @@ fun TagSelectorSheet(
5180 horizontalArrangement = Arrangement .spacedBy(8 .dp),
5281 verticalArrangement = Arrangement .spacedBy(8 .dp),
5382 ) {
54- val availableTags by viewModel.availableTags.collectAsState()
55- val selectedTags by viewModel.selectedTags.collectAsState()
56-
5783 availableTags.forEach { tag ->
5884 TagButton (
5985 text = tag,
6086 isSelected = selectedTags.contains(tag),
61- onClick = { viewModel.toggleTag (tag) }
87+ onClick = { onTagClick (tag) }
6288 )
6389 }
6490 }
@@ -82,5 +108,21 @@ fun TagSelectorSheet(
82108 )
83109 }
84110 }
111+ }
85112
113+ @OptIn(ExperimentalLayoutApi ::class )
114+ @Preview(showSystemUi = true )
115+ @Composable
116+ private fun Preview () {
117+ AppThemeSurface {
118+ Box (
119+ contentAlignment = Alignment .BottomCenter ,
120+ modifier = Modifier .fillMaxSize()
121+ ) {
122+ TagSelectorSheetContent (
123+ availableTags = listOf (" Bitcoin" , " Lightning" , " Sent" , " Received" ),
124+ selectedTags = setOf (" Bitcoin" , " Received" ),
125+ )
126+ }
127+ }
86128}
0 commit comments