From 1c08c3672f502e7841be318d98f85f649d180c4b Mon Sep 17 00:00:00 2001 From: leiyre Date: Mon, 21 Nov 2022 16:33:02 +0100 Subject: [PATCH] feat: Allow sort records by event_timestamp or last_updated fields (#1924) * feat: Allow sort records by event_timestamp or last_updated fields closes #1835 This PR includes the fields event_timestamp and last_updated in the sort filter allowing to sort records by these values * fix lint * refactor code * refactor and clean code after review * refactor after review --- .../commons/header/filters/FiltersList.vue | 27 +++++++++++++++++-- frontend/models/Common.js | 2 ++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/frontend/components/commons/header/filters/FiltersList.vue b/frontend/components/commons/header/filters/FiltersList.vue index 14689f8c83..18efe073de 100644 --- a/frontend/components/commons/header/filters/FiltersList.vue +++ b/frontend/components/commons/header/filters/FiltersList.vue @@ -235,6 +235,10 @@ export default { a.key.toLowerCase() > b.key.toLowerCase() ? 1 : -1 )) || []; + const dateFields = [ + this.sortByDateFilter("last_updated", "Last Updated"), + this.sortByDateFilter("event_timestamp", "Event Timestamp"), + ].filter(({ disabled }) => !disabled); const uncoveredByRules = { id: "uncovered_by_rules", key: "uncovered_by_rules", @@ -243,9 +247,14 @@ export default { options: [true, false], selected: this.dataset.query.uncovered_by_rules && - this.dataset.query.uncovered_by_rules.length > 0, + this.dataset.query.uncovered_by_rules?.length > 0, }; - return [...filters, ...sortedMetadataFilters, uncoveredByRules]; + return [ + ...filters, + ...dateFields, + ...sortedMetadataFilters, + uncoveredByRules, + ]; }, }, methods: { @@ -290,6 +299,20 @@ export default { this.$emit("applySortBy", sortList); this.close(); }, + sortByDateFilter(id, name, group = "Sort") { + return { + id, + key: id, + group, + name, + disabled: this.recordPropertyHasValue(id), + }; + }, + recordPropertyHasValue(prop) { + return ( + !this.dataset.results.records.some((record) => record[prop]) || false + ); + }, }, }; diff --git a/frontend/models/Common.js b/frontend/models/Common.js index 230de81971..9f0f8a8377 100644 --- a/frontend/models/Common.js +++ b/frontend/models/Common.js @@ -31,6 +31,7 @@ class BaseRecord { status, selected, event_timestamp, + last_updated, search_keywords, }) { this.id = id; @@ -40,6 +41,7 @@ class BaseRecord { this.status = status; this.selected = selected || false; this.event_timestamp = event_timestamp; + this.last_updated = last_updated; this.search_keywords = search_keywords || []; }