Skip to content
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

row selection not working for nested rows (getSubRows) #4878

Open
2 tasks done
csantos-nydig opened this issue May 25, 2023 · 13 comments
Open
2 tasks done

row selection not working for nested rows (getSubRows) #4878

csantos-nydig opened this issue May 25, 2023 · 13 comments

Comments

@csantos-nydig
Copy link

csantos-nydig commented May 25, 2023

Describe the bug

row-selection in the group rows are not correctly reacting to their sub-rows row-selection state

Your minimal, reproducible example

https://codesandbox.io/s/row-selection-sub-rows-kfgh2j

Steps to reproduce

  1. Go to https://codesandbox.io/s/row-selection-sub-rows-kfgh2j
  2. Expand the first group row
  3. Select the first sub-row
  4. ✅ Notice the parent row checkbox being "indeterminate"
    image
  5. Select the other 2 sub-rows in that same group
  6. 🛑 Notice the parent row checkbox is "unchecked", when it should be "checked"
    image

Probably the same issue:

  1. Go to the same codesandbox: https://codesandbox.io/s/row-selection-sub-rows-kfgh2j
  2. Expand the first group row
  3. Select the checkbox from the column header
  4. ✅ Notice all rows (parent and children) are selected
    image
  5. Unselect the first sub-row of the expanded group
  6. 🛑 Notice the parent row checkbox is stuck on "checked", when it should be "indeterminate"
    image

Expected behavior

As a user, I expected the parent row to react to the row-selection status of its children, regardless on how they are selected/unselected:

  • some sub-rows selected: parent row "indeterminate"
  • no sub-rows selected: parent row "unchecked"
  • all sub-rows selected: parent row "checked"

How often does this bug happen?

Every time

Screenshots or Videos

No response

Platform

  • Browser: N/A
  • OS: N/A

Happens in codesandbox

react-table version

v8.9.1

TypeScript version

N/A - whatever codesandbox uses

Additional context

No response

Terms & Code of Conduct

  • I agree to follow this project's Code of Conduct
  • I understand that if my bug cannot be reliable reproduced in a debuggable environment, it will probably not be fixed and this issue may even be closed.
@VincEnterprise
Copy link

Also see: #4720

@tannerlinsley could you please take a look at this 🥹🙏

I really want to use tabstack table for a project but this specific issue is preventing me from being able to use it.

This naive UI example here (cascade checking) has the behavior we are expecting:

https://www.naiveui.com/en-US/os-theme/components/tree#cascade.vue

@VincEnterprise
Copy link

bump

@artem-zaiko-yara
Copy link

artem-zaiko-yara commented Jun 14, 2023

I use this workaround until the bug is fixed (React):

useEffect(() => {
  const { rows } = table.getRowModel();
  rows.forEach((row) => {
    const allSuRowsSelected = row.subRows.length > 0 && row.subRows.every(({ getIsSelected }) => getIsSelected());
    if (allSuRowsSelected) {
      row.toggleSelected(true);
    }
  });
}, [rowSelection, table]);

@R-Bower
Copy link

R-Bower commented Jan 27, 2024

Link to fix:
#3965 (comment)

@Profesor08
Copy link

bump, issue is actual

Current workaround is to toggle manually

  useEffect(() => {
    const { rows } = table.getRowModel();

    rows.forEach((row) => {
      if (row.subRows.length > 0) {
        if (row.getIsAllSubRowsSelected() === true) {
          row.toggleSelected(true);
        } else if (row.getIsSomeSelected() === false) {
          row.toggleSelected(false);
        }
      }
    });
  }, [rowSelection, table]);

@VACincoming
Copy link

Any updates on this issue?
I'm planning to update from v7 -> v8 because v7 has a bug with isSomeSelected prop for nested rows, but looks like updating does not make any sense because a v8 still has a problem with checkboxes for nested rows...

#3965

@pelletier197
Copy link

Just noticed the same issue 👍

@Macs89
Copy link

Macs89 commented Mar 20, 2024

Yep, I've run into this issue too.

@minhdtb-tanaakk
Copy link

same issue here

@cthomesmatt
Copy link

cthomesmatt commented Apr 3, 2024

bump, issue is actual

Current workaround is to toggle manually

  useEffect(() => {
    const { rows } = table.getRowModel();

    rows.forEach((row) => {
      if (row.subRows.length > 0) {
        if (row.getIsAllSubRowsSelected() === true) {
          row.toggleSelected(true);
        } else if (row.getIsSomeSelected() === false) {
          row.toggleSelected(false);
        }
      }
    });
  }, [rowSelection, table]);

This is a great fix since the issue is still occurring, thank you! I noticed that the table.getIsSomeRowsSelected() handler isn't counting grouped rows that are being selected, so to fix this I fixed up a function you can use to check if any are selected in the grouped or subrows, hope it helps someone like it did for me.

function getIsAnyRowsSelected(table: Table<any>) {
    const rows = table.getExpandedRowModel().rows;
    const { rowSelection } = table.getState();

    let isAnyRowsSelected = rows.some(row => {
      if (rowSelection[row.id]) return true;

      if (row.subRows.some(subRow => rowSelection[subRow.id])) return true;

      return false;
    });

    return isAnyRowsSelected;
  }

@vladcos
Copy link

vladcos commented Apr 17, 2024

same issue

@mttigg
Copy link

mttigg commented May 8, 2024

Following this issue.

@xuyunan
Copy link

xuyunan commented May 30, 2024

same issue

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

No branches or pull requests