@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
32 lines (31 loc) • 1.18 kB
JavaScript
import { generateJoi } from '@directus/utils';
/*
Note: Filtering is normally done through SQL in run-ast. This function can be used in case an already
existing array of items has to be filtered using the same filter syntax as used in the ast-to-sql flow
*/
export function filterItems(items, filter) {
if (!filter)
return items;
return items.filter((item) => passesFilter(item, filter));
function passesFilter(item, filter) {
if (!filter || Object.keys(filter).length === 0)
return true;
if (Object.keys(filter)[0] === '_and') {
const subfilter = Object.values(filter)[0];
return subfilter.every((subFilter) => {
return passesFilter(item, subFilter);
});
}
else if (Object.keys(filter)[0] === '_or') {
const subfilter = Object.values(filter)[0];
return subfilter.some((subFilter) => {
return passesFilter(item, subFilter);
});
}
else {
const schema = generateJoi(filter);
const { error } = schema.validate(item);
return error === undefined;
}
}
}