import { negate } from 'lodash'; import { ChildrenGetter } from 'wdk-client/Utils/TreeUtils'; type VisibilityFilter = (node: T) => boolean; export function getFilteredNodeChildren( getNodeChildren: ChildrenGetter, visibilityFilter: VisibilityFilter ) { return function (node: T) { return getNodeChildren(node).filter(visibilityFilter); } }; export function nodeSearchPredicateWithHiddenNodes( getNodeChildren: ChildrenGetter, nodeSearchPredicate: (node: T, searchQueryTerms: string[]) => boolean, visibilityFilter: VisibilityFilter ) { return function (node: T, searchQueryTerms: string[]) { return ( nodeSearchPredicate(node, searchQueryTerms) || getNodeChildren(node) .filter(negate(visibilityFilter)) .some(node => nodeSearchPredicate(node, searchQueryTerms)) ); } };