diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index a3b7dac57..6dac2a24c 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -256,6 +256,7 @@ const messages = { jobMergedDataSpeed: 'Merge speed:', allJobCalls: 'All', job: 'Job', + jobEdit: 'Edit job', jobModalTitle: 'Job {job}', jobId: 'ID', jobType: 'Type', @@ -290,11 +291,12 @@ const messages = { 'You are editing Schedule {name} ({id}). Saving will override previous schedule state.', jobEditMessage: 'You are editing job {name} ({id}). Saving will override previous job state.', - scheduleEdit: 'Edit', + scheduleEdit: 'Edit schedule', scheduleSave: 'Save', cancelScheduleEdition: 'Cancel', scheduleAdd: 'Add a schedule', scheduleDelete: 'Delete', + scheduleRun: 'Run schedule', deleteSelectedSchedules: 'Delete selected schedules', noScheduledJobs: 'No scheduled jobs.', newSchedule: 'New schedule', @@ -1160,7 +1162,6 @@ const messages = { scheduleTimezone: 'Timezone', scheduleExportRetention: 'Export ret.', scheduleSnapshotRetention: 'Snapshot ret.', - scheduleRun: 'Run', getRemote: 'Get remote', listRemote: 'List Remote', simpleBackup: 'simple', diff --git a/packages/xo-web/src/xo-app/jobs/overview/index.js b/packages/xo-web/src/xo-app/jobs/overview/index.js index 0164a001f..e6e91c2be 100644 --- a/packages/xo-web/src/xo-app/jobs/overview/index.js +++ b/packages/xo-web/src/xo-app/jobs/overview/index.js @@ -1,14 +1,9 @@ import _ from 'intl' -import ActionRowButton from 'action-row-button' -import filter from 'lodash/filter' -import find from 'lodash/find' -import forEach from 'lodash/forEach' import Icon from 'icon' import Link from 'link' import LogList from '../../logs' -import map from 'lodash/map' -import orderBy from 'lodash/orderBy' import React, { Component } from 'react' +import SortedTable from 'sorted-table' import StateButton from 'state-button' import Tooltip from 'tooltip' import Upgrade from 'xoa-upgrade' @@ -16,8 +11,10 @@ import { addSubscriptions } from 'utils' import { Container } from 'grid' import { createSelector } from 'selectors' import { Card, CardHeader, CardBlock } from 'card' +import { filter, find, forEach, orderBy } from 'lodash' import { deleteSchedule, + deleteSchedules, disableSchedule, enableSchedule, runJob, @@ -32,12 +29,88 @@ const jobKeyToLabel = { genericTask: _('customJob'), } +const SCHEDULES_COLUMNS = [ + { + itemRenderer: schedule => ( + {`${schedule.name} (${schedule.id.slice(4, 8)})`} + ), + name: _('schedule'), + sortCriteria: 'name', + }, + { + itemRenderer: (schedule, { jobs, isScheduleUserMissing }) => { + const jobId = schedule.jobId + const job = jobs[jobId] + + return ( + job !== undefined && ( +
{_('schedule')} | -{_('job')} | -{_('jobScheduling')} | -{_('jobState')} | -{_('jobAction')} | -
---|---|---|---|---|
- {this._getScheduleLabel(schedule)}
-
- |
-
- {this._getJobLabel(job)}
-
- |
- {schedule.cron} | -{this._getScheduleToggle(schedule)} | -- - | -
{_('noScheduledJobs')}
- )} +