xref: /openbmc/webui-vue/src/components/Composables/useTableFilter.js (revision d3b05033fe82aed6c53f4f2b52c23d3bd285d423)
1/**
2 * Composable for table filtering utilities
3 * Extracted from TableFilterMixin for use in Composition API
4 */
5
6export function useTableFilter() {
7  const getFilteredTableData = (tableData = [], filters = []) => {
8    const filterItems = filters.reduce((arr, filter) => {
9      return [...arr, ...filter.values];
10    }, []);
11    if (filterItems.length === 0) return tableData;
12
13    const selectedValues = {};
14    for (const { key, values } of filters) {
15      if (values.length > 0) {
16        selectedValues[key] = values;
17      }
18    }
19
20    return tableData.filter((row) => {
21      for (const [key, values] of Object.entries(selectedValues)) {
22        const rowProperty = row[key];
23        if (rowProperty && !values.includes(rowProperty)) {
24          return false;
25        }
26      }
27      return true;
28    });
29  };
30
31  return {
32    getFilteredTableData,
33  };
34}
35