177 lines
6.1 KiB
Kotlin
177 lines
6.1 KiB
Kotlin
package com.example.mycrib
|
|
|
|
import androidx.compose.animation.AnimatedVisibility
|
|
import androidx.compose.foundation.Image
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
import androidx.compose.foundation.layout.safeContentPadding
|
|
import androidx.compose.material3.Button
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.Surface
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.runtime.*
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import com.mycrib.android.ui.screens.AddResidenceScreen
|
|
import com.mycrib.android.ui.screens.HomeScreen
|
|
import com.mycrib.android.ui.screens.LoginScreen
|
|
import com.mycrib.android.ui.screens.RegisterScreen
|
|
import com.mycrib.android.ui.screens.ResidenceDetailScreen
|
|
import com.mycrib.android.ui.screens.ResidencesScreen
|
|
import com.mycrib.android.ui.screens.TasksScreen
|
|
import org.jetbrains.compose.resources.painterResource
|
|
import org.jetbrains.compose.ui.tooling.preview.Preview
|
|
|
|
import androidx.navigation.compose.NavHost
|
|
import androidx.navigation.compose.rememberNavController
|
|
import androidx.navigation.compose.composable
|
|
|
|
import mycrib.composeapp.generated.resources.Res
|
|
import mycrib.composeapp.generated.resources.compose_multiplatform
|
|
|
|
@Composable
|
|
@Preview
|
|
fun App() {
|
|
var isLoggedIn by remember { mutableStateOf(com.mycrib.storage.TokenStorage.hasToken()) }
|
|
val navController = rememberNavController()
|
|
|
|
// Check for stored token on app start
|
|
LaunchedEffect(Unit) {
|
|
isLoggedIn = com.mycrib.storage.TokenStorage.hasToken()
|
|
}
|
|
|
|
Surface(
|
|
modifier = Modifier.fillMaxSize(),
|
|
color = MaterialTheme.colorScheme.background
|
|
) {
|
|
NavHost(
|
|
navController = navController,
|
|
startDestination = if (isLoggedIn) "residences" else "login"
|
|
) {
|
|
composable("login") {
|
|
LoginScreen(
|
|
onLoginSuccess = {
|
|
isLoggedIn = true
|
|
navController.navigate("residences") {
|
|
popUpTo("login") { inclusive = true }
|
|
}
|
|
},
|
|
onNavigateToRegister = {
|
|
navController.navigate("register")
|
|
}
|
|
)
|
|
}
|
|
|
|
composable("register") {
|
|
RegisterScreen(
|
|
onRegisterSuccess = {
|
|
isLoggedIn = true
|
|
navController.navigate("residences") {
|
|
popUpTo("register") { inclusive = true }
|
|
}
|
|
},
|
|
onNavigateBack = {
|
|
navController.popBackStack()
|
|
}
|
|
)
|
|
}
|
|
|
|
composable("home") {
|
|
HomeScreen(
|
|
onNavigateToResidences = {
|
|
navController.navigate("residences")
|
|
},
|
|
onNavigateToTasks = {
|
|
navController.navigate("tasks")
|
|
},
|
|
onLogout = {
|
|
// Clear token on logout
|
|
com.mycrib.storage.TokenStorage.clearToken()
|
|
isLoggedIn = false
|
|
navController.navigate("login") {
|
|
popUpTo("home") { inclusive = true }
|
|
}
|
|
}
|
|
)
|
|
}
|
|
|
|
composable("residences") {
|
|
ResidencesScreen(
|
|
onResidenceClick = { residenceId ->
|
|
navController.navigate("residence_detail/$residenceId")
|
|
},
|
|
onAddResidence = {
|
|
navController.navigate("add_residence")
|
|
}
|
|
)
|
|
}
|
|
|
|
composable("add_residence") {
|
|
AddResidenceScreen(
|
|
onNavigateBack = {
|
|
navController.popBackStack()
|
|
},
|
|
onResidenceCreated = {
|
|
navController.popBackStack()
|
|
}
|
|
)
|
|
}
|
|
|
|
composable("tasks") {
|
|
TasksScreen(
|
|
onNavigateBack = {
|
|
navController.popBackStack()
|
|
}
|
|
)
|
|
}
|
|
|
|
composable("residence_detail/{residenceId}") { backStackEntry ->
|
|
// val residenceId = backStackEntry.arguments?.getString("residenceId")?.toIntOrNull()
|
|
val residenceId = backStackEntry.arguments
|
|
?.get("residenceId")
|
|
?.toString()
|
|
?.toIntOrNull()
|
|
|
|
|
|
if (residenceId != null) {
|
|
ResidenceDetailScreen(
|
|
residenceId = residenceId,
|
|
onNavigateBack = {
|
|
navController.popBackStack()
|
|
}
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
MaterialTheme {
|
|
var showContent by remember { mutableStateOf(false) }
|
|
Column(
|
|
modifier = Modifier
|
|
.background(MaterialTheme.colorScheme.primaryContainer)
|
|
.safeContentPadding()
|
|
.fillMaxSize(),
|
|
horizontalAlignment = Alignment.CenterHorizontally,
|
|
) {
|
|
Button(onClick = { showContent = !showContent }) {
|
|
Text("Click me!")
|
|
}
|
|
AnimatedVisibility(showContent) {
|
|
val greeting = remember { Greeting().greet() }
|
|
Column(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
horizontalAlignment = Alignment.CenterHorizontally,
|
|
) {
|
|
Image(painterResource(Res.drawable.compose_multiplatform), null)
|
|
Text("Compose: $greeting")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
} |