feat(cron): confirm before deleting a cron job (#879)

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
M57andM57 authored and GitHub committed 2026-08-11 14:17:56 +03:00
1 parent 1e6e248891
commit d4008b7b31
5 files changed
+85 -1

No files matched your search

@@ -244,7 +244,7 @@ fun CronJobsScreen(
)
}
IconButton(
onClick = { viewModel.deleteCronJob(job.id) },
onClick = { viewModel.requestDeleteJob(job) },
) {
Icon(
imageVector = Icons.Filled.Delete,
@@ -305,6 +305,25 @@ fun CronJobsScreen(
},
)
}
// ── Delete Confirm Dialog ──
state.deleteTarget?.let { job ->
AlertDialog(
onDismissRequest = { viewModel.dismissDeleteDialog() },
title = { Text(stringResource(R.string.cron_delete_title)) },
text = { Text(stringResource(R.string.cron_delete_message, job.name)) },
confirmButton = {
TextButton(onClick = { viewModel.confirmDeleteJob() }) {
Text(stringResource(R.string.action_delete))
}
},
dismissButton = {
TextButton(onClick = { viewModel.dismissDeleteDialog() }) {
Text(stringResource(R.string.action_cancel))
}
},
)
}
}
@Composable
@@ -32,6 +32,8 @@ data class CronJobsUiState(
val jobs: List<CronJob> = emptyList(),
val errorMessage: String? = null,
val toastMessage: String? = null,
// Delete-confirm state (non-null while the confirm dialog is up)
val deleteTarget: CronJob? = null,
// Editor state
val editorState: CronJobEditorState = CronJobEditorState(),
)
@@ -196,6 +198,20 @@ class CronJobsViewModel :
}
}
fun requestDeleteJob(job: CronJob) {
_uiState.update { it.copy(deleteTarget = job) }
}
fun dismissDeleteDialog() {
_uiState.update { it.copy(deleteTarget = null) }
}
fun confirmDeleteJob() {
val target = _uiState.value.deleteTarget ?: return
_uiState.update { it.copy(deleteTarget = null) }
deleteCronJob(target.id)
}
// ── Editor ──
fun openNewJobDialog() {