@@ -11,15 +11,16 @@ import androidx.compose.runtime.remember
1111import androidx.compose.ui.Modifier
1212import androidx.lifecycle.compose.collectAsStateWithLifecycle
1313import androidx.navigation.compose.NavHost
14- import androidx.navigation.compose.composable
1514import androidx.navigation.compose.rememberNavController
1615import kotlinx.coroutines.coroutineScope
1716import kotlinx.coroutines.launch
17+ import kotlinx.serialization.Serializable
1818import to.bitkit.repositories.LightningState
1919import to.bitkit.ui.appViewModel
2020import to.bitkit.ui.blocktankViewModel
2121import to.bitkit.ui.screens.wallets.send.AddTagScreen
2222import to.bitkit.ui.shared.modifiers.sheetHeight
23+ import to.bitkit.ui.utils.composableWithDefaultTransitions
2324import to.bitkit.ui.walletViewModel
2425import to.bitkit.viewmodels.MainUiState
2526import to.bitkit.viewmodels.WalletViewModelEffects
@@ -59,9 +60,9 @@ fun ReceiveSheet(
5960 ) {
6061 NavHost (
6162 navController = navController,
62- startDestination = ReceiveRoutes .QR ,
63+ startDestination = ReceiveRoute .QR ,
6364 ) {
64- composable( ReceiveRoutes .QR ) {
65+ composableWithDefaultTransitions< ReceiveRoute .QR > {
6566 LaunchedEffect (cjitInvoice.value) {
6667 showCreateCjit.value = ! cjitInvoice.value.isNullOrBlank()
6768 }
@@ -70,7 +71,7 @@ fun ReceiveSheet(
7071 wallet.walletEffect.collect { effect ->
7172 when (effect) {
7273 WalletViewModelEffects .NavigateGeoBlockScreen -> {
73- navController.navigate(ReceiveRoutes . LOCATION_BLOCK )
74+ navController.navigate(ReceiveRoute . GeoBlock )
7475 }
7576 }
7677 }
@@ -82,7 +83,7 @@ fun ReceiveSheet(
8283 walletState = walletState,
8384 onCjitToggle = { active ->
8485 when {
85- active && lightningState.shouldBlockLightning -> navController.navigate(ReceiveRoutes . LOCATION_BLOCK )
86+ active && lightningState.shouldBlockLightning -> navController.navigate(ReceiveRoute . GeoBlock )
8687
8788 ! active -> {
8889 showCreateCjit.value = false
@@ -91,57 +92,57 @@ fun ReceiveSheet(
9192
9293 active && cjitInvoice.value == null -> {
9394 showCreateCjit.value = true
94- navController.navigate(ReceiveRoutes . AMOUNT )
95+ navController.navigate(ReceiveRoute . Amount )
9596 }
9697 }
9798 },
98- onClickEditInvoice = { navController.navigate(ReceiveRoutes . EDIT_INVOICE ) },
99+ onClickEditInvoice = { navController.navigate(ReceiveRoute . EditInvoice ) },
99100 onClickReceiveOnSpending = { wallet.toggleReceiveOnSpending() }
100101 )
101102 }
102- composable( ReceiveRoutes . AMOUNT ) {
103+ composableWithDefaultTransitions< ReceiveRoute . Amount > {
103104 ReceiveAmountScreen (
104105 onCjitCreated = { entry ->
105106 cjitEntryDetails.value = entry
106- navController.navigate(ReceiveRoutes . CONFIRM )
107+ navController.navigate(ReceiveRoute . Confirm )
107108 },
108109 onBack = { navController.popBackStack() },
109110 )
110111 }
111- composable( ReceiveRoutes . LOCATION_BLOCK ) {
112+ composableWithDefaultTransitions< ReceiveRoute . GeoBlock > {
112113 LocationBlockScreen (
113114 onBackPressed = { navController.popBackStack() },
114- navigateAdvancedSetup = navigateToExternalConnection
115+ navigateAdvancedSetup = navigateToExternalConnection,
115116 )
116117 }
117- composable( ReceiveRoutes . CONFIRM ) {
118+ composableWithDefaultTransitions< ReceiveRoute . Confirm > {
118119 cjitEntryDetails.value?.let { entryDetails ->
119120 ReceiveConfirmScreen (
120121 entry = entryDetails,
121- onLearnMore = { navController.navigate(ReceiveRoutes . LIQUIDITY ) },
122+ onLearnMore = { navController.navigate(ReceiveRoute . Liquidity ) },
122123 onContinue = { invoice ->
123124 cjitInvoice.value = invoice
124- navController.navigate(ReceiveRoutes .QR ) { popUpTo(ReceiveRoutes .QR ) { inclusive = true } }
125+ navController.navigate(ReceiveRoute .QR ) { popUpTo(ReceiveRoute .QR ) { inclusive = true } }
125126 },
126127 onBack = { navController.popBackStack() },
127128 )
128129 }
129130 }
130- composable( ReceiveRoutes . CONFIRM_INCREASE_INBOUND ) {
131+ composableWithDefaultTransitions< ReceiveRoute . ConfirmIncreaseInbound > {
131132 cjitEntryDetails.value?.let { entryDetails ->
132133 ReceiveConfirmScreen (
133134 entry = entryDetails,
134- onLearnMore = { navController.navigate(ReceiveRoutes . LIQUIDITY_ADDITIONAL ) },
135+ onLearnMore = { navController.navigate(ReceiveRoute . LiquidityAdditional ) },
135136 onContinue = { invoice ->
136137 cjitInvoice.value = invoice
137- navController.navigate(ReceiveRoutes .QR ) { popUpTo(ReceiveRoutes .QR ) { inclusive = true } }
138+ navController.navigate(ReceiveRoute .QR ) { popUpTo(ReceiveRoute .QR ) { inclusive = true } }
138139 },
139140 isAdditional = true ,
140141 onBack = { navController.popBackStack() },
141142 )
142143 }
143144 }
144- composable( ReceiveRoutes . LIQUIDITY ) {
145+ composableWithDefaultTransitions< ReceiveRoute . Liquidity > {
145146 cjitEntryDetails.value?.let { entryDetails ->
146147 ReceiveLiquidityScreen (
147148 entry = entryDetails,
@@ -150,7 +151,7 @@ fun ReceiveSheet(
150151 )
151152 }
152153 }
153- composable( ReceiveRoutes . LIQUIDITY_ADDITIONAL ) {
154+ composableWithDefaultTransitions< ReceiveRoute . LiquidityAdditional > {
154155 cjitEntryDetails.value?.let { entryDetails ->
155156 ReceiveLiquidityScreen (
156157 entry = entryDetails,
@@ -160,7 +161,7 @@ fun ReceiveSheet(
160161 )
161162 }
162163 }
163- composable( ReceiveRoutes . EDIT_INVOICE ) {
164+ composableWithDefaultTransitions< ReceiveRoute . EditInvoice > {
164165 val walletUiState by wallet.walletState.collectAsStateWithLifecycle()
165166 EditInvoiceScreen (
166167 walletUiState = walletUiState,
@@ -169,7 +170,7 @@ fun ReceiveSheet(
169170 wallet.updateBip21Invoice(amountSats = sats)
170171 },
171172 onClickAddTag = {
172- navController.navigate(ReceiveRoutes . ADD_TAG )
173+ navController.navigate(ReceiveRoute . AddTag )
173174 },
174175 onClickTag = { tagToRemove ->
175176 wallet.removeTag(tagToRemove)
@@ -182,11 +183,11 @@ fun ReceiveSheet(
182183 },
183184 navigateReceiveConfirm = { entry ->
184185 cjitEntryDetails.value = entry
185- navController.navigate(ReceiveRoutes . CONFIRM_INCREASE_INBOUND )
186+ navController.navigate(ReceiveRoute . ConfirmIncreaseInbound )
186187 }
187188 )
188189 }
189- composable( ReceiveRoutes . ADD_TAG ) {
190+ composableWithDefaultTransitions< ReceiveRoute . AddTag > {
190191 AddTagScreen (
191192 onBack = {
192193 navController.popBackStack()
@@ -196,20 +197,36 @@ fun ReceiveSheet(
196197 navController.popBackStack()
197198 }
198199 )
199-
200200 }
201201 }
202202 }
203203}
204204
205- private object ReceiveRoutes {
206- const val QR = " qr"
207- const val AMOUNT = " amount"
208- const val CONFIRM = " confirm"
209- const val CONFIRM_INCREASE_INBOUND = " confirm_increase_inbound"
210- const val LIQUIDITY = " liquidity"
211- const val LIQUIDITY_ADDITIONAL = " liquidity_additional"
212- const val EDIT_INVOICE = " edit_invoice"
213- const val ADD_TAG = " add_tag"
214- const val LOCATION_BLOCK = " location_block"
205+ sealed interface ReceiveRoute {
206+ @Serializable
207+ data object QR : ReceiveRoute
208+
209+ @Serializable
210+ data object Amount : ReceiveRoute
211+
212+ @Serializable
213+ data object Confirm : ReceiveRoute
214+
215+ @Serializable
216+ data object ConfirmIncreaseInbound : ReceiveRoute
217+
218+ @Serializable
219+ data object Liquidity : ReceiveRoute
220+
221+ @Serializable
222+ data object LiquidityAdditional : ReceiveRoute
223+
224+ @Serializable
225+ data object EditInvoice : ReceiveRoute
226+
227+ @Serializable
228+ data object AddTag : ReceiveRoute
229+
230+ @Serializable
231+ data object GeoBlock : ReceiveRoute
215232}
0 commit comments