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

View File

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

View File

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