1
1
package com.troplo.privateuploader
2
2
3
+ import androidx.compose.foundation.layout.Column
4
+ import androidx.compose.foundation.layout.Spacer
5
+ import androidx.compose.foundation.layout.fillMaxSize
6
+ import androidx.compose.foundation.layout.height
3
7
import androidx.compose.foundation.layout.padding
8
+ import androidx.compose.foundation.rememberScrollState
9
+ import androidx.compose.foundation.verticalScroll
10
+ import androidx.compose.material.ExperimentalMaterialApi
4
11
import androidx.compose.material3.ExperimentalMaterial3Api
12
+ import androidx.compose.material3.ModalDrawerSheet
5
13
import androidx.compose.material3.Scaffold
6
14
import androidx.compose.runtime.Composable
15
+ import androidx.compose.runtime.LaunchedEffect
16
+ import androidx.compose.runtime.getValue
17
+ import androidx.compose.runtime.mutableStateOf
18
+ import androidx.compose.runtime.remember
19
+ import androidx.compose.runtime.setValue
7
20
import androidx.compose.ui.Modifier
8
21
import androidx.compose.ui.platform.LocalContext
22
+ import androidx.compose.ui.unit.dp
9
23
import androidx.navigation.compose.rememberNavController
24
+ import com.troplo.privateuploader.api.ChatStore
10
25
import com.troplo.privateuploader.api.SessionManager
11
26
import com.troplo.privateuploader.api.SocketHandler
12
27
import com.troplo.privateuploader.api.UserHandler
28
+ import com.troplo.privateuploader.components.chat.MemberSidebar
13
29
import com.troplo.privateuploader.components.core.BottomBarNav
14
30
import com.troplo.privateuploader.components.core.NavGraph
31
+ import com.troplo.privateuploader.components.core.NavRoute
32
+ import com.troplo.privateuploader.components.core.OverlappingPanels
33
+ import com.troplo.privateuploader.components.core.PanelSurface
15
34
import com.troplo.privateuploader.components.core.TopBarNav
35
+ import com.troplo.privateuploader.components.core.rememberOverlappingPanelsState
16
36
import com.troplo.privateuploader.data.model.User
17
- import io.socket.client.IO
18
- import io.socket.engineio.client.Socket
19
- import kotlinx.coroutines.Dispatchers
20
- import java.util.Collections
37
+ import com.troplo.privateuploader.screens.HomeScreen
21
38
22
- @OptIn(ExperimentalMaterial3Api ::class )
39
+ @OptIn(ExperimentalMaterial3Api ::class , ExperimentalMaterialApi :: class )
23
40
@Composable
24
41
fun MainScreen (user : User ? ) {
25
42
val context = LocalContext .current
26
- val token = SessionManager (context).fetchAuthToken ()
43
+ val token = SessionManager (context).getAuthToken ()
27
44
if (token != null ) {
28
45
SocketHandler .initializeSocket(token, context)
29
46
UserHandler .initializeUser(token)
30
47
}
31
48
val navController = rememberNavController()
49
+ val panelState = rememberOverlappingPanelsState()
50
+ var closePanels by remember { mutableStateOf(false ) }
51
+ val closePanelsFunc = {
52
+ closePanels = true
53
+ }
54
+ if (closePanels) {
55
+ LaunchedEffect (Unit ) {
56
+ panelState.closePanels()
57
+ closePanels = false
58
+ }
59
+ }
32
60
Scaffold (
33
61
topBar = { TopBarNav (navController = navController, user = user) },
34
- bottomBar = { BottomBarNav (navController = navController) }
62
+ bottomBar = { BottomBarNav (navController = navController, panelState = panelState, closePanels = closePanelsFunc ) },
35
63
) { paddingValues ->
36
- NavGraph (
37
- modifier = Modifier .padding(
38
- top = paddingValues.calculateTopPadding(),
39
- bottom = paddingValues.calculateBottomPadding()),
40
- navController = navController,
41
- user = user
64
+ OverlappingPanels (
65
+ modifier = Modifier .fillMaxSize(),
66
+ panelsState = panelState,
67
+ gesturesEnabled = true ,
68
+ panelStart = {
69
+ PanelSurface {
70
+ ModalDrawerSheet (
71
+ modifier = Modifier .padding(
72
+ top = paddingValues.calculateTopPadding(),
73
+ bottom = paddingValues.calculateBottomPadding())
74
+ ) {
75
+ Spacer (Modifier .height(12 .dp))
76
+ HomeScreen (
77
+ openChat = {
78
+ chatId ->
79
+ ChatStore .setAssociationId(chatId, context)
80
+ navController.navigate(" ${NavRoute .Chat .path} /$chatId " )
81
+ closePanels = true
82
+ },
83
+ panelState = panelState
84
+ )
85
+ }
86
+ }
87
+ },
88
+ panelCenter = {
89
+ PanelSurface {
90
+ NavGraph (
91
+ modifier = Modifier .padding(
92
+ top = paddingValues.calculateTopPadding(),
93
+ bottom = paddingValues.calculateBottomPadding()
94
+ ),
95
+ navController = navController,
96
+ user = user,
97
+ context,
98
+ panelsState = panelState
99
+ )
100
+ }
101
+ },
102
+ panelEnd = {
103
+ PanelSurface {
104
+ ModalDrawerSheet (
105
+ modifier = Modifier .padding(
106
+ top = paddingValues.calculateTopPadding(),
107
+ bottom = paddingValues.calculateBottomPadding()
108
+ )
109
+ ) {
110
+ Column (
111
+ modifier = Modifier
112
+ .verticalScroll(rememberScrollState())
113
+ .weight(weight = 1f , fill = false )
114
+
115
+ ) {
116
+ Spacer (Modifier .height(12 .dp))
117
+ MemberSidebar ()
118
+ }
119
+ }
120
+ }
121
+ }
42
122
)
43
123
}
44
124
}
0 commit comments