GithubHelp home page GithubHelp logo

Comments (4)

lukasbach avatar lukasbach commented on June 3, 2024

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.

HannaHabr avatar HannaHabr commented on June 3, 2024

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?
image

from react-complex-tree.

lukasbach avatar lukasbach commented on June 3, 2024

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.

lukasbach avatar lukasbach commented on June 3, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.