UNPKG

@nullvoxpopuli/ember-composable-helpers

Version:
42 lines (34 loc) 996 B
import { helper } from '@ember/component/helper'; import { isArray as isEmberArray } from '@ember/array'; import { isEmpty } from '@ember/utils'; import { get } from '@ember/object'; import isEqual from '../utils/is-equal.ts'; import asArray from '../utils/as-array.ts'; export function filterBy<T extends object, K extends keyof T>([ byPath, value, array, ]: [K, T[K] | T[] | undefined, T[]]) { let isPresent = true; if (!isEmberArray(array) && isEmberArray(value)) { array = value as T[]; value = undefined; isPresent = false; } array = asArray(array); if (isEmpty(byPath) || isEmpty(array)) { return []; } let filterFn; if (isPresent) { if (typeof value === 'function') { filterFn = (item: T) => value(get(item, byPath)); } else { filterFn = (item: T) => isEqual(get(item, byPath), value); } } else { filterFn = (item: T) => !!get(item, byPath); } return array.filter(filterFn); } export default helper(filterBy);