Updated on 2026-08-14

This commit is contained in:
Tangem 2026-03-26 16:28:00 +04:00
parent f9f2ac60d0
commit c76d1de3cf
15 changed files with 211 additions and 84 deletions

View file

@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.decompose.model.getOrCreateModel
@ -21,7 +22,7 @@ internal class ScanFailsComponent @AssistedInject constructor(
private val model: ScanFailsModel = getOrCreateModel(params)
override suspend fun show(source: ScanFailsRequester.Source): ScanFailsRequester.Result {
override suspend fun show(source: AnalyticsParam.ScreensSources): ScanFailsRequester.Result {
model.show(source)
return model.waitResult()
}

View file

@ -30,14 +30,13 @@ internal class ScanFailsModel @Inject constructor(
val uiState: StateFlow<ScanFailsUM>
field = MutableStateFlow(ScanFailsUM(onDismiss = ::dismiss))
fun show(source: ScanFailsRequester.Source) {
val analyticsSource = source.toAnalyticsSource()
fun show(source: AnalyticsParam.ScreensSources) {
result.value = null
uiState.update {
ScanFailsUM(
isShown = true,
onHowToScan = { onHowToScan(analyticsSource) },
onRequestSupport = { onRequestSupport(analyticsSource) },
onHowToScan = { onHowToScan(source) },
onRequestSupport = { onRequestSupport(source) },
onDismiss = ::dismiss,
)
}
@ -70,11 +69,4 @@ internal class ScanFailsModel @Inject constructor(
sendFeedbackEmailUseCase(type = FeedbackEmailType.ScanningProblem)
}
}
private fun ScanFailsRequester.Source.toAnalyticsSource(): AnalyticsParam.ScreensSources = when (this) {
ScanFailsRequester.Source.MAIN -> AnalyticsParam.ScreensSources.Main
ScanFailsRequester.Source.SIGN_IN -> AnalyticsParam.ScreensSources.SignIn
ScanFailsRequester.Source.SETTINGS -> AnalyticsParam.ScreensSources.Settings
ScanFailsRequester.Source.INTRO -> AnalyticsParam.ScreensSources.Intro
}
}

View file

@ -1,5 +1,6 @@
package com.tangem.tap.features.scanfails
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.domain.card.ScanFailsRequester
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.filterNotNull
@ -13,7 +14,7 @@ class ScanFailsRequesterProxy @Inject constructor() : ScanFailsRequester {
val componentRequester = MutableStateFlow<ScanFailsRequester?>(null)
override suspend fun show(source: ScanFailsRequester.Source): ScanFailsRequester.Result {
override suspend fun show(source: AnalyticsParam.ScreensSources): ScanFailsRequester.Result {
return withTimeout(timeMillis = 1000) {
componentRequester.filterNotNull().first()
}.show(source)

View file

@ -2,7 +2,9 @@ package com.tangem.tap.features.scanfails.di
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.decompose.model.Model
import com.tangem.domain.card.ScanFailsCounter
import com.tangem.domain.card.ScanFailsRequester
import com.tangem.tap.domain.scanCard.DefaultScanFailsCounter
import com.tangem.tap.features.scanfails.ScanFailsComponent
import com.tangem.tap.features.scanfails.ScanFailsModel
import com.tangem.tap.features.scanfails.ScanFailsRequesterProxy
@ -29,4 +31,8 @@ internal interface ScanFailsModule {
@Binds
@Singleton
fun bindRequester(impl: ScanFailsRequesterProxy): ScanFailsRequester
@Binds
@Singleton
fun bindScanFailsCounter(impl: DefaultScanFailsCounter): ScanFailsCounter
}