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]

Reply via email to