UNPKG

react-native-tree-multi-select

Version:

A super-fast, customizable tree view component for React Native with multi-selection, checkboxes, and search filtering capabilities.

61 lines (59 loc) 2.48 kB
"use strict"; /** * Get filtered tree data based on the search term and the search keys * If any of the parent contains the search term, the tree will also contain * it's children. * * If only one of the innermost children contains the search term then it's siblings * won't be included in the search. But all it's ancestor nodes will be included * * @param nodes Input tree data * @param trimmedSearchTerm search term * @param searchKeys search key * @returns filtered tree data */ export function getFilteredTreeData(nodes, trimmedSearchTerm, searchKeys) { let filtered = []; for (let node of nodes) { const isSearchTermInNode = doesNodeContainSearchTerm(node, trimmedSearchTerm, searchKeys); if (!trimmedSearchTerm || isSearchTermInNode) { // If node itself matches, include it and all its descendants filtered.push(node); } else if (node.children) { // If node does not match, check its children and include them if they match const childMatches = getFilteredTreeData(node.children, trimmedSearchTerm, searchKeys); if (childMatches.length > 0) { // If any children match, include the node, replacing its children with the matching ones filtered.push({ ...node, children: childMatches }); } } } return filtered; } ; /** * Checks if a given tree node contains a specific search term in any of its specified keys. * * This function will check each of the specified keys in the tree node, convert the key's value to a string, * and check if it includes the search term. * * @param node - The tree node to search through. * @param searchTerm - The term to search for. * @param searchKeys - The keys in the tree node to search in. * @returns True if the search term is found in any of the specified keys, false otherwise. */ function doesNodeContainSearchTerm(node, searchTerm, searchKeys) { // We're using the `some` method on the array of keys to check each one return searchKeys.some(key => { // Get the value of the key in the tree node const nodeValue = node[key]; // Check if the string representation of the key's value includes the search term // If the value is undefined or null, `nodeValue?.toString()` will return undefined, // and the call to `toLowerCase().includes(searchTerm)` will return false. return nodeValue?.toString().toLowerCase().includes(searchTerm); }); } //# sourceMappingURL=search.helper.js.map