From 138c0199c98edb1f2dfe9c4ffcd51c4fe8fed10e Mon Sep 17 00:00:00 2001 From: Kurdistan Tech Ministry Date: Sun, 8 Mar 2026 17:32:40 +0300 Subject: [PATCH] fix: auto-refresh Pezkuwi dashboard card after actions Add dashboardRefreshSignal to trigger re-fetch on swipe-to-refresh, onResume, citizenship bottom sheet dismiss, and score tracking. Rename button label to "Apply & Actions (KYC)" for clarity. --- common/src/main/res/values/strings.xml | 2 +- .../presentation/balance/list/BalanceListFragment.kt | 9 +++++++++ .../balance/list/BalanceListViewModel.kt | 12 ++++++++++-- .../citizenship/CitizenshipBottomSheet.kt | 6 ++++++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 7e68305..b5bd1c1 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -2764,7 +2764,7 @@ Pezkuwi Trust Score - Apply & Actions + Apply & Actions (KYC) Use our Telegram MiniApp for Digital Kurdistan citizenship services.\n\nTo earn PEZ rewards, you must hold a Welatî ticket and stake at least 10 HEZ.\n\nNon-citizens can only benefit from HEZ rewards. Start Tracking Score tracking started! diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListFragment.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListFragment.kt index e412963..c9d57b4 100644 --- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListFragment.kt +++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListFragment.kt @@ -120,10 +120,19 @@ class BalanceListFragment : .inject(this) } + override fun onResume() { + super.onResume() + viewModel.refreshDashboard() + } + override fun subscribe(viewModel: BalanceListViewModel) { setupBuySellSelectorMixin(viewModel.buySellSelectorMixin) observeBrowserEvents(viewModel) + childFragmentManager.setFragmentResultListener("citizenship_dismissed", viewLifecycleOwner) { _, _ -> + viewModel.refreshDashboard() + } + viewModel.pezkuwiDashboardFlow.observe { model -> if (model != null) { pezkuwiDashboardAdapter.setModel(model) diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListViewModel.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListViewModel.kt index 43d54f2..571568e 100644 --- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListViewModel.kt +++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListViewModel.kt @@ -73,6 +73,7 @@ import io.novafoundation.nova.runtime.multiNetwork.chain.model.Chain import io.novasama.substrate_sdk_android.runtime.extrinsic.call import java.text.NumberFormat import kotlinx.coroutines.async +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged @@ -135,6 +136,8 @@ class BalanceListViewModel( private val _trackingLoading = MutableLiveData(false) val trackingLoading: LiveData = _trackingLoading + private val dashboardRefreshSignal = MutableStateFlow(0) + val bannersMixin = promotionBannersMixinFactory.create(bannerSourceFactory.assetsSource(), viewModelScope) private val selectedCurrency = currencyInteractor.observeSelectCurrency() @@ -245,6 +248,7 @@ class BalanceListViewModel( .shareInBackground() val pezkuwiDashboardFlow = selectedMetaAccount + .combine(dashboardRefreshSignal) { account, _ -> account } .mapLatest { metaAccount -> pezkuwiDashboardInteractor.getDashboard(metaAccount) .map { data -> @@ -291,11 +295,15 @@ class BalanceListViewModel( fun fullSync() { viewModelScope.launch { syncWith(fullSyncActions, selectedMetaAccount.first()) - + refreshDashboard() _hideRefreshEvent.value = Event(Unit) } } + fun refreshDashboard() { + dashboardRefreshSignal.value++ + } + fun assetClicked(asset: Chain.Asset) { val payload = AssetPayload( chainId = asset.chainId, @@ -455,7 +463,7 @@ class BalanceListViewModel( } result.getOrThrow() _showTrackingSuccessEvent.postValue(Event(Unit)) - fullSync() + refreshDashboard() } catch (e: Exception) { showError(e.message ?: "Score tracking failed") } finally { diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipBottomSheet.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipBottomSheet.kt index 646b0a7..1f7472b 100644 --- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipBottomSheet.kt +++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipBottomSheet.kt @@ -1,5 +1,6 @@ package io.novafoundation.nova.feature_assets.presentation.citizenship +import android.content.DialogInterface import android.content.Intent import android.content.res.ColorStateList import android.graphics.Color @@ -34,6 +35,11 @@ class CitizenshipBottomSheet : BaseBottomSheetFragment( requireContext(),