diff --git a/assets/js/src/help/queue_status.jsx b/assets/js/src/help/queue_status.jsx index 55caeb0e24..3014573993 100644 --- a/assets/js/src/help/queue_status.jsx +++ b/assets/js/src/help/queue_status.jsx @@ -1,6 +1,8 @@ import MailPoet from 'mailpoet'; import React from 'react'; import KeyValueTable from 'common/key_value_table.jsx'; +import TasksList from './tasks_list/tasks_list.jsx'; +import TasksListDataRow from './tasks_list/tasks_list_data_row.jsx'; const QueueStatus = (props) => { const status = props.status_data; @@ -40,6 +42,15 @@ const QueueStatus = (props) => { value: status.tasksStatusCounts.scheduled, }]} + +

{MailPoet.I18n.t('scheduledTasks')}

+ (task.status === 'scheduled'))} /> + +

{MailPoet.I18n.t('runningTasks')}

+ (task.status === null))} /> + +

{MailPoet.I18n.t('completedTasks')}

+ (task.status === 'completed'))} /> ); }; @@ -57,6 +68,7 @@ QueueStatus.propTypes = { paused: React.PropTypes.number.isRequired, scheduled: React.PropTypes.number.isRequired, }).isRequired, + latestTasks: React.PropTypes.arrayOf(TasksListDataRow.propTypes.task).isRequired, }).isRequired, }; diff --git a/assets/js/src/help/tasks_list/tasks_list.jsx b/assets/js/src/help/tasks_list/tasks_list.jsx new file mode 100644 index 0000000000..0e900c0e0d --- /dev/null +++ b/assets/js/src/help/tasks_list/tasks_list.jsx @@ -0,0 +1,41 @@ +import React from 'react'; +import MailPoet from 'mailpoet'; +import TaskListDataRow from './tasks_list_data_row.jsx'; +import TaskListLabelsRow from './tasks_list_labels_row.jsx'; + +const TasksList = (props) => { + const colsCount = props.show_scheduled_at ? 6 : 5; + + return ( + + + + { + props.tasks.length ? props.tasks.map(task => ( + ) + ) : ( + + + + ) + } + + +
{MailPoet.I18n.t('nothingToShow')}
+ ); +}; + +TasksList.propTypes = { + show_scheduled_at: React.PropTypes.bool, + tasks: React.PropTypes.arrayOf(TaskListDataRow.propTypes.task).isRequired, +}; + +TasksList.defaultProps = { + show_scheduled_at: false, +}; + +module.exports = TasksList; diff --git a/assets/js/src/help/tasks_list/tasks_list_data_row.jsx b/assets/js/src/help/tasks_list/tasks_list_data_row.jsx new file mode 100644 index 0000000000..a06e13d6f0 --- /dev/null +++ b/assets/js/src/help/tasks_list/tasks_list_data_row.jsx @@ -0,0 +1,63 @@ +import React from 'react'; +import MailPoet from 'mailpoet'; + +const TasksListDataRow = props => ( + + + { props.task.id } + + + { props.task.type } + + + { props.task.newsletter ? ( + + {props.task.newsletter.subject || MailPoet.I18n.t('preview')} + ) : MailPoet.I18n.t('none') + } + + + { props.task.priority } + + { props.show_scheduled_at ? ( + + { MailPoet.Date.format(props.task.scheduled_at * 1000) } + + ) : null } + + { MailPoet.Date.format(props.task.updated_at * 1000) } + + +); + +TasksListDataRow.propTypes = { + show_scheduled_at: React.PropTypes.bool, + task: React.PropTypes.shape({ + id: React.PropTypes.number.isRequired, + type: React.PropTypes.string.isRequired, + priority: React.PropTypes.number.isRequired, + updated_at: React.PropTypes.number.isRequired, + scheduled_at: React.PropTypes.number, + status: React.PropTypes.string, + newsletter: React.PropTypes.shape({ + newsletter_id: React.PropTypes.number.isRequired, + queue_id: React.PropTypes.number.isRequired, + preview_url: React.PropTypes.string.isRequired, + subject: React.PropTypes.string, + }), + }).isRequired, +}; + +TasksListDataRow.defaultProps = { + show_scheduled_at: false, + task: { + newsletter: null, + }, +}; + +module.exports = TasksListDataRow; diff --git a/assets/js/src/help/tasks_list/tasks_list_labels_row.jsx b/assets/js/src/help/tasks_list/tasks_list_labels_row.jsx new file mode 100644 index 0000000000..b03c06bf5a --- /dev/null +++ b/assets/js/src/help/tasks_list/tasks_list_labels_row.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import MailPoet from 'mailpoet'; + +const TasksListLabelsRow = props => ( + + Id + {MailPoet.I18n.t('type')} + {MailPoet.I18n.t('email')} + {MailPoet.I18n.t('priority')} + { props.show_scheduled_at ? ({MailPoet.I18n.t('scheduledAt')}) : null } + {MailPoet.I18n.t('updatedAt')} + +); + +TasksListLabelsRow.propTypes = { + show_scheduled_at: React.PropTypes.bool, +}; + +TasksListLabelsRow.defaultProps = { + show_scheduled_at: false, +}; + +module.exports = TasksListLabelsRow; diff --git a/views/help.html b/views/help.html index 899b1db1e0..38d2e062fb 100644 --- a/views/help.html +++ b/views/help.html @@ -56,6 +56,16 @@ 'totalScheduledTasks': __('Total scheduled tasks'), 'totalRunningTasks': __('Total running tasks'), 'totalPausedTasks': __('Total paused tasks'), + 'scheduledTasks': __('Scheduled tasks'), + 'runningTasks': __('Running tasks'), + 'completedTasks': __('Completed tasks'), + 'type': _x('Type', 'Table column heading for task type.'), + 'email': __('Email'), + 'priority': _x('Priority', 'Table column heading for task priority (number).' ), + 'scheduledAt': __('Scheduled At'), + 'updatedAt': __('Updated At'), + 'nothingToShow': __('Nothing to show.'), + 'preview': _x('Preview', 'Text of a link to email preview page.'), }) %> <% endblock %>