Skip to content

Commit 9ee0a94

Browse files
committed
refactor: Move TagSelector sheet logic inside & add preview
1 parent 5da5569 commit 9ee0a94

File tree

3 files changed

+58
-26
lines changed

3 files changed

+58
-26
lines changed

app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import androidx.compose.material.pullrefresh.pullRefresh
2222
import androidx.compose.material.pullrefresh.rememberPullRefreshState
2323
import androidx.compose.material3.ExperimentalMaterial3Api
2424
import androidx.compose.material3.VerticalDivider
25-
import androidx.compose.material3.rememberDateRangePickerState
2625
import androidx.compose.runtime.Composable
2726
import androidx.compose.runtime.LaunchedEffect
2827
import androidx.compose.runtime.collectAsState
@@ -116,16 +115,7 @@ fun HomeScreen(
116115
}
117116

118117
is BottomSheetType.ActivityTagSelector -> {
119-
TagSelectorSheet(
120-
viewModel = activityListViewModel,
121-
onClearClick = {
122-
activityListViewModel.clearTags()
123-
appViewModel.hideSheet()
124-
},
125-
onApplyClick = {
126-
appViewModel.hideSheet()
127-
},
128-
)
118+
TagSelectorSheet()
129119
}
130120

131121
null -> Unit

app/src/main/java/to/bitkit/ui/screens/wallets/activity/DateRangeSelectorSheet.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,22 @@ import to.bitkit.ui.theme.Colors
3333
@Composable
3434
fun DateRangeSelectorSheet() {
3535
val dateRangeState = rememberDateRangePickerState()
36-
val activityListViewModel = activityListViewModel ?: return
37-
val appViewModel = appViewModel ?: return
36+
val activity = activityListViewModel ?: return
37+
val app = appViewModel ?: return
3838

3939
DateRangeSelectorSheetContent(
4040
dateRangeState = dateRangeState,
4141
onClearClick = {
4242
dateRangeState.setSelection(null, null)
43-
activityListViewModel.clearDateRange()
44-
appViewModel.hideSheet()
43+
activity.clearDateRange()
44+
app.hideSheet()
4545
},
4646
onApplyClick = {
47-
activityListViewModel.setDateRange(
47+
activity.setDateRange(
4848
startDate = dateRangeState.selectedStartDateMillis,
4949
endDate = dateRangeState.selectedEndDateMillis,
5050
)
51-
appViewModel.hideSheet()
51+
app.hideSheet()
5252
},
5353
)
5454
}

app/src/main/java/to/bitkit/ui/screens/wallets/activity/TagSelectorSheet.kt

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package to.bitkit.ui.screens.wallets.activity
22

33
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Box
45
import androidx.compose.foundation.layout.Column
56
import androidx.compose.foundation.layout.ExperimentalLayoutApi
67
import androidx.compose.foundation.layout.FlowRow
78
import androidx.compose.foundation.layout.Row
89
import androidx.compose.foundation.layout.Spacer
910
import androidx.compose.foundation.layout.fillMaxHeight
11+
import androidx.compose.foundation.layout.fillMaxSize
1012
import androidx.compose.foundation.layout.fillMaxWidth
1113
import androidx.compose.foundation.layout.height
1214
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -18,20 +20,47 @@ import androidx.compose.runtime.getValue
1820
import androidx.compose.ui.Alignment
1921
import androidx.compose.ui.Modifier
2022
import androidx.compose.ui.res.stringResource
23+
import androidx.compose.ui.tooling.preview.Preview
2124
import androidx.compose.ui.unit.dp
2225
import to.bitkit.R
26+
import to.bitkit.ui.activityListViewModel
27+
import to.bitkit.ui.appViewModel
2328
import to.bitkit.ui.components.PrimaryButton
2429
import to.bitkit.ui.components.SecondaryButton
2530
import to.bitkit.ui.components.TagButton
2631
import 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

Comments
 (0)