diff --git a/subvt/src/main/java/io/helikon/subvt/ui/screen/validator/my/MyValidatorsScreen.kt b/subvt/src/main/java/io/helikon/subvt/ui/screen/validator/my/MyValidatorsScreen.kt index 5f12f64..279f3f2 100644 --- a/subvt/src/main/java/io/helikon/subvt/ui/screen/validator/my/MyValidatorsScreen.kt +++ b/subvt/src/main/java/io/helikon/subvt/ui/screen/validator/my/MyValidatorsScreen.kt @@ -40,6 +40,7 @@ import androidx.compose.ui.layout.positionInParent import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.zIndex @@ -57,14 +58,17 @@ import io.helikon.subvt.ui.screen.validator.list.ValidatorSummaryView import io.helikon.subvt.ui.style.Color import io.helikon.subvt.ui.style.Font import io.helikon.subvt.ui.util.ThemePreviews +import kotlinx.coroutines.delay import kotlin.math.abs data class MyValidatorsScreenState( val dataRequestState: DataRequestState, val networks: List, - val validators: List, + val validators: List?, ) +private const val REFRESH_PERIOD_MS = 15_000L + @Composable fun MyValidatorsScreen( modifier: Modifier = Modifier, @@ -81,6 +85,13 @@ fun MyValidatorsScreen( } } + LaunchedEffect(viewModel.dataRequestState) { + if (viewModel.dataRequestState is DataRequestState.Success) { + delay(REFRESH_PERIOD_MS) + viewModel.getMyValidators() + } + } + MyValidatorsScreenContent( modifier = modifier, isDark = isDark, @@ -214,7 +225,7 @@ fun MyValidatorsScreenContent( ) } items( - state.validators, + state.validators ?: listOf(), key = { it.accountId.getBytes() }, @@ -246,7 +257,16 @@ fun MyValidatorsScreenContent( ) } } - if (state.dataRequestState is DataRequestState.Success) { + if (state.dataRequestState !is DataRequestState.Error && state.validators != null) { + if (state.validators.isEmpty()) { + Text( + modifier = Modifier.align(Alignment.Center).zIndex(5.0f), + textAlign = TextAlign.Center, + text = stringResource(id = R.string.my_validators_no_validators), + style = Font.light(14.sp), + color = Color.text(isDark), + ) + } Column( modifier = Modifier diff --git a/subvt/src/main/java/io/helikon/subvt/ui/screen/validator/my/MyValidatorsViewModel.kt b/subvt/src/main/java/io/helikon/subvt/ui/screen/validator/my/MyValidatorsViewModel.kt index 486a0d0..d991640 100644 --- a/subvt/src/main/java/io/helikon/subvt/ui/screen/validator/my/MyValidatorsViewModel.kt +++ b/subvt/src/main/java/io/helikon/subvt/ui/screen/validator/my/MyValidatorsViewModel.kt @@ -16,6 +16,7 @@ import io.helikon.subvt.data.model.app.ValidatorSummary import io.helikon.subvt.data.repository.NetworkRepository import io.helikon.subvt.data.service.AppService import io.helikon.subvt.data.service.ReportService +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -36,7 +37,7 @@ class MyValidatorsViewModel ) private lateinit var reportServices: List> - var validators by mutableStateOf(listOf().toImmutableList()) + var validators by mutableStateOf?>(null) private set var dataRequestState by mutableStateOf>(DataRequestState.Idle) private set @@ -78,18 +79,26 @@ class MyValidatorsViewModel validatorSummaries.add(validatorSummaryReport.validatorSummary) } } else { + /* dataRequestState = DataRequestState.Error(validatorSummaryResult.exceptionOrNull()) return@launch + */ } } validatorSummaries.sortWith(validatorIdentityComparator) validators = validatorSummaries.toImmutableList() dataRequestState = DataRequestState.Success("") } else { + if (validators?.isEmpty() == true) { + validators = null + } dataRequestState = DataRequestState.Error(result.exceptionOrNull()) } } catch (e: Throwable) { + if (validators?.isEmpty() == true) { + validators = null + } dataRequestState = DataRequestState.Error(e) } } diff --git a/subvt/src/main/res/values/strings.xml b/subvt/src/main/res/values/strings.xml index 2a8d4a6..34a0f3b 100644 --- a/subvt/src/main/res/values/strings.xml +++ b/subvt/src/main/res/values/strings.xml @@ -60,6 +60,7 @@ My Validators My Validators Add Validator + You haven\'t added\nany validators. Error while fetching your validators. Notifications