From 33f95cc5a5bb19befb546e4b5855a1ce220417e9 Mon Sep 17 00:00:00 2001 From: Gato Date: Sat, 6 Jun 2026 11:24:28 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20toggle=20t=C3=A2che=20=E2=86=92=20statu?= =?UTF-8?q?t=20termin=C3=A9=20sur=20API=20+=20bouton=20d=C3=A9connexion=20?= =?UTF-8?q?dans=20le=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- .../java/com/planify/mobile/ui/MainScreen.kt | 10 ++++++++ .../mobile/ui/project/ProjectViewModel.kt | 25 ++++++++++++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4a6b22f..cacc0ff 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -16,7 +16,7 @@ android { minSdk = 26 targetSdk = 35 versionCode = 1 - versionName = "0.0.16" + versionName = "0.0.17" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/planify/mobile/ui/MainScreen.kt b/app/src/main/java/com/planify/mobile/ui/MainScreen.kt index 16ca01e..cf5665f 100644 --- a/app/src/main/java/com/planify/mobile/ui/MainScreen.kt +++ b/app/src/main/java/com/planify/mobile/ui/MainScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.Inbox import androidx.compose.material.icons.outlined.Menu import androidx.compose.material.icons.outlined.Search +import androidx.compose.material.icons.outlined.Logout import androidx.compose.material.icons.outlined.Settings import androidx.compose.material.icons.outlined.Today import androidx.compose.foundation.shape.CircleShape @@ -174,6 +175,15 @@ fun MainScreen( scope.launch { drawerState.close() } }, ) + NavigationDrawerItem( + icon = { Icon(Icons.Outlined.Logout, null) }, + label = { Text("Déconnexion") }, + selected = false, + onClick = { + authViewModel.logout() + scope.launch { drawerState.close() } + }, + ) Spacer(Modifier.height(8.dp)) Text( text = "v${com.planify.mobile.BuildConfig.VERSION_NAME}", diff --git a/app/src/main/java/com/planify/mobile/ui/project/ProjectViewModel.kt b/app/src/main/java/com/planify/mobile/ui/project/ProjectViewModel.kt index 46631c1..e404dc2 100644 --- a/app/src/main/java/com/planify/mobile/ui/project/ProjectViewModel.kt +++ b/app/src/main/java/com/planify/mobile/ui/project/ProjectViewModel.kt @@ -7,6 +7,10 @@ import com.planify.mobile.domain.model.Project import com.planify.mobile.domain.model.Section import com.planify.mobile.domain.model.Task import com.planify.mobile.domain.model.ViewStyle +import com.planify.mobile.data.bonsai.BonsaiApiClient +import com.planify.mobile.data.bonsai.BonsaiAuthManager +import com.planify.mobile.data.bonsai.BonsaiSyncManager +import com.planify.mobile.data.bonsai.dto.BonsaIssueRequest import com.planify.mobile.domain.repository.ProjectRepository import com.planify.mobile.domain.repository.SectionRepository import com.planify.mobile.domain.repository.TaskRepository @@ -32,6 +36,8 @@ class ProjectViewModel @Inject constructor( private val taskRepository: TaskRepository, private val projectRepository: ProjectRepository, private val sectionRepository: SectionRepository, + private val apiClient: BonsaiApiClient, + private val authManager: BonsaiAuthManager, ) : ViewModel() { private val projectId: String = checkNotNull(savedStateHandle["projectId"]) @@ -66,7 +72,24 @@ class ProjectViewModel @Inject constructor( ) fun toggleTask(task: Task) { - viewModelScope.launch { taskRepository.checkTask(task.id, !task.checked) } + val newChecked = !task.checked + viewModelScope.launch { + taskRepository.checkTask(task.id, newChecked) + + val projectIdLong = task.projectId.toLongOrNull() ?: return@launch + val taskIdLong = task.id.toLongOrNull() ?: return@launch + if (!authManager.isLoggedIn) return@launch + authManager.refreshIfNeeded() + + val request = BonsaIssueRequest( + name = task.content, + priority = BonsaiSyncManager.toBonsaiPriority(task.priority), + status = BonsaiSyncManager.toBonsaiStatus(newChecked), + dueDate = task.dueDate?.date, + description = task.description.ifBlank { null }, + ) + apiClient.updateIssue(projectIdLong, taskIdLong, request) + } } fun reorderTasks(reordered: List) {