@bigbinary/neeto-folders-frontend 2.0.42 → 2.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1713,17 +1713,46 @@ var FoldersTree = function FoldersTree(_ref) {
1713
1713
  var treeData = useMemo(function () {
1714
1714
  return _toAtomsTreeData(buildTreeWithItems(folders, config));
1715
1715
  }, [folders, config.items]);
1716
+ var treeMap = useMemo(function () {
1717
+ return treeData ? treeToMap(treeData, "sid") : {};
1718
+ }, [treeData]);
1719
+
1720
+ // Only hand react-arborist keys that actually exist in the current tree. A
1721
+ // missing/undefined selection — no folder in the URL, or a stale sid during
1722
+ // SPA navigation before the tree updates — makes its selectMulti call
1723
+ // identify(undefined) and throw "Cannot read properties of undefined".
1724
+ var selectedKeys = activeFolderSid && treeMap[activeFolderSid] ? [activeFolderSid] : [];
1716
1725
  var updateExpandedKeys = function updateExpandedKeys() {
1717
- var _activeFolder$meta;
1718
1726
  if (!treeData) return;
1719
- // When active folder changes from external sources, update expanded keys to auto expand tree.
1720
- var updatedExpandedKeys = new Set(expandedKeysSet);
1721
- var map = treeToMap(treeData, "sid");
1722
- var activeFolder = map[activeFolderSid];
1723
- var parentSid = activeFolder === null || activeFolder === void 0 || (_activeFolder$meta = activeFolder.meta) === null || _activeFolder$meta === void 0 || (_activeFolder$meta = _activeFolder$meta.parent) === null || _activeFolder$meta === void 0 ? void 0 : _activeFolder$meta.sid;
1724
- if (parentSid && !expandedKeysSet.has(parentSid)) {
1725
- updatedExpandedKeys.add(parentSid);
1727
+
1728
+ // Expand every ancestor of the active folder (not just the immediate
1729
+ // parent) so the full path to it is visible — folders nest up to
1730
+ // config.maxDepth. Walk up via treeMap, guarding against cycles.
1731
+ var ancestorSids = [];
1732
+ var seen = new Set();
1733
+ var node = treeMap[activeFolderSid];
1734
+ while ((_node = node) !== null && _node !== void 0 && (_node = _node.meta) !== null && _node !== void 0 && (_node = _node.parent) !== null && _node !== void 0 && _node.sid && !seen.has(node.meta.parent.sid)) {
1735
+ var _node;
1736
+ var parentSid = node.meta.parent.sid;
1737
+ seen.add(parentSid);
1738
+ ancestorSids.push(parentSid);
1739
+ node = treeMap[parentSid];
1726
1740
  }
1741
+ if (!ancestorSids.length) return;
1742
+
1743
+ // Functional update so the newly-expanded ancestors merge with the latest
1744
+ // expansion state (e.g. folders the user opened manually); bail out when
1745
+ // they're all already expanded to avoid a needless re-render.
1746
+ setExpandedKeysSet(function (prev) {
1747
+ if (ancestorSids.every(function (sid) {
1748
+ return prev.has(sid);
1749
+ })) return prev;
1750
+ var next = new Set(prev);
1751
+ ancestorSids.forEach(function (sid) {
1752
+ return next.add(sid);
1753
+ });
1754
+ return next;
1755
+ });
1727
1756
  };
1728
1757
  var handleExpand = function handleExpand(keys, _ref2) {
1729
1758
  var expanded = _ref2.expanded,
@@ -1761,7 +1790,7 @@ var FoldersTree = function FoldersTree(_ref) {
1761
1790
  className: "neeto-sidebar-folders-tree",
1762
1791
  indent: 20,
1763
1792
  rowHeight: 24,
1764
- selectedKeys: [activeFolderSid],
1793
+ selectedKeys: selectedKeys,
1765
1794
  showLine: false,
1766
1795
  switcherIcon: SwitcherIcon,
1767
1796
  titleRender: function titleRender(node) {