///////////////////////////////////////////////////////////// // // pgAdmin 4 - PostgreSQL Tools // // Copyright (C) 2013 - 2025, The pgAdmin Development Team // This software is released under the PostgreSQL Licence // ////////////////////////////////////////////////////////////// import React, { useEffect, useMemo } from 'react'; import PropTypes from 'prop-types'; import { Resizable } from 're-resizable'; // Import helpers from new file import PgTreeView from '../../../../static/js/PgTreeView'; export default function LeftTree({prefTreeData, selectedItem, setSelectedItem, filteredList}) { const filteredTreeData = useMemo(() => { const parentIds = filteredList.map((item) => item.parentId); const filteredTreeData = prefTreeData.reduce((retVal, category) => { const filteredChildren = category.children.filter((child) => parentIds.includes(child.id)); if( filteredChildren.length > 0) { retVal.push({ ...category, children: filteredChildren, }); } return retVal; }, []); return filteredTreeData; }, [prefTreeData, filteredList]); useEffect(() => { // When the filtered list changes, we need to update the selected item // to the first item in the filtered tree data, if available. if (filteredTreeData.length > 0) { setSelectedItem(filteredTreeData[0]?.children[0] ?? null); } }, [filteredList.length]); return ( { setSelectedItem(item.data); }} // don't need virtualization for preferences tree overscanCount={50} /> ); } LeftTree.propTypes = { prefTreeData: PropTypes.arrayOf(PropTypes.shape({ id: PropTypes.string.isRequired, name: PropTypes.string.isRequired, key: PropTypes.string.isRequired, children: PropTypes.array.isRequired, })).isRequired, selectedItem: PropTypes.object, setSelectedItem: PropTypes.func.isRequired, filteredList: PropTypes.array, };