summaryrefslogtreecommitdiff
path: root/src/components/_sila/Mixins/TableFilterMixin.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/_sila/Mixins/TableFilterMixin.js')
-rw-r--r--src/components/_sila/Mixins/TableFilterMixin.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/components/_sila/Mixins/TableFilterMixin.js b/src/components/_sila/Mixins/TableFilterMixin.js
new file mode 100644
index 00000000..7a2cc540
--- /dev/null
+++ b/src/components/_sila/Mixins/TableFilterMixin.js
@@ -0,0 +1,58 @@
+import { includes } from 'lodash';
+
+const TableFilterMixin = {
+ methods: {
+ getFilteredTableData(tableData = [], filters = []) {
+ const filterItems = filters.reduce((arr, filter) => {
+ return [...arr, ...filter.values];
+ }, []);
+ // If no filters are active, then return all table data
+ if (filterItems.length === 0) return tableData;
+
+ // Check if row property value is included in list of
+ // active filters
+ return tableData.filter((row) => {
+ let returnRow = false;
+ for (const { key, values } of filters) {
+ const rowProperty = row[key];
+ if (rowProperty && includes(values, rowProperty)) {
+ returnRow = true;
+ break;
+ }
+ }
+ return returnRow;
+ });
+ },
+ getFilteredTableDataByDate(
+ tableData = [],
+ startDate,
+ endDate,
+ propertyKey = 'date'
+ ) {
+ if (!startDate && !endDate) return tableData;
+ let startDateInMs = startDate ? startDate.getTime() : 0;
+ let endDateInMs = endDate ? endDate.getTime() : Number.POSITIVE_INFINITY;
+
+ const isUtcDisplay = this.$store.getters['global/isUtcDisplay'];
+
+ //Offset preference selected
+ if (!isUtcDisplay) {
+ startDateInMs = startDate
+ ? startDate.getTime() + startDate.getTimezoneOffset() * 60000
+ : 0;
+ endDateInMs = endDate
+ ? endDate.getTime() + endDate.getTimezoneOffset() * 60000
+ : Number.POSITIVE_INFINITY;
+ }
+
+ return tableData.filter((row) => {
+ const date = row[propertyKey];
+ if (!(date instanceof Date)) return;
+ const dateInMs = date.getTime();
+ if (dateInMs >= startDateInMs && dateInMs <= endDateInMs) return row;
+ });
+ },
+ },
+};
+
+export default TableFilterMixin;