Skip to content

Commit da1d5ee

Browse files
committed
chore(fc): allow confirmation models to be dismissable outside
Signed-off-by: Brandon McAnsh <[email protected]>
1 parent 32a9b05 commit da1d5ee

File tree

2 files changed

+45
-23
lines changed

2 files changed

+45
-23
lines changed

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/payments/PaymentScaffold.kt

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
77
import androidx.compose.foundation.layout.Box
88
import androidx.compose.foundation.layout.fillMaxSize
99
import androidx.compose.runtime.Composable
10+
import androidx.compose.runtime.State
1011
import androidx.compose.runtime.collectAsState
1112
import androidx.compose.runtime.derivedStateOf
1213
import androidx.compose.runtime.getValue
1314
import androidx.compose.runtime.remember
1415
import androidx.compose.ui.Alignment.Companion.BottomCenter
1516
import androidx.compose.ui.Modifier
1617
import androidx.compose.ui.draw.alpha
18+
import com.getcode.models.BillState
19+
import com.getcode.models.Confirmation
1720
import com.getcode.theme.Black40
1821
import com.getcode.ui.modals.TipConfirmation
1922
import com.getcode.ui.utils.AnimationUtils
@@ -28,36 +31,24 @@ fun PaymentScaffold(content: @Composable () -> Unit) {
2831
val state by payments.state.collectAsState()
2932
Box(modifier = Modifier.fillMaxSize()) {
3033
content()
31-
val showScrim by remember(state.billState) {
32-
derivedStateOf {
33-
val loginConfirmation = state.billState.loginConfirmation
34-
val paymentConfirmation = state.billState.privatePaymentConfirmation
35-
val socialPaymentConfirmation = state.billState.socialUserPaymentConfirmation
36-
val publicPaymentConfirmation = state.billState.publicPaymentConfirmation
37-
val messageTipPaymentConfirmation = state.billState.messageTipPaymentConfirmation
34+
val scrimDetails by rememberConfirmationDetails(state.billState)
3835

39-
listOf(
40-
loginConfirmation,
41-
paymentConfirmation,
42-
socialPaymentConfirmation,
43-
publicPaymentConfirmation,
44-
messageTipPaymentConfirmation
45-
).any {
46-
it?.showScrim == true
47-
}
48-
}
49-
}
36+
val scrimAlpha by animateFloatAsState(if (scrimDetails.show) 1f else 0f, label = "scrim visibility")
5037

51-
val scrimAlpha by animateFloatAsState(if (showScrim) 1f else 0f, label = "scrim visibility")
52-
53-
if (showScrim) {
38+
if (scrimDetails.show) {
5439
Box(
5540
modifier = Modifier
5641
.fillMaxSize()
5742
.alpha(scrimAlpha)
5843
.background(Black40)
59-
.rememberedClickable(indication = null,
60-
interactionSource = remember { MutableInteractionSource() }) {}
44+
.rememberedClickable(
45+
indication = null,
46+
interactionSource = remember { MutableInteractionSource() }
47+
) {
48+
if (scrimDetails.cancellable) {
49+
payments.cancelPayment()
50+
}
51+
}
6152
)
6253
}
6354

@@ -122,4 +113,29 @@ fun PaymentScaffold(content: @Composable () -> Unit) {
122113
}
123114
}
124115
}
116+
}
117+
118+
data class ScrimDetails(val show: Boolean, val cancellable: Boolean)
119+
120+
@Composable
121+
private fun rememberConfirmationDetails(billState: BillState): State<ScrimDetails> {
122+
return remember(billState) {
123+
derivedStateOf {
124+
val loginConfirmation = billState.loginConfirmation
125+
val paymentConfirmation = billState.privatePaymentConfirmation
126+
val socialPaymentConfirmation = billState.socialUserPaymentConfirmation
127+
val publicPaymentConfirmation = billState.publicPaymentConfirmation
128+
val messageTipPaymentConfirmation = billState.messageTipPaymentConfirmation
129+
130+
listOf(
131+
loginConfirmation,
132+
paymentConfirmation,
133+
socialPaymentConfirmation,
134+
publicPaymentConfirmation,
135+
messageTipPaymentConfirmation
136+
).firstNotNullOfOrNull { it }?.let { conf ->
137+
ScrimDetails(conf.showScrim, conf.cancellable)
138+
} ?: ScrimDetails(show = false, cancellable = false)
139+
}
140+
}
125141
}

libs/requests/src/main/kotlin/com/getcode/models/BillState.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ data class BillToast(
199199
sealed class Confirmation(
200200
open val showScrim: Boolean = false,
201201
open val state: ConfirmationState,
202+
open val cancellable: Boolean = false,
202203
)
203204

204205
data class PrivatePaymentConfirmation(
@@ -207,13 +208,15 @@ data class PrivatePaymentConfirmation(
207208
val requestedAmount: KinAmount,
208209
val localAmount: KinAmount,
209210
override val showScrim: Boolean = false,
211+
override val cancellable: Boolean = false,
210212
): Confirmation(showScrim, state)
211213

212214
data class LoginConfirmation(
213215
override val state: ConfirmationState,
214216
val payload: CodePayload,
215217
val domain: com.getcode.model.Domain,
216218
override val showScrim: Boolean = false,
219+
override val cancellable: Boolean = false,
217220
): Confirmation(showScrim, state)
218221

219222

@@ -223,6 +226,7 @@ data class PublicPaymentConfirmation(
223226
val destination: PublicKey,
224227
val metadata: ExtendedMetadata,
225228
override val showScrim: Boolean = true,
229+
override val cancellable: Boolean = true,
226230
): Confirmation(showScrim, state)
227231

228232
data class MessageTipPaymentConfirmation(
@@ -231,6 +235,7 @@ data class MessageTipPaymentConfirmation(
231235
val metadata: ExtendedMetadata,
232236
val balance: String?,
233237
override val showScrim: Boolean = true,
238+
override val cancellable: Boolean = true,
234239
): Confirmation(showScrim, state)
235240

236241
data class SocialUserPaymentConfirmation(
@@ -240,6 +245,7 @@ data class SocialUserPaymentConfirmation(
240245
val metadata: SocialUser,
241246
val isPrivate: Boolean = false,
242247
override val showScrim: Boolean = false,
248+
override val cancellable: Boolean = false,
243249
): Confirmation(showScrim, state) {
244250
val imageUrl: String?
245251
get() {

0 commit comments

Comments
 (0)