michael-s-molina commented on code in PR #42088:
URL: https://github.com/apache/superset/pull/42088#discussion_r3624261913


##########
superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTable/index.tsx:
##########
@@ -416,6 +422,46 @@ const AgGridDataTable: FunctionComponent<AgGridTableProps> 
= memo(
       serverPaginationData?.agGridFilterModel,
     ]);
 
+    // Captures the "current view" (post-filter/sort, all rows across all
+    // pages) for the "Export Current View" menu, mirroring Table V1's
+    // clientView snapshot. Client-side mode only: in server pagination mode
+    // the grid only ever holds a single page's rows, so a client-derived
+    // snapshot can't represent the full filtered/sorted result and export
+    // falls back to a fresh backend query instead (see 
useExploreAdditionalActionsMenu).
+    const lastClientViewSignatureRef = useRef<string | null>(null);
+    const handleModelUpdated = useCallback(() => {
+      if (serverPagination || !onClientViewChange || !gridRef.current?.api) {
+        return;
+      }
+      const { api } = gridRef.current;
+      const displayedColumns = api
+        .getAllDisplayedColumns()
+        .filter(column => column.getColId() !== ROW_NUMBER_COL_ID);
+      const columns = displayedColumns.map(column => ({
+        key: column.getColId(),
+        label: column.getColDef().headerName || column.getColId(),
+      }));
+
+      const rows: Record<string, unknown>[] = [];
+      const rowIds: string[] = [];
+      api.forEachNodeAfterFilterAndSort(node => {
+        if (node.data) {
+          rows.push(node.data);
+          rowIds.push(node.id ?? '');
+        }

Review Comment:
   The full filtered+sorted traversal itself is inherent to accurately 
snapshotting the "current view" for export (there's no way to know the current 
filtered/sorted row set without visiting it), and it only runs in client-side 
mode — server-pagination mode returns immediately. That said, debouncing it is 
a reasonable, cheap improvement for rapid successive `onModelUpdated` events 
(e.g. typing into a quick filter), so in 4979813 wrapped it in the same 
`debounce(..., Constants.SLOW_DEBOUNCE)` pattern already used a few lines below 
for `handleGridStateChange` in this same file (with matching unmount cleanup 
for both). Only the trailing update after a quiet period now recomputes the 
snapshot.
   



-- 
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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to