1import { includes } from 'lodash'; 2 3const TableFilterMixin = { 4 methods: { 5 getFilteredTableData(tableData = [], filters = []) { 6 const filterItems = filters.reduce((arr, filter) => { 7 return [...arr, ...filter.values]; 8 }, []); 9 // If no filters are active, then return all table data 10 if (filterItems.length === 0) return tableData; 11 12 // Check if row property value is included in list of 13 // active filters 14 return tableData.filter((row) => { 15 let returnRow = false; 16 for (const { key, values } of filters) { 17 const rowProperty = row[key]; 18 if (rowProperty && includes(values, rowProperty)) { 19 returnRow = true; 20 break; 21 } 22 } 23 return returnRow; 24 }); 25 }, 26 getFilteredTableDataByDate( 27 tableData = [], 28 startDate, 29 endDate, 30 propertyKey = 'date' 31 ) { 32 if (!startDate && !endDate) return tableData; 33 let startDateInMs = startDate ? startDate.getTime() : 0; 34 let endDateInMs = endDate ? endDate.getTime() : Number.POSITIVE_INFINITY; 35 36 const isUtcDisplay = this.$store.getters['global/isUtcDisplay']; 37 38 //Offset preference selected 39 if (!isUtcDisplay) { 40 startDateInMs = startDate 41 ? startDate.getTime() + startDate.getTimezoneOffset() * 60000 42 : 0; 43 endDateInMs = endDate 44 ? endDate.getTime() + endDate.getTimezoneOffset() * 60000 45 : Number.POSITIVE_INFINITY; 46 } 47 48 return tableData.filter((row) => { 49 const date = row[propertyKey]; 50 if (!(date instanceof Date)) return; 51 const dateInMs = date.getTime(); 52 if (dateInMs >= startDateInMs && dateInMs <= endDateInMs) return row; 53 }); 54 }, 55 }, 56}; 57 58export default TableFilterMixin; 59