Open HannaHabr opened 6 months ago
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.
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?
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
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.
Describe the bug I can't focus tree by using just keyboard if items are removed from the tree. I am not sure if it is a defect.
To Reproduce
Expected behavior Can focus tree.
Screenshots N / A
Desktop :