react-checkbox-tree icon indicating copy to clipboard operation
react-checkbox-tree copied to clipboard

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

Open williamboman opened this issue 7 years ago • 29 comments

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?

williamboman avatar Oct 10 '16 16:10 williamboman

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.

jakezatecky avatar Oct 20 '16 21:10 jakezatecky

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

qodesmith avatar Mar 29 '17 18:03 qodesmith

@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.

jakezatecky avatar Mar 29 '17 22:03 jakezatecky

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.

VikramMaiya avatar Oct 02 '17 20:10 VikramMaiya

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

I tried updating to your V1.1.0: npm install [email protected] --save

I got the following error: No matching version found for [email protected]

VikramMaiya avatar Oct 04 '17 12:10 VikramMaiya

@VikramMaiya There are no 1.1.0 release yet.

williamboman avatar Oct 04 '17 12:10 williamboman

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

VikramMaiya avatar Oct 04 '17 17:10 VikramMaiya

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

jakezatecky avatar Oct 04 '17 22:10 jakezatecky

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

VikramMaiya avatar Oct 05 '17 09:10 VikramMaiya

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 avatar Dec 27 '17 07:12 karan-chauhan

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);
                });
            }
        }

karan-chauhan avatar Dec 27 '17 07:12 karan-chauhan

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.

nusudoers avatar Jun 19 '18 15:06 nusudoers

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

gazu36 avatar Dec 09 '18 18:12 gazu36

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 avatar Dec 13 '18 04:12 jakezatecky

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

subhamayd2 avatar Jan 22 '19 12:01 subhamayd2

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.

jakezatecky avatar Jan 28 '19 12:01 jakezatecky

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.

joscmw95 avatar Mar 22 '19 16:03 joscmw95

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

bikashkomprise avatar Apr 09 '19 07:04 bikashkomprise

@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...

worthlutz avatar Apr 11 '19 18:04 worthlutz

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

jakezatecky avatar Apr 16 '19 07:04 jakezatecky

@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

jakezatecky avatar Apr 24 '19 01:04 jakezatecky

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

radufilipescu avatar Apr 22 '20 12:04 radufilipescu

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

fuzunspm avatar Oct 14 '20 22:10 fuzunspm

checkModel="all" does works for v1.6

ndaaktan avatar Dec 17 '20 11:12 ndaaktan

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.

AliBayatMokhtari avatar Apr 18 '21 16:04 AliBayatMokhtari

How can I do this?

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

koi-annu avatar Jul 02 '22 04:07 koi-annu

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.

Mitesh13499 avatar Jul 26 '22 06:07 Mitesh13499

Is there any update about half checked nodes

SaimMohanish avatar Feb 27 '23 09:02 SaimMohanish

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.

Mitesh13499 avatar Feb 28 '23 07:02 Mitesh13499