11package com.troplo.privateuploader
22
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
37import androidx.compose.foundation.layout.padding
8+ import androidx.compose.foundation.rememberScrollState
9+ import androidx.compose.foundation.verticalScroll
10+ import androidx.compose.material.ExperimentalMaterialApi
411import androidx.compose.material3.ExperimentalMaterial3Api
12+ import androidx.compose.material3.ModalDrawerSheet
513import androidx.compose.material3.Scaffold
614import 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
720import androidx.compose.ui.Modifier
821import androidx.compose.ui.platform.LocalContext
22+ import androidx.compose.ui.unit.dp
923import androidx.navigation.compose.rememberNavController
24+ import com.troplo.privateuploader.api.ChatStore
1025import com.troplo.privateuploader.api.SessionManager
1126import com.troplo.privateuploader.api.SocketHandler
1227import com.troplo.privateuploader.api.UserHandler
28+ import com.troplo.privateuploader.components.chat.MemberSidebar
1329import com.troplo.privateuploader.components.core.BottomBarNav
1430import 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
1534import com.troplo.privateuploader.components.core.TopBarNav
35+ import com.troplo.privateuploader.components.core.rememberOverlappingPanelsState
1636import 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
2138
22- @OptIn(ExperimentalMaterial3Api ::class )
39+ @OptIn(ExperimentalMaterial3Api ::class , ExperimentalMaterialApi :: class )
2340@Composable
2441fun MainScreen (user : User ? ) {
2542 val context = LocalContext .current
26- val token = SessionManager (context).fetchAuthToken ()
43+ val token = SessionManager (context).getAuthToken ()
2744 if (token != null ) {
2845 SocketHandler .initializeSocket(token, context)
2946 UserHandler .initializeUser(token)
3047 }
3148 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+ }
3260 Scaffold (
3361 topBar = { TopBarNav (navController = navController, user = user) },
34- bottomBar = { BottomBarNav (navController = navController) }
62+ bottomBar = { BottomBarNav (navController = navController, panelState = panelState, closePanels = closePanelsFunc ) },
3563 ) { 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+ }
42122 )
43123 }
44124}
0 commit comments