Comments (4)
Hello, thanks for the report. I'm not actually sure this is something I would like to handle inside of the library. The underlying issue is that RCT keeps track of which item is currently focused, and only makes the item focusable that is registered as focused. So removing an item from the outside that is currently focused, ends in the tree having the focused item state pointing to an item that is no longer rendered in.
Unfortunately, if the item is removed from the outside, there is no convenient way for RCT to know if the currently focused item was affected by that. I could make the tree search through the entire tree to find out if there is an focused item and reset that state if not, but I would rather not want to do that for performance reasons.
I think I would rather leave that up to the library consumer, to manually reset the focused item state when the tree content changes in a way that makes the focused item state enter an invalid value. The consumer could manually check if the tree mutation affected the focused item, or manually reset the focused item to the root item everytime the tree is changed from the outside, since that might affect the content in a way that invalidates the focused item anyways, if that makes sense in the respective use case.
from react-complex-tree.
Hello, thanks for the answer! I got your point. That is what I do on my side, if items change I reset focused item. The only issue here is that library throws undefined exception on first try to set focus, so I have a workaround. Is it possible at least to handle this undefined error to avoid try/catch?
from react-complex-tree.
Hm that is odd, I don't really understand what could be throwing there. Is there a stacktrace that points to where this is thrown? Can you also check what happens if you supply a third parameter false
to the focusItem
method to see if that throws as well?
I tried to expand the sample implementation in my storybook instance to achieve something similar, where it now also updates the focused item, though I can't reproduce the issue there: https://github.com/lukasbach/react-complex-tree/blob/main/packages/core/src/stories/CustomDataProvider.stories.tsx#L48
from react-complex-tree.
FYI I've added a new addition in v2.4.3 where it now also checks if an item exists before it focuses that item, and falls back to the first item in the tree, so theoretically this should also solve this situation by default when an focused item is programmatically removed from the tree.
from react-complex-tree.
Related Issues (20)
- Expose treeItem internals HOT 1
- Item sort order is not maintained when reparenting multiselections HOT 1
- can make overrideOldSelection is customizable when calling selectUpTo? HOT 1
- Data fetching & virtualization HOT 3
- Enable setting custom `TreeItemElement` component HOT 1
- Indirectly selecting the starting item in a `shift` multiselect action results in an incorrect multiselection HOT 3
- custom styling causing drag between line in incorrect position HOT 4
- How to update the browser history / url in the address bar when triggering onPrimaryAction={onSelect} in order to be able to reload the page selecting the same tree item? HOT 3
- OnDrop returns not correct childIndex for target.targetType = 'between-items' HOT 3
- Drag and Drop does not work when title is Anchor <a> tag HOT 5
- Context Menu For Each Folder And Item HOT 3
- Multiple drag an drop items get inserted in wrong order HOT 1
- UncontrolledTreeEnvironment is throwing error HOT 2
- a.createContext is not a function HOT 4
- no nodes in the tabOrder after drop on non-expanded parent HOT 1
- Illegal drag-between and drag-over is allowed with key commands HOT 12
- Custom renderers prevent automatic renaming abort on outside click HOT 3
- Arrow Direction Not Changing Based on Language/Orientation (RTL/LTR) HOT 2
- [Question] How does it work with reactflow? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-complex-tree.