POC feat: move filters and sorting to backend - #2855
Draft
Koc wants to merge 11 commits into
Draft
Conversation
5 tasks
- also changes Api Route definition to attribute Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Signed-off-by: Kostiantyn Miakshyn <molodchick@gmail.com>
Signed-off-by: Kostiantyn Miakshyn <molodchick@gmail.com>
Signed-off-by: Kostiantyn Miakshyn <molodchick@gmail.com>
Signed-off-by: Kostiantyn Miakshyn <molodchick@gmail.com>
Koc
force-pushed
the
feature/backend-sorting-and-filtering
branch
2 times, most recently
from
August 23, 2026 23:51
2b87c72 to
b0d85e7
Compare
Koc
force-pushed
the
feature/backend-sorting-and-filtering
branch
from
August 24, 2026 00:10
b0d85e7 to
76efebb
Compare
Signed-off-by: Kostiantyn Miakshyn <molodchick@gmail.com>
Koc
commented
Aug 24, 2026
| case BEGINS_WITH = 'begins-with'; | ||
| case ENDS_WITH = 'ends-with'; | ||
| case CONTAINS = 'contains'; | ||
| case CONTAINS_ITEM = 'contains-item'; |
Contributor
Author
There was a problem hiding this comment.
do we need to move that into separate PR?
Koc
force-pushed
the
feature/backend-sorting-and-filtering
branch
from
August 24, 2026 00:47
76efebb to
c2e7efb
Compare
Signed-off-by: Kostiantyn Miakshyn <molodchick@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR is implemented on top of #1565. It contains all possible functionality added in V2. It moves table row listing, filtering, sorting and search to the backend so large tables can paginate without double-renders or stale page numbers.
I will try to extract some independent parts to separate PRs to simplify code review process.
What changed
GET /api/2/{tables|views}/{nodeId}/rows,.../rows/countand.../rows/export, plusGET /api/2/public/{token}/rows,.../rows/countand.../rows/export. Only the requested page is loaded, and client-side sorting/filtering in the table grid is now removed completely.BACKEND_SORTABLE_TYPESallow-list in the frontend; onlytext-line,text-link,selection,selection-multi,number,number-stars,number-progress,datetime-date,datetime-timeanddatetimecolumns show the sorting UI.https://nextcloud.test/apps/tables/#/table/9?filter=[{%22columnId%22:47,%22operator%22:%22contains%22,%22value%22:%22Sa%22}]&search=en&page=2&perPage=25rowIdsURL query parameter. The selection menu has a "Share selected rows" action that copies a shareable link and temporarily shows an "Open" button. Example urlhttps://nextcloud.test/apps/tables/#/table/9?rowIds=4025%2C3970%2C3989.../rows/exportendpoint (private and public); the backend builds the CSV from all matching rows (with filters, sort, search androwIds) and returns it as a file.contains,does-not-contain,begins-with,ends-with) are currently case-sensitive; case-insensitive filter matching is implemented in Fix: Make case-insensitive search for the view filters #2816.Known limitations
9 > 100), and datetime values are sorted as raw strings.selection/selection-multisort by raw option ID, not by option label.usergroupandrelationcolumns sort by raw user/row IDs, not by display labels, andselection-check/text-long/text-richare not guarded from sorting.contains/does-not-containontext-long/text-richsearches raw stored values (possibly with HTML for rich text) rather than visible text.TableRow.vuecurrently has'search-result': falseand'filter-result': falsewith no backend signal indicating which cell matched.What to test
rowIdsquery parameter and confirming only the selected rows are loaded.🗒️ TODO
🏁 Checklist
/backport to stableX.X🤖 AI (if applicable)