diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/SearchViewModel.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/SearchViewModel.kt index 4b5bbf12..5099ee10 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/SearchViewModel.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/SearchViewModel.kt @@ -92,9 +92,9 @@ class SearchViewModel : } sealed interface SearchUiIntent : UiIntent { - object Init : SearchUiIntent + data object Init : SearchUiIntent - object ClearSearchHistory : SearchUiIntent + data object ClearSearchHistory : SearchUiIntent data class SubmitKeyword(val keyword: String) : SearchUiIntent } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/forum/SearchForumPage.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/forum/SearchForumPage.kt index 8c52b87f..c827cc22 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/forum/SearchForumPage.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/forum/SearchForumPage.kt @@ -19,6 +19,7 @@ import androidx.compose.material.pullrefresh.PullRefreshIndicator import androidx.compose.material.pullrefresh.pullRefresh import androidx.compose.material.pullrefresh.rememberPullRefreshState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember @@ -37,6 +38,7 @@ import com.huanchengfly.tieba.post.ui.page.destinations.ForumPageDestination import com.huanchengfly.tieba.post.ui.widgets.Chip import com.huanchengfly.tieba.post.ui.widgets.compose.Avatar import com.huanchengfly.tieba.post.ui.widgets.compose.LazyLoad +import com.huanchengfly.tieba.post.ui.widgets.compose.LocalShouldLoad import com.huanchengfly.tieba.post.ui.widgets.compose.Sizes import kotlinx.collections.immutable.persistentListOf @@ -51,6 +53,17 @@ fun SearchForumPage( viewModel.send(SearchForumUiIntent.Refresh(keyword)) viewModel.initialized = true } + + val shouldLoad = LocalShouldLoad.current + LaunchedEffect(keyword) { + if (viewModel.initialized) { + if (shouldLoad) { + viewModel.send(SearchForumUiIntent.Refresh(keyword)) + } else { + viewModel.initialized = false + } + } + } val isRefreshing by viewModel.uiState.collectPartialAsState( prop1 = SearchForumUiState::isRefreshing, initial = false diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/thread/SearchThreadPage.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/thread/SearchThreadPage.kt index d701ea6b..ea877736 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/thread/SearchThreadPage.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/thread/SearchThreadPage.kt @@ -15,6 +15,7 @@ import androidx.compose.material.pullrefresh.PullRefreshIndicator import androidx.compose.material.pullrefresh.pullRefresh import androidx.compose.material.pullrefresh.rememberPullRefreshState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -34,6 +35,7 @@ import com.huanchengfly.tieba.post.ui.widgets.compose.Card import com.huanchengfly.tieba.post.ui.widgets.compose.ForumInfoChip import com.huanchengfly.tieba.post.ui.widgets.compose.LazyLoad import com.huanchengfly.tieba.post.ui.widgets.compose.LoadMoreLayout +import com.huanchengfly.tieba.post.ui.widgets.compose.LocalShouldLoad import com.huanchengfly.tieba.post.ui.widgets.compose.Sizes import com.huanchengfly.tieba.post.ui.widgets.compose.ThreadAgreeBtn import com.huanchengfly.tieba.post.ui.widgets.compose.ThreadContent @@ -86,6 +88,16 @@ fun SearchThreadPage( prop1 = SearchThreadUiState::sortType, initial = initialSortType ) + val shouldLoad = LocalShouldLoad.current + LaunchedEffect(keyword) { + if (viewModel.initialized) { + if (shouldLoad) { + viewModel.send(SearchThreadUiIntent.Refresh(keyword, sortType)) + } else { + viewModel.initialized = false + } + } + } onGlobalEvent { viewModel.send(SearchThreadUiIntent.Refresh(keyword, it.sortType)) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/user/SearchUserPage.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/user/SearchUserPage.kt index ba1cfe56..a812046b 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/user/SearchUserPage.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/page/search/user/SearchUserPage.kt @@ -19,6 +19,7 @@ import androidx.compose.material.pullrefresh.PullRefreshIndicator import androidx.compose.material.pullrefresh.pullRefresh import androidx.compose.material.pullrefresh.rememberPullRefreshState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember @@ -37,6 +38,7 @@ import com.huanchengfly.tieba.post.ui.page.LocalNavigator import com.huanchengfly.tieba.post.ui.widgets.Chip import com.huanchengfly.tieba.post.ui.widgets.compose.Avatar import com.huanchengfly.tieba.post.ui.widgets.compose.LazyLoad +import com.huanchengfly.tieba.post.ui.widgets.compose.LocalShouldLoad import com.huanchengfly.tieba.post.ui.widgets.compose.Sizes import com.huanchengfly.tieba.post.utils.StringUtil import kotlinx.collections.immutable.persistentListOf @@ -53,6 +55,16 @@ fun SearchUserPage( viewModel.send(SearchUserUiIntent.Refresh(keyword)) viewModel.initialized = true } + val shouldLoad = LocalShouldLoad.current + LaunchedEffect(keyword) { + if (viewModel.initialized) { + if (shouldLoad) { + viewModel.send(SearchUserUiIntent.Refresh(keyword)) + } else { + viewModel.initialized = false + } + } + } val isRefreshing by viewModel.uiState.collectPartialAsState( prop1 = SearchUserUiState::isRefreshing, initial = false