diff --git a/app/src/main/java/com/jerboa/model/CommunityListViewModel.kt b/app/src/main/java/com/jerboa/model/CommunityListViewModel.kt index e6876804e..b96f6953f 100644 --- a/app/src/main/java/com/jerboa/model/CommunityListViewModel.kt +++ b/app/src/main/java/com/jerboa/model/CommunityListViewModel.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.CreationExtras +import com.jerboa.DEBOUNCE_DELAY import com.jerboa.api.API import com.jerboa.api.ApiState import com.jerboa.api.toApiState @@ -17,6 +18,8 @@ import it.vercruysse.lemmyapi.datatypes.Search import it.vercruysse.lemmyapi.datatypes.SearchResponse import it.vercruysse.lemmyapi.dto.SearchType import it.vercruysse.lemmyapi.dto.SubscribedType +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay import kotlinx.coroutines.launch class CommunityListViewModel( @@ -24,9 +27,12 @@ class CommunityListViewModel( ) : ViewModel() { var searchRes: ApiState by mutableStateOf(ApiState.Empty) private set + private var fetchCommunitiesJob: Job? = null fun searchCommunities(form: Search) { - viewModelScope.launch { + fetchCommunitiesJob?.cancel() + fetchCommunitiesJob = viewModelScope.launch { + delay(DEBOUNCE_DELAY) searchRes = ApiState.Loading searchRes = API.getInstance().search(form).toApiState() } diff --git a/app/src/main/java/com/jerboa/ui/components/community/list/CommunityListScreen.kt b/app/src/main/java/com/jerboa/ui/components/community/list/CommunityListScreen.kt index 1796819f5..166534064 100644 --- a/app/src/main/java/com/jerboa/ui/components/community/list/CommunityListScreen.kt +++ b/app/src/main/java/com/jerboa/ui/components/community/list/CommunityListScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope @@ -19,7 +20,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.lifecycle.viewmodel.compose.viewModel -import com.jerboa.DEBOUNCE_DELAY import com.jerboa.JerboaAppState import com.jerboa.api.ApiState import com.jerboa.feat.BlurNSFW @@ -31,12 +31,8 @@ import it.vercruysse.lemmyapi.datatypes.CommunityFollowerView import it.vercruysse.lemmyapi.datatypes.Search import it.vercruysse.lemmyapi.dto.SearchType import it.vercruysse.lemmyapi.dto.SortType -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay import kotlinx.coroutines.launch -private var fetchCommunitiesJob: Job? = null - object CommunityListReturn { const val COMMUNITY = "community-list::return(community)" } @@ -58,6 +54,20 @@ fun CommunityListScreen( var search by rememberSaveable { mutableStateOf("") } + // Upon launch from process death + LaunchedEffect(Unit) { + if (search.isNotEmpty()) { + communityListViewModel.searchCommunities( + form = + Search( + q = search, + type_ = SearchType.Communities, + sort = SortType.TopAll, + ), + ) + } + } + val scope = rememberCoroutineScope() val baseModifier = if (padding == null) { @@ -85,19 +95,14 @@ fun CommunityListScreen( search = search, onSearchChange = { search = it - fetchCommunitiesJob?.cancel() - fetchCommunitiesJob = - scope.launch { - delay(DEBOUNCE_DELAY) - communityListViewModel.searchCommunities( - form = - Search( - q = search, - type_ = SearchType.Communities, - sort = SortType.TopAll, - ), - ) - } + communityListViewModel.searchCommunities( + form = + Search( + q = search, + type_ = SearchType.Communities, + sort = SortType.TopAll, + ), + ) }, ) },