@@ -11,6 +11,8 @@ import kotlinx.coroutines.flow.update
1111import kotlinx.coroutines.launch
1212import to.bitkit.data.SettingsStore
1313import to.bitkit.di.BgDispatcher
14+ import to.bitkit.ext.isSent
15+ import to.bitkit.ext.isTransfer
1416import to.bitkit.ext.rawId
1517import to.bitkit.services.CoreService
1618import to.bitkit.utils.AddressChecker
@@ -28,13 +30,46 @@ class ActivityDetailViewModel @Inject constructor(
2830 private val _txDetails = MutableStateFlow <TxDetails ?>(null )
2931 val txDetails = _txDetails .asStateFlow()
3032
33+ private val _uiState = MutableStateFlow (ActivityDetailUiState (screenState = ActivityDetailScreenState .Loading ))
34+ val uiState = _uiState .asStateFlow()
35+
3136 private val _tags = MutableStateFlow <List <String >>(emptyList())
3237 val tags = _tags .asStateFlow()
3338
3439 private val _boostSheetVisible = MutableStateFlow (false )
3540 val boostSheetVisible = _boostSheetVisible .asStateFlow()
3641
3742 private var activity: Activity ? = null
43+ set(value) {
44+ value?.let { activity ->
45+ val paymentValue = when (activity) {
46+ is Activity .Lightning -> activity.v1.value
47+ is Activity .Onchain -> activity.v1.value
48+ }
49+ _uiState .update {
50+ it.copy( // TODO EXTRACT
51+ screenState = ActivityDetailScreenState .Success (
52+ isLightning = activity is Activity .Lightning ,
53+ isSent = activity.isSent(),
54+ timeStamp= when (activity) {
55+ is Activity .Lightning -> activity.v1.timestamp
56+ is Activity .Onchain -> when (activity.v1.confirmed) {
57+ true -> activity.v1.confirmTimestamp ? : activity.v1.timestamp
58+ else -> activity.v1.timestamp
59+ }
60+ },
61+ paymentValue = paymentValue,
62+ fee = when (activity) {
63+ is Activity .Lightning -> activity.v1.fee
64+ is Activity .Onchain -> activity.v1.fee
65+ },
66+ isSelfSend = activity.isSent() && paymentValue == 0uL ,
67+ isTransfer = activity.isTransfer()
68+ )
69+ )
70+ }
71+ }
72+ }
3873
3974 fun setActivity (activity : Activity ) {
4075 this .activity = activity
@@ -109,3 +144,21 @@ class ActivityDetailViewModel @Inject constructor(
109144 const val TAG = " ActivityDetailViewModel"
110145 }
111146}
147+
148+
149+ data class ActivityDetailUiState (
150+ val screenState : ActivityDetailScreenState = ActivityDetailScreenState .Loading ,
151+ )
152+
153+ sealed interface ActivityDetailScreenState {
154+ data object Loading : ActivityDetailScreenState
155+ data class Success (
156+ val isLightning : Boolean ,
157+ val isSent : Boolean ,
158+ val timeStamp : ULong ,
159+ val paymentValue : ULong ,
160+ val fee : ULong? ,
161+ val isSelfSend : Boolean ,
162+ val isTransfer : Boolean ,
163+ ) : ActivityDetailScreenState
164+ }
0 commit comments