@@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.size
1414import androidx.compose.foundation.layout.systemBarsPadding
1515import androidx.compose.material3.Icon
1616import androidx.compose.runtime.Composable
17- import androidx.compose.runtime.collectAsState
1817import androidx.compose.runtime.getValue
1918import androidx.compose.runtime.mutableStateOf
2019import androidx.compose.runtime.remember
@@ -26,31 +25,41 @@ import androidx.compose.ui.res.painterResource
2625import androidx.compose.ui.res.stringResource
2726import androidx.compose.ui.tooling.preview.Preview
2827import androidx.compose.ui.unit.dp
28+ import com.synonym.bitkitcore.Activity
2929import to.bitkit.R
3030import to.bitkit.models.BalanceState
3131import to.bitkit.ui.LocalBalances
32- import to.bitkit.ui.activityListViewModel
3332import to.bitkit.ui.components.BalanceHeaderView
3433import to.bitkit.ui.components.EmptyStateView
3534import to.bitkit.ui.components.SecondaryButton
35+ import to.bitkit.ui.components.TabBar
3636import to.bitkit.ui.scaffold.AppTopBar
3737import to.bitkit.ui.scaffold.ScreenColumn
3838import to.bitkit.ui.screens.wallets.activity.components.ActivityListGrouped
39+ import to.bitkit.ui.screens.wallets.activity.utils.previewOnchainActivityItems
3940import to.bitkit.ui.theme.AppThemeSurface
4041import to.bitkit.ui.theme.Colors
4142import to.bitkit.ui.utils.withAccent
4243
4344@Composable
4445fun SavingsWalletScreen (
46+ isGeoBlocked : Boolean ,
47+ onchainActivities : List <Activity >,
4548 onAllActivityButtonClick : () -> Unit ,
4649 onEmptyActivityRowClick : () -> Unit ,
4750 onActivityItemClick : (String ) -> Unit ,
4851 onTransferToSpendingClick : () -> Unit ,
4952 onBackClick : () -> Unit ,
5053 balances : BalanceState = LocalBalances .current,
5154) {
52- val showEmptyState by remember(balances.totalOnchainSats) {
53- mutableStateOf(balances.totalOnchainSats == 0uL ) // TODO use && hasOnchainActivity
55+ val showEmptyState by remember(balances.totalOnchainSats, onchainActivities.size) {
56+ val hasFunds = balances.totalOnchainSats > 0uL
57+ val hasActivity = onchainActivities.isNotEmpty()
58+ mutableStateOf(! hasFunds && ! hasActivity)
59+ }
60+ val canTransfer by remember(balances.totalOnchainSats) {
61+ val hasFunds = balances.totalOnchainSats > 0uL
62+ mutableStateOf(hasFunds && ! isGeoBlocked)
5463 }
5564
5665 Box (
@@ -85,21 +94,22 @@ fun SavingsWalletScreen(
8594 )
8695 if (! showEmptyState) {
8796 Spacer (modifier = Modifier .height(32 .dp))
88- SecondaryButton (
89- onClick = onTransferToSpendingClick,
90- text = " Transfer To Spending" , // TODO add missing localized text
91- icon = {
92- Icon (
93- painter = painterResource(R .drawable.ic_transfer),
94- contentDescription = null ,
95- modifier = Modifier .size(16 .dp),
96- )
97- },
98- modifier = Modifier .testTag(" TransferToSpending" )
99- )
10097
101- val activity = activityListViewModel ? : return @Column
102- val onchainActivities by activity.onchainActivities.collectAsState()
98+ if (canTransfer) {
99+ SecondaryButton (
100+ onClick = onTransferToSpendingClick,
101+ text = " Transfer To Spending" , // TODO add missing localized text
102+ icon = {
103+ Icon (
104+ painter = painterResource(R .drawable.ic_transfer),
105+ contentDescription = null ,
106+ modifier = Modifier .size(16 .dp),
107+ )
108+ },
109+ modifier = Modifier .testTag(" TransferToSpending" )
110+ )
111+ }
112+
103113 ActivityListGrouped (
104114 items = onchainActivities,
105115 onActivityItemClick = onActivityItemClick,
@@ -125,27 +135,77 @@ fun SavingsWalletScreen(
125135@Composable
126136private fun Preview () {
127137 AppThemeSurface {
128- SavingsWalletScreen (
129- onAllActivityButtonClick = {},
130- onActivityItemClick = {},
131- onEmptyActivityRowClick = {},
132- onTransferToSpendingClick = {},
133- onBackClick = {},
134- balances = BalanceState (totalOnchainSats = 50_000u ),
135- )
138+ Box {
139+ SavingsWalletScreen (
140+ isGeoBlocked = false ,
141+ onchainActivities = previewOnchainActivityItems(),
142+ onAllActivityButtonClick = {},
143+ onActivityItemClick = {},
144+ onEmptyActivityRowClick = {},
145+ onTransferToSpendingClick = {},
146+ onBackClick = {},
147+ balances = BalanceState (totalOnchainSats = 50_000u ),
148+ )
149+ TabBar ()
150+ }
151+ }
152+ }
153+
154+ @Preview(showSystemUi = true )
155+ @Composable
156+ private fun PreviewNoActivity () {
157+ AppThemeSurface {
158+ Box {
159+ SavingsWalletScreen (
160+ isGeoBlocked = false ,
161+ onchainActivities = emptyList(),
162+ onAllActivityButtonClick = {},
163+ onActivityItemClick = {},
164+ onEmptyActivityRowClick = {},
165+ onTransferToSpendingClick = {},
166+ onBackClick = {},
167+ balances = BalanceState (totalOnchainSats = 50_000u ),
168+ )
169+ TabBar ()
170+ }
171+ }
172+ }
173+
174+ @Preview(showSystemUi = true )
175+ @Composable
176+ private fun PreviewGeoBlocked () {
177+ AppThemeSurface {
178+ Box {
179+ SavingsWalletScreen (
180+ isGeoBlocked = true ,
181+ onchainActivities = previewOnchainActivityItems(),
182+ onAllActivityButtonClick = {},
183+ onActivityItemClick = {},
184+ onEmptyActivityRowClick = {},
185+ onTransferToSpendingClick = {},
186+ onBackClick = {},
187+ balances = BalanceState (totalOnchainSats = 50_000u ),
188+ )
189+ TabBar ()
190+ }
136191 }
137192}
138193
139194@Preview(showSystemUi = true )
140195@Composable
141196private fun PreviewEmpty () {
142197 AppThemeSurface {
143- SavingsWalletScreen (
144- onAllActivityButtonClick = {},
145- onActivityItemClick = {},
146- onEmptyActivityRowClick = {},
147- onTransferToSpendingClick = {},
148- onBackClick = {},
149- )
198+ Box {
199+ SavingsWalletScreen (
200+ isGeoBlocked = false ,
201+ onchainActivities = emptyList(),
202+ onAllActivityButtonClick = {},
203+ onActivityItemClick = {},
204+ onEmptyActivityRowClick = {},
205+ onTransferToSpendingClick = {},
206+ onBackClick = {},
207+ )
208+ TabBar ()
209+ }
150210 }
151211}
0 commit comments