Refactor: Enhance server join flow and navigation

- Modified `DiscoverServersList` to accept an `onJoinToServerSuccess` callback, which is invoked with the server ID upon successful joining.
- Updated `ServerInviteHandler` to pass the server ID to the `onJoinSuccess` callback.
- Integrated the `onJoinToServerSuccess` callback in `ChannelSideDrawer` to navigate to the joined server after a successful join from the discover servers list.
This commit is contained in:
AbronStudio 2025-08-06 10:00:09 +03:30
parent 39a948be1f
commit 0081ebc0c9
3 changed files with 15 additions and 17 deletions

View File

@ -33,10 +33,11 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import chat.revolt.R
import chat.revolt.api.routes.googlesheets.ServerData
import chat.revolt.composables.screens.chat.discover.ServerInviteHandler
@Composable
fun DiscoverServersList() {
fun DiscoverServersList(
onJoinToServerSuccess: (String) -> Unit,
) {
val viewModel = hiltViewModel<DiscoverServersListViewModel>()
val uiState by viewModel.uiState.collectAsState()
@ -47,14 +48,12 @@ fun DiscoverServersList() {
selectedServer?.let { server ->
ServerInviteHandler(
inviteCode = inviteCode,
serverId = server.id,
viewModel = viewModel,
onDismiss = {
viewModel.setSelectedInviteCode(null)
},
onJoinSuccess = {
// Show a success message or navigate to the joined server
viewModel.setSelectedInviteCode(null)
onJoinSuccess = { serverId ->
onJoinToServerSuccess(serverId)
}
)
}

View File

@ -1,28 +1,23 @@
package chat.revolt.composables.screens.chat.discover
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.hilt.navigation.compose.hiltViewModel
import chat.revolt.api.RevoltError
import chat.revolt.api.schemas.Invite
import chat.revolt.api.schemas.RsResult
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@Composable
fun ServerInviteHandler(
inviteCode: String,
serverId: String,
viewModel: DiscoverServersListViewModel = viewModel(),
viewModel: DiscoverServersListViewModel = hiltViewModel(),
onDismiss: () -> Unit = {},
onJoinSuccess: () -> Unit = {}
onJoinSuccess: (String) -> Unit = {}
) {
val scope = rememberCoroutineScope()
var isJoining by remember { mutableStateOf(false) }
@ -46,7 +41,10 @@ fun ServerInviteHandler(
if (result.ok) {
showDialog = false
viewModel.clearLoadedData()
onJoinSuccess()
uiState.loadedInviteData?.serverId?.let { serverId ->
onJoinSuccess(serverId)
}
} else {
error = result.error
}

View File

@ -461,7 +461,6 @@ fun ChannelSideDrawer(
serverBannerHeight + WindowInsets.statusBars.asPaddingValues()
.calculateTopPadding()
)
//.offset(y = WindowInsets.statusBars.asPaddingValues().calculateTopPadding())
) {
if (server?.banner != null) {
RemoteImage(
@ -562,7 +561,9 @@ fun ChannelSideDrawer(
}
}
if (currentDestination is ChatRouterDestination.Discover) {
DiscoverServersList()
DiscoverServersList(
onJoinToServerSuccess = navigateToServer
)
} else {
if (currentServer == null) {
DirectMessagesChannelListRenderer(