Skip to content

Checking all children of a node should only check the root node #13

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
williamboman opened this issue Oct 10, 2016 · 29 comments
Open

Comments

@williamboman
Copy link
Contributor

Say you have made a selection like so;
screenshot 2016-10-10 at 18 16 41

Shouldn't All be the only item in the checked array in this scenario? Cause right now, every children will populate the checked array, and the root node will not be included. Or am I wrong here?

@jakezatecky
Copy link
Owner

jakezatecky commented Oct 20, 2016

There are a few ways to go about here:

  1. Record leaf nodes in checked. Here, we only care about the leaf nodes. This is the current model.
  2. Record upper-most nodes in checked. Here, we care about top-most checked nodes; the component needs to be intelligent enough to only record nodes that do not have a parent node checked. This is the model you are suggesting.
  3. Record every checked node in checked. Here, we care about EVERY node selected, whether it is a parent, child, or leaf.

While the react-checkbox-tree component currently uses the first model, I do not see why we could not also support the other two models. Could be a component parameter.

@qodesmith
Copy link

Any progress on these models? I could use the 3rd one - "Record every checked node in checked".

@jakezatecky
Copy link
Owner

@qodesmith No progress has been made. Much of the component makes assumptions about check state based on child nodes. Nevertheless, of the additional models, the third one you are wanting is the easier one to implement.

A PR is welcome. Otherwise, I'll get to this when I can. I certainly agree that it would be useful to have implemented.

@VikramMaiya
Copy link

Hi, The component designed by you is very useful but
Even I Wanted 3d functionality:
checked array must contain all the checked nodes including parents.
Awaiting your response.

@jakezatecky jakezatecky added this to the v1.1.0 milestone Oct 2, 2017
@VikramMaiya
Copy link

Hi,
Currently I am using "react-checkbox-tree": "^1.0.1"

I tried updating to your V1.1.0:
npm install react-checkbox-tree@1.1.0 --save

I got the following error:
No matching version found for react-checkbox-tree@1.1.0

@williamboman
Copy link
Contributor Author

@VikramMaiya There are no 1.1.0 release yet.

@VikramMaiya
Copy link

Hi William,
checked array must contain all the checked nodes including parents.
Could you help me ?

@jakezatecky
Copy link
Owner

@VikramMaiya None of that is implemented yet. I only marked it for next release.

@VikramMaiya
Copy link

Hi jakezatecky,
Thanks for your quick response. How long will it take for the next release ?

@karan-chauhan
Copy link

Hi jakezatecky,
I also want all the checked nodes including parent, child. Can you please help me? And how long will it take for the next release..?

@karan-chauhan
Copy link

karan-chauhan commented Dec 27, 2017

I solved some of my issue, but its not fully done. With this code, i can get the id of my parent, when i select all the values using parent. But if i deselect one of my child then it doesn't exclude the parent value from checked array. Here is the code that i changed:

key: 'toggleChecked',
        value: function toggleChecked(node, isChecked, noCascade) {
            var _this3 = this;

            if (node.children === null || noCascade) {
                // Set the check status of a leaf node or an uncoupled parent
                this.toggleNode('checked', node, isChecked);
            } else {
                //Change by karan
                this.toggleNode('checked', node, isChecked);

                // Percolate check status down to all children
                node.children.forEach(function (child) {
                    _this3.toggleChecked(child, isChecked);
                });
            }
        }

@jakezatecky jakezatecky removed this from the v1.1.0 milestone Mar 16, 2018
@nusudoers
Copy link

Any updates on the suggested models? I could really use the second option:
Record upper-most nodes in checked. Here, we care about top-most checked nodes; the component needs to be intelligent enough to only record nodes that do not have a parent node checked. This is the model you are suggesting.

@gazu36
Copy link

gazu36 commented Dec 9, 2018

@jakezatecky Any updates on this? The third option is an incredible plus for me and would love that to be an "official" addition

@jakezatecky
Copy link
Owner

jakezatecky commented Dec 13, 2018

Model 3 is the one that can most easily be added. The second model would take more...thought. While some interest in Model 2 has been expressed, I can likely get a partial implementation with (Tesla) Model 3 in the next major release.

I have recently acquired some additional free time, so I think sometime before the end of this year is a good possibility. I am wrapping up some updates on one of my other libraries and then I will come back to this one.

@jakezatecky jakezatecky added this to the v1.5.0 milestone Dec 17, 2018
@subhamayd2
Copy link

@jakezatecky Hi,
Thanks for the awesome component!! 😄
Although model 2 would be perfect, but is there at least any update regarding model 3?

jakezatecky added a commit that referenced this issue Jan 28, 2019
…the `checked` array

Currently only supporting 'leaf' (the default behavior) and 'all'. This lines up with models 1 and 3 on #13. Model 2 still needs implementation, although some pieces have been included in this commit.
@jakezatecky
Copy link
Owner

Model 3 has been fully implemented on the v1.6-dev branch. This can be activated by passing in checkModel="all" to the component. An alpha version of v1.6 has been published (1.6.0-alpha.0) should anyone wish to confirm the functionality or make use of it. A full feature release is planned for a later date.

It remains to be seen whether the second model will be included in the v1.6 release, as implementing its behavior is a bit awkward.

@joscmw95
Copy link

I just coded up a fork that does model 2 (if I understood it correctly).
Check it out, feel free to make it workable with the v1.6 release. Or ask me if any help is needed.

@bikashkomprise
Copy link

checkModel="all" does not work. I updated my package with src files from v1.6-dev

@worthlutz
Copy link
Contributor

@jakezatecky I've done a little testing on v1.6.0-alpha.1 and checkmodel = all. It appears that only checkboxes which have the "black" check and not the "grey" check are listed in the checked array. Is this the intended result?

I am still thinking of the consequences of this. I suppose what matters is how the wrapping program uses the checked array. For me what usually matters is which node changed. This is usually the clicked checkbox or node and maybe all it's children depending on cascade status. If the parents and grandparents change, that is usually less or not important other than the visual changes in the tree.

I think I will put together some more test examples to expand my understanding of what is going on...

@jakezatecky
Copy link
Owner

@worthlutz, yes the partial nodes are intentionally not included in the checked array.

@jakezatecky
Copy link
Owner

@bikashkomprise can you post a live example showing your issue? I created a quick sandbox example that logs to the console all nodes when items are checked/unchecked:

https://codesandbox.io/s/q9kxzq4vz9

@radufilipescu
Copy link

Hi, any updates on this cool new feature ? :D

@fuzunspm
Copy link

any news about this? I want to include not only checked leafs but their parent nodes in checked array

@ndaaktan
Copy link

checkModel="all" does works for v1.6

@AliBayatMokhtari
Copy link

checkModel="all" does works for v1.6

It does not select all the parents and only select the first parent if and only if all the children of a parent are selected.

@jakezatecky jakezatecky modified the milestones: v1.7.0, v2.0.0 Aug 9, 2021
@koi-annu
Copy link

koi-annu commented Jul 2, 2022

How can I do this?

  1. when one child selected then automatically include parent as checked result
  2. add extra component input for example to each node

@Mitesh13499
Copy link

Mitesh13499 commented Jul 26, 2022

As asked by @worthlutz,
Would be very useful for me if we get all the grey (half checked) nodes as well when any child is selected in the sub tree.

@SaimMohanish
Copy link

Is there any update about half checked nodes

@Mitesh13499
Copy link

Mitesh13499 commented Feb 28, 2023

The only thing that helped me to get all the half checked nodes in onCheck was to override the code of the library as per my needs. all in the checkModel prop didn't help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests