Release v2.5.6
This commit is contained in:
@@ -9,6 +9,12 @@ const TASKS_PER_PAGE = 25;
|
||||
const QUEUE_PAGE_URL = '/settings/tasks-background';
|
||||
const SCHEDULED_PAGE_URL = '/settings/tasks-scheduled';
|
||||
|
||||
const DATE_FILTER_FIELDS = {
|
||||
createdAt: 'queued',
|
||||
startedAt: 'started',
|
||||
finishedAt: 'finished'
|
||||
};
|
||||
|
||||
function formatIntervalLabel(intervalMs) {
|
||||
const value = Math.max(1, Number(intervalMs) || 0);
|
||||
if (value % 60000 === 0) {
|
||||
@@ -36,6 +42,54 @@ function normalizeSourceFilter(sourceType, sourceId) {
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeDateInput(value) {
|
||||
const normalizedValue = String(value || '').trim();
|
||||
return /^\d{4}-\d{2}-\d{2}$/.test(normalizedValue) ? normalizedValue : '';
|
||||
}
|
||||
|
||||
function normalizeDateField(value) {
|
||||
const normalizedField = String(value || '').trim();
|
||||
return DATE_FILTER_FIELDS[normalizedField] ? normalizedField : 'createdAt';
|
||||
}
|
||||
|
||||
function getIsoDateString(value) {
|
||||
const date = new Date(value);
|
||||
if (Number.isNaN(date.getTime())) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return date.toISOString().slice(0, 10);
|
||||
}
|
||||
|
||||
function getTaskDateValue(task, dateField) {
|
||||
if (!task || !dateField) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return task[dateField] || '';
|
||||
}
|
||||
|
||||
function taskMatchesDateFilter(task, dateFilter) {
|
||||
if (!dateFilter || (!dateFilter.from && !dateFilter.to)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const taskDate = getIsoDateString(getTaskDateValue(task, dateFilter.field));
|
||||
if (!taskDate) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dateFilter.from && taskDate < dateFilter.from) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dateFilter.to && taskDate > dateFilter.to) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function taskMatchesFilters(task, sourceFilter) {
|
||||
if (!sourceFilter || !sourceFilter.sourceType || !sourceFilter.sourceId) {
|
||||
return true;
|
||||
@@ -107,12 +161,14 @@ function buildQueuePageViewModel(data, message, currentUser) {
|
||||
queryState.sourceType = sourceFilter.sourceType;
|
||||
queryState.sourceId = sourceFilter.sourceId;
|
||||
const filteredTasks = tasks.filter(function (task) {
|
||||
return taskMatchesFilters(task, sourceFilter) && taskMatchesSearch(queryState.search, [
|
||||
return taskMatchesFilters(task, sourceFilter) && taskMatchesDateFilter(task, { field: 'createdAt', from: '', to: '' }) && taskMatchesSearch(queryState.search, [
|
||||
'title',
|
||||
'key',
|
||||
'category',
|
||||
'status',
|
||||
'errorMessage',
|
||||
'createdAt',
|
||||
'startedAt',
|
||||
'finishedAt',
|
||||
function (item) { return item && item.metadata && item.metadata.sourceName; },
|
||||
function (item) { return item && item.metadata && item.metadata.sourceType; },
|
||||
function (item) { return item && item.metadata && item.metadata.sourceId; }
|
||||
@@ -199,6 +255,11 @@ function buildQueuePageViewModel(data, message, currentUser) {
|
||||
summary: summary,
|
||||
statusCards: statusCards,
|
||||
activeSourceLabel: queryState.sourceType && queryState.sourceId ? `${queryState.sourceType} #${queryState.sourceId}` : '',
|
||||
search: queryState.search,
|
||||
sort: sort,
|
||||
direction: direction,
|
||||
sourceType: queryState.sourceType,
|
||||
sourceId: queryState.sourceId,
|
||||
clearFiltersUrl: QUEUE_PAGE_URL,
|
||||
hasActiveFilters: hasActiveFilters,
|
||||
pagination: pagination,
|
||||
|
||||
Reference in New Issue
Block a user