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

Unexpected sorting behavior arises due to the implementation in the @tanstack/table-core library #5832

Open
2 tasks done
sglushko opened this issue Dec 12, 2024 · 3 comments

Comments

@sglushko
Copy link

TanStack Table version

8.20.5

Framework/Library version

"react": "^18.2.0",

Describe the bug and the steps to reproduce it

Code Logic: The getAutoSortDir function dynamically determines the initial sort direction based on the type of the first row's value in the column.

  • If it's a string, the sort direction is asc.

  • If it's not a string (e.g., null or number), the sort direction defaults to desc.

Problem: When the first row's value changes due to sorting, the logic re-evaluates, potentially toggling between sort states unpredictably. In your case:

  • Initial value in the first row is not a string → sort starts as desc.

  • After sorting, the first value changes to a string → subsequent toggle resets or disables sorting.

column.getAutoSortDir = () => {

column.getAutoSortDir = () => {
  const firstRow = table.getFilteredRowModel().flatRows[0]

  const value = firstRow?.getValue(column.id)

  if (typeof value === 'string') {
    return 'asc'
  }

  return 'desc'
}

Your Minimal, Reproducible Example - (Sandbox Highly Recommended)

nda

Screenshots or Videos (Optional)

No response

Do you intend to try to help solve this bug with your own PR?

None

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.
@mhuggins
Copy link

mhuggins commented Dec 17, 2024

I believe we're running into the same issue when utilizing server-based sorting. We're seeing scenarios where, depending on the column type, the sort will do one of the following.

  • nonedescnone
  • noneascnone

The expected behavior is one of the following, respectively:

  • nonedescascnone
  • noneascdescnone

@mhuggins
Copy link

For the time being, it looks like we're able to work around this by specifying a boolean value for sortDescFirst on these columns.

@sglushko
Copy link
Author

While I plan to set sortDescFirst either at the column level or globally via table.options.sortDescFirst, I wanted to highlight the root cause of the unexpected behavior. This sorting issue might appear in unpredictable scenarios if left unaddressed.

The default sorting direction currently depends on the data type of the first row in the column:

  • If the value is a string, sorting defaults to asc.
  • Otherwise, it defaults to desc.

This inconsistency can cause sorting toggles to behave unpredictably, especially in dynamic datasets.

Although sortDescFirst resolves the issue explicitly, it's important to be aware of this behavior, as similar issues might occur in other places where sorting logic is indirectly affected.

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

2 participants