plotly / dash-ag-grid

Dash AG Grid is a high-performance and highly customizable component that wraps AG Grid, designed for creating rich datagrids.
https://dash.plotly.com/dash-ag-grid
MIT License
175 stars 25 forks source link

[Feature Request] serverSide support #249

Closed Liripo closed 8 months ago

Liripo commented 1 year ago

Currently, I can't seem to get the code below to work.

import dash_ag_grid as dag
import dash
from dash import Input, Output, html, dcc, no_update
import os

import pandas as pd

app = dash.Dash(__name__)

from sklearn.datasets import load_iris
iris = load_iris()

iris = pd.DataFrame(iris.data, columns=iris.feature_names)

app.layout = html.Div(
    [
        dag.AgGrid(
            id="aggrid",
            columnDefs=[{"field": i} for i in iris.columns],
            enableEnterpriseModules = True,
            licenseKey = os.environ['AGGRID_ENTERPRISE'],
            rowModelType="serverSide",
            columnSize="autoSize",
            defaultColDef=dict(
                resizable=True, sortable=True, filter=True, minWidth=100
            ),
            dashGridOptions={"pagination": True},
        ),
    ]
)

@app.callback(
    Output("aggrid", "getRowsResponse"),
    Input("aggrid", "getRowsRequest"),
)
def infinite_scroll(request):
    print(request)
    if request is None:
        return no_update
    partial = iris.iloc[request["startRow"] : request["endRow"]]
    return {"rowData": partial.to_dict("records"), "rowCount": len(iris.index)}

if __name__ == "__main__":
    app.run_server(debug=True)
BSd3v commented 1 year ago

Hello @Liripo,

The serverSide rowModel doesnt come with this connection, it doesn't like the extra stuff in the request for some reason.

Here is a way that you can create your own.

https://community.plotly.com/t/serverside-rowmodeltype-in-dash-aggrid/76876/8?u=jinnyzor

Please note, the steps that I did here for getting the grids api are unnecessary and should be replaced with a simple:

grid = await dash_ag_grid.getApiAsync(id)
if (grid) {
    ...
}
Liripo commented 1 year ago

Hello @BSd3v It seems complicated. It would be great if some APIs could be provided in the python module.

BSd3v commented 1 year ago

Infinite and serverSide rowModels are more complex, and each use-case is different.

Infinite rowModel will work in most cases, unless you need info about rowGroupings, etc. Infinite will automatically give the getDetailRequest property available for the callback.

Regardless of which you choose, you will have to determine your filtering and sorting mechanism in python.

Liripo commented 1 year ago

Thanks for the help. I mainly want to use sparkline for large data.

BSd3v commented 1 year ago

Infinite might fit your needs then.

Liripo commented 1 year ago

Oh, okay, just realized.