mirror of
https://github.com/wismna/DoNext.git
synced 2025-12-06 00:02:40 -05:00
Add delete task dialog confirmation
This commit is contained in:
@@ -50,8 +50,35 @@ fun RecycleBinScreen(
|
||||
}
|
||||
|
||||
val grouped = tasks.groupBy { it.listName }
|
||||
|
||||
val context = LocalContext.current
|
||||
|
||||
if (viewModel.taskToDelete != null) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { viewModel.onCancelDelete() },
|
||||
title = { Text("Delete task") },
|
||||
text = {
|
||||
Text("Are you sure you want to permanently delete this task? This cannot be undone.")
|
||||
},
|
||||
confirmButton = {
|
||||
TextButton(
|
||||
onClick = {
|
||||
viewModel.onConfirmDelete()
|
||||
Toast.makeText(context, "Task deleted", Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
colors = ButtonDefaults.textButtonColors(
|
||||
contentColor = MaterialTheme.colorScheme.error
|
||||
)
|
||||
) {
|
||||
Text("Delete")
|
||||
}
|
||||
},
|
||||
dismissButton = {
|
||||
TextButton(onClick = { viewModel.onCancelDelete() }) {
|
||||
Text("Cancel")
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
LazyColumn(
|
||||
modifier = modifier.padding(8.dp)
|
||||
) {
|
||||
@@ -76,11 +103,7 @@ fun RecycleBinScreen(
|
||||
modifier = Modifier.animateItem(),
|
||||
task = item.task,
|
||||
onSwipeLeft = { viewModel.restore(item.task.id!!) },
|
||||
onSwipeRight = {
|
||||
// TODO: add confirmation dialog
|
||||
viewModel.deleteForever(item.task.id!!)
|
||||
Toast.makeText(context, "Task deleted", Toast.LENGTH_SHORT).show()
|
||||
},
|
||||
onSwipeRight = { viewModel.onTaskDeleteRequest(item.task.id!!) },
|
||||
onTaskClick = { viewModel.onTaskClicked(item.task) }
|
||||
)
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.wismna.geoffroy.donext.presentation.viewmodel
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.wismna.geoffroy.donext.domain.model.Task
|
||||
@@ -25,12 +26,16 @@ class RecycleBinViewModel @Inject constructor(
|
||||
private val toggleTaskDeletedUseCase: ToggleTaskDeletedUseCase,
|
||||
private val permanentlyDeleteTaskUseCase: PermanentlyDeleteTaskUseCase,
|
||||
private val emptyRecycleBinUseCase: EmptyRecycleBinUseCase,
|
||||
private val uiEventBus: UiEventBus
|
||||
private val uiEventBus: UiEventBus,
|
||||
private val savedStateHandle: SavedStateHandle
|
||||
) : ViewModel() {
|
||||
|
||||
var deletedTasks by mutableStateOf<List<TaskWithListName>>(emptyList())
|
||||
private set
|
||||
|
||||
var taskToDelete by mutableStateOf(savedStateHandle.get<Long>("taskToDelete"))
|
||||
private set
|
||||
|
||||
init {
|
||||
loadDeletedTasks()
|
||||
}
|
||||
@@ -52,7 +57,6 @@ class RecycleBinViewModel @Inject constructor(
|
||||
fun restore(taskId: Long) {
|
||||
viewModelScope.launch {
|
||||
toggleTaskDeletedUseCase(taskId, false)
|
||||
loadDeletedTasks()
|
||||
|
||||
uiEventBus.send(
|
||||
UiEvent.ShowUndoSnackbar(
|
||||
@@ -66,13 +70,26 @@ class RecycleBinViewModel @Inject constructor(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteForever(taskId: Long) {
|
||||
viewModelScope.launch {
|
||||
permanentlyDeleteTaskUseCase(taskId)
|
||||
loadDeletedTasks()
|
||||
}
|
||||
fun onTaskDeleteRequest(taskId: Long) {
|
||||
taskToDelete = taskId
|
||||
savedStateHandle["taskToDelete"] = taskId
|
||||
}
|
||||
|
||||
fun onConfirmDelete() {
|
||||
taskToDelete?.let {
|
||||
viewModelScope.launch {
|
||||
permanentlyDeleteTaskUseCase(it)
|
||||
}
|
||||
}
|
||||
taskToDelete = null
|
||||
savedStateHandle["taskToDelete"] = null
|
||||
}
|
||||
|
||||
fun onCancelDelete() {
|
||||
taskToDelete = null
|
||||
savedStateHandle["taskToDelete"] = null
|
||||
}
|
||||
|
||||
fun emptyRecycleBin() {
|
||||
viewModelScope.launch {
|
||||
emptyRecycleBinUseCase()
|
||||
|
||||
Reference in New Issue
Block a user