Files
honeyDueKMP/composeApp/src/commonMain/kotlin/com/example/mycrib/App.kt
Trey t de1c7931e9 wip
2025-11-04 10:51:20 -06:00

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")
}
}
}
}
*/
}