You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Sorting direction not updating properly with manual sorting and same values on current page #5147
When the data in the table column is all the same value (an empty string), the header.column.getIsSorted() function goes from ascending to false and never reaches descending.
Your minimal, reproducible example
Do not have
Steps to reproduce
Sort by a column with data that has empty values.
See that the empty values are shown first with ascending sorting.
Try to click again (execute header.column.getToggleSortingHandler())
And see that the sorting direction changes from ascending to false.
Expected behavior
The sorting direction should be changing to descending, instead of returning to false.
How often does this bug happen?
Every time
Screenshots or Videos
No response
Platform
macOS
react-table version
8.10.3
TypeScript version
5.1.6
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.
changed the title [-]Sorting direction not updating properly with manual sorting and same values[/-][+]Sorting direction not updating properly with manual sorting and same values on current page[/+]on Oct 30, 2023
I fetch the sorted data to the table from the API and the first value of the column is now null instead of a string.
I call column.toggleSorting() again
column.getAutoSortDir() now returns desc instead of asc because the first value is null
That's why column.getNextSortingOrder() decides to turn off sorting for the column by returning false because it thinks it had already been ordered desc previously
My current workaround is to set the sortDescFirst: true manually for the column (or globally for the table), so the getAutoSortDir() won't be used.
I also encountered this problem when implementing manual sorting. After some time of debugging I found the problem. This is caused by comparing the value of a column with a string, which leads to a change in the default auto sort direction value, when value was a string during the first sort and null or undefined during the second.
Maybe you should define a default auto sort direction based only on sortDescFirst?
Activity
[-]Sorting direction not updating properly with manual sorting and same values[/-][+]Sorting direction not updating properly with manual sorting and same values on current page[/+]zsilbi commentedon Nov 13, 2023
I have the same problem.
column.toggleSorting()column.getAutoSortDir()returnsascbecause the first value is astring, so the column will be sortedascinitially.table/packages/table-core/src/features/Sorting.ts
Lines 332 to 342 in a1e9732
nullinstead of a string.column.toggleSorting()againcolumn.getAutoSortDir()now returnsdescinstead ofascbecause the first value isnullcolumn.getNextSortingOrder()decides to turn off sorting for the column by returningfalsebecause it thinks it had already been ordereddescpreviouslyMy current workaround is to set the
sortDescFirst: truemanually for the column (or globally for the table), so thegetAutoSortDir()won't be used.table/packages/table-core/src/features/Sorting.ts
Lines 68 to 73 in a1e9732
tomdubraw commentedon Dec 11, 2023
Same issue, thanks @zsilbi, we use your trick as a temp workaround.
Any updates to have a proper way to have ASC first without breaking the lib ?
Oberin98 commentedon Jan 15, 2024
I also encountered this problem when implementing manual sorting. After some time of debugging I found the problem. This is caused by comparing the value of a column with a string, which leads to a change in the default auto sort direction value, when value was a string during the first sort and null or undefined during the second.
Maybe you should define a default auto sort direction based only on
sortDescFirst?Oberin98 commentedon Jan 15, 2024
May be this example will be helpful to someone

eliranma commentedon Mar 17, 2024
@Oberin98
I tried use your snippet above, but it doesn't remove my sorting, the "asc->desc" flow goes right but i can remove the sorting.
const handleSorting = () => { const isSortable = column.getCanSort(); if (isSortable) { const ctx = header.getContext(); const isSorted = header.column.getIsSorted(); const isSortDescFirst = !!header.column.columnDef.sortDescFirst || !!ctx.table.options.sortDescFirst; const isEnableSortingRemoval = !!ctx.table.options.enableSortingRemoval; if (!isSorted) { header.column.toggleSorting(isSortDescFirst); } if (isSorted === "asc") { if (isSortDescFirst && isEnableSortingRemoval) { header.column.clearSorting(); } else { header.column.toggleSorting(true); } } if (isSorted === "desc") { if (!isSortDescFirst && isEnableSortingRemoval) { header.column.clearSorting(); } else { header.column.toggleSorting(false); } } } };And my usage:
<div {...{ className: header.column.getCanSort() ? "cursor-pointer select-none " : "bg-slate-50", onClick: handleSorting, }} > {flexRender(header.column.columnDef.header, header.getContext())} {{ asc: "🔼", desc: "🔽", false: "", }[header.column.getIsSorted()] ?? null} </div>Oberin98 commentedon Mar 18, 2024
@eliranma did you set
enableSortingRemovaloption to true?eliranma commentedon Mar 20, 2024
@Oberin98
Yap,
// Sorting
enableSorting: true,
onSortingChange: handleSorting,
enableSortingRemoval: true,
enableMultiRemove: true,
sortDescFirst: true,
manualSorting: true,
eliranma commentedon Mar 26, 2024
Hi Guys, any suggestion? maybe downgrade to previous version?
arkdev9 commentedon Mar 8, 2025
Is there any plan to fix this? The workaround I am using is
sneakylenny commentedon Mar 13, 2025
@eliranma @arkdev9
We decided to overwrite the function responsible for this as we prefer it to be always "asc" in any case:
But you could write your own logic.
fix(table-core): correct expanded/paginated state contents and sortin…
fix(table-core): correct expanded/paginated state contents and sortin…