tanishqgandhi1908 opened a new issue, #5394: URL: https://github.com/apache/texera/issues/5394
### Feature Summary The result pane currently renders an operator's output as a paginated `nz-table` with a default page size of 5 rows. Users can navigate columns left/right and search by **column name**, but the table itself is mostly static, no row-level sort, no per-column filter, no row-content search, no column virtualization for wide tables, and clicking a row opens a popup modal that interrupts the flow. For workflows where the operator output is the primary debugging surface, this slows down exploration. Users page back and forth across multiple operators without much help from the UI. This proposal upgrades the result pane into an **interactive grid** with sort, filter, row search, column reorder / hide / pin, and an inline row inspector, with sort and filter applying to the **full dataset** (not just the rows currently in browser memory) by pushing the work down to Iceberg. ### Proposed Solution or Design Replace the `nz-table` result view with an **interactive grid** built on **ag-grid Community** (MIT-licensed), wired into the existing `ResultPaginationRequest` protocol via ag-grid's Infinite Row Model. Extend the backend so sort, filter, and row search apply to the **full dataset** rather than only the rows currently in client-side memory. ### End-user changes - **Sort** and **per-column filter** via header menus, applied across the full dataset. - **Row search** input above the grid that matches substrings across all string columns. - **Drag to reorder columns**, drawer to toggle visibility, header menu to **pin** left/right. - **DOM column virtualization** for very wide tables. - **Pagination with auto-fit page size** — the page size follows the panel's visible height. - **Custom column header** preserves the existing Min / Max / Non-Null / category-% stats inline. - **Bottom-docked row inspector** replaces the popup modal — clicking a row shows its full content inline below the grid. ### Approach at a glance - **Frontend**: swap `nz-table` for ag-grid Community. The Infinite Row Model fetches rows lazily via a custom `IDatasource` that proxies the existing `ResultPaginationRequest` WebSocket protocol — no new endpoints required for the UI work itself. - **Backend**: extend `ResultPaginationRequest` with optional `filters`, `sorts`, and `rowSearch` fields. Add `getRangeWithQuery` and `countWithQuery` to the `VirtualDocument` storage abstraction (with safe fallbacks for non-Iceberg documents). Implement them in `IcebergDocument` using Iceberg's existing predicate-pushdown into the Parquet reader, with an in-memory sort capped at a configurable threshold for safety. Wire format stays backward-compatible — new fields are optional and skipped when empty. ### Out of scope A cross-operator **transformation diff** strip (upstream-vs-current row + schema delta) was prototyped during the hackathon but is not part of this work. It can come later. ### Reference implementation A working end-to-end prototype was assembled during the hackathon and is open at [#5099](https://github.com/apache/texera/pull/5099). It bundles all of the above plus the deferred transformation diff, so it's larger than what this issue scopes. ### A note This would be my first open-source contribution to Texera. Happy to take direction on conventions, scope, and what to prioritize. If anything seems off, please push back. ### Affected Area Other -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
