diff --git a/web/app/src/components/JobActionsBar.vue b/web/app/src/components/JobActionsBar.vue index bd1d0bfe..a7b12e82 100644 --- a/web/app/src/components/JobActionsBar.vue +++ b/web/app/src/components/JobActionsBar.vue @@ -2,6 +2,7 @@
+
@@ -26,6 +27,10 @@ export default { return this._handleJobActionPromise( this.jobs.cancelJobs(), "marked for cancellation"); }, + onButtonRequeue() { + return this._handleJobActionPromise( + this.jobs.requeueJobs(), "requeued"); + }, _handleJobActionPromise(promise, description) { const numJobs = this.jobs.numSelected; diff --git a/web/app/src/stores/jobs.js b/web/app/src/stores/jobs.js index 4379bb70..a871381b 100644 --- a/web/app/src/stores/jobs.js +++ b/web/app/src/stores/jobs.js @@ -25,6 +25,9 @@ export const useJobs = defineStore('jobs', { canCancel() { return this._anyJobWithStatus(["queued", "active", "failed"]) }, + canRequeue() { + return this._anyJobWithStatus(["canceled", "completed", "failed", "paused"]) + }, }, actions: { // Selection of jobs. @@ -56,6 +59,7 @@ export const useJobs = defineStore('jobs', { return deletionPromise; }, cancelJobs() { return this._setJobStatus("cancel-requested"); }, + requeueJobs() { return this._setJobStatus("requeued"); }, // Internal methods.