mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-15 12:20:31 +00:00
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
import { castArray, isEmpty, includes, pickBy } from 'lodash';
|
|
|
|
/**
|
|
* Filters the given accounts of the given query.
|
|
* @param {*} accounts
|
|
* @param {*} queryProps
|
|
* @returns {*}
|
|
*/
|
|
export const filterAccountsByQuery = (accounts, queryProps) => {
|
|
const defaultQuery = {
|
|
filterByParentTypes: [],
|
|
filterByTypes: [],
|
|
filterByNormal: [],
|
|
filterByRootTypes: [],
|
|
...pickBy(queryProps, v => v !== undefined),
|
|
};
|
|
const query = {
|
|
filterByParentTypes: castArray(defaultQuery.filterByParentTypes),
|
|
filterByTypes: castArray(defaultQuery.filterByTypes),
|
|
filterByNormal: castArray(defaultQuery.filterByNormal),
|
|
filterByRootTypes: castArray(defaultQuery.filterByRootTypes),
|
|
};
|
|
let filteredAccounts = [...accounts];
|
|
|
|
if (!isEmpty(query.filterByParentTypes)) {
|
|
filteredAccounts = filteredAccounts.filter((account) =>
|
|
includes(query.filterByParentTypes, account.account_parent_type),
|
|
);
|
|
}
|
|
if (!isEmpty(query.filterByTypes)) {
|
|
filteredAccounts = filteredAccounts.filter((account) =>
|
|
includes(query.filterByTypes, account.account_type),
|
|
);
|
|
}
|
|
if (!isEmpty(query.filterByNormal)) {
|
|
filteredAccounts = filteredAccounts.filter((account) =>
|
|
includes(query.filterByTypes, account.account_normal),
|
|
);
|
|
}
|
|
if (!isEmpty(query.filterByRootTypes)) {
|
|
filteredAccounts = filteredAccounts.filter((account) =>
|
|
includes(query.filterByRootTypes, account.account_root_type),
|
|
);
|
|
}
|
|
return filteredAccounts;
|
|
};
|