fix: projectId extrait des arguments de route (pas du pattern) + affichage erreur API

This commit is contained in:
2026-06-06 10:47:35 +02:00
parent 8cab357c4c
commit ba9f379100
4 changed files with 26 additions and 7 deletions
+1 -1
View File
@@ -16,7 +16,7 @@ android {
minSdk = 26 minSdk = 26
targetSdk = 35 targetSdk = 35
versionCode = 1 versionCode = 1
versionName = "0.0.14" versionName = "0.0.15"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
@@ -72,8 +72,9 @@ fun MainScreen(
var showCreateTask by remember { mutableStateOf(false) } var showCreateTask by remember { mutableStateOf(false) }
var selectedTask by remember { mutableStateOf<Task?>(null) } var selectedTask by remember { mutableStateOf<Task?>(null) }
val inboxProjectId = projects.find { it.isInbox }?.id ?: "" val inboxProjectId = projects.find { it.isInbox }?.id ?: ""
val createProjectId = if (currentRoute?.startsWith("project/") == true) // destination.route is the pattern ("project/{projectId}"), arguments hold the real value
currentRoute.removePrefix("project/") val createProjectId = if (currentRoute == Route.Project().path)
navBackStack?.arguments?.getString("projectId") ?: inboxProjectId
else else
inboxProjectId inboxProjectId
@@ -85,9 +86,10 @@ fun MainScreen(
Route.Filter.path to "Filtres", Route.Filter.path to "Filtres",
Route.Settings.path to "Paramètres", Route.Settings.path to "Paramètres",
) )
val title = drawerTitles[currentRoute] val activeProjectName = if (currentRoute == Route.Project().path)
?: projects.find { "project/${it.id}" == currentRoute }?.name projects.find { it.id == navBackStack?.arguments?.getString("projectId") }?.name
?: "BonsaiTask" else null
val title = drawerTitles[currentRoute] ?: activeProjectName ?: "BonsaiTask"
ModalNavigationDrawer( ModalNavigationDrawer(
drawerState = drawerState, drawerState = drawerState,
@@ -154,7 +156,7 @@ fun MainScreen(
NavigationDrawerItem( NavigationDrawerItem(
icon = { Icon(Icons.Default.FolderOpen, null) }, icon = { Icon(Icons.Default.FolderOpen, null) },
label = { Text(project.name) }, label = { Text(project.name) },
selected = currentRoute == "project/${project.id}", selected = currentRoute == Route.Project().path && navBackStack?.arguments?.getString("projectId") == project.id,
onClick = { onClick = {
navController.navigate(Route.Project().buildRoute(project.id)) navController.navigate(Route.Project().buildRoute(project.id))
scope.launch { drawerState.close() } scope.launch { drawerState.close() }
@@ -26,6 +26,7 @@ import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.ui.graphics.Color
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@@ -150,6 +151,15 @@ fun TaskEditSheet(
Spacer(Modifier.height(12.dp)) Spacer(Modifier.height(12.dp))
state.saveError?.let { error ->
Text(
text = error,
color = Color.Red,
style = MaterialTheme.typography.bodySmall,
modifier = Modifier.padding(vertical = 4.dp),
)
}
Row( Row(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.End, horizontalArrangement = Arrangement.End,
@@ -129,6 +129,13 @@ class TaskEditViewModel @Inject constructor(
val taskIdLong = st.taskId?.toLongOrNull() val taskIdLong = st.taskId?.toLongOrNull()
if (authManager.isLoggedIn && projectIdLong != null) { if (authManager.isLoggedIn && projectIdLong != null) {
// Refresh token if expired before calling API
val tokenOk = authManager.refreshIfNeeded()
if (!tokenOk) {
_state.update { it.copy(isSaving = false, saveError = "Session expirée, veuillez vous reconnecter") }
return@launch
}
val apiResult = if (taskIdLong != null) { val apiResult = if (taskIdLong != null) {
apiClient.updateIssue(projectIdLong, taskIdLong, request) apiClient.updateIssue(projectIdLong, taskIdLong, request)
} else { } else {