syncbasestore
Version:
Lightweight reactive store with built-in filtering and async state handling
21 lines (20 loc) • 643 B
JavaScript
export function applyFilter(data, filterDef, filterValue) {
if (typeof filterDef === 'function') {
return filterDef(data);
}
if (filterValue) {
const keys = Object.keys(filterValue);
const matches = (item) => keys.every(key => item[key] === filterValue[key]);
if (Array.isArray(data)) {
return data.filter(matches);
}
const filteredData = { ...data };
for (const key of keys) {
if (Array.isArray(data[key])) {
filteredData[key] = data[key].filter(matches);
}
}
return filteredData;
}
return data;
}