feat(cron): confirm before deleting a cron job (#879)
Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
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() {
|
||||
|
||||
Reference in new issue
Block a user