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:
parent
39a948be1f
commit
0081ebc0c9
|
|
@ -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)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Reference in New Issue