storybook-eol / react-treebeard

React Tree View Component. Data-Driven, Fast, Efficient and Customisable.
http://storybooks.github.io/react-treebeard
MIT License
1.69k stars 294 forks source link

Unable to set node active state separately from toggling #33

Open jwbay opened 8 years ago

jwbay commented 8 years ago

For a folder selection treeview, we need to be able to split 'selecting' a node from expanding/collapsing it. I got 95% of the way there by implementing a Container decorator that composes Header and Toggle, but I hit a brick wall because of this:

    renderHeader(decorators, animations){
        return (
            <NodeHeader
                ...
                node={Object.assign({}, this.props.node)}
                ...
            />
        );
    }

The NodeHeader doesn't get a handle on the node object proper, presumably to prevent mutations, but that means my Header decorator can't set node.active. It looks like changing the node can only be done via calling through to onClick, which calls through to onToggle with no way to represent that it should actually select instead of toggling.

riquito commented 8 years ago

If you're interested I fixed it in a forked branch, it's one commit so far. I didn't look into the required tests, but it's a start.

hannupekka commented 8 years ago

This would be a neat feature @alexcurtis

goodmorninggoaway commented 7 years ago

PR: https://github.com/alexcurtis/react-treebeard/pull/51

cdtinney commented 6 years ago

You can solve this with the existing library via a custom Header that sets an onClick handler on the expand/collapse icon and stops the event from propagating to onToggle via event.stopPropogation().