plotly / dash-table

OBSOLETE: now part of https://github.com/plotly/dash
https://dash.plotly.com
MIT License
419 stars 74 forks source link

row_selectable and filter_action causes error Cannot ready property '0' of undefined #847

Open jchang10 opened 3 years ago

jchang10 commented 3 years ago

Individually, works fine. With both row_selectable and filter_action defined, a JS error is caused, "Cannot ready property '0' of undefined. It's an obscure error, so in a page with several components, it can be hard to pinpoint the cause.

Versions: dash 1.17.0
dash-bootstrap-components 0.10.7
dash-core-components 1.13.0
dash-html-components 1.1.1
dash-renderer 1.8.3
dash-table 4.11.0

Very straight-forward simple example below.

import logging
logger = logging.getLogger(__name__)

from dash_html_components import Div, Span
import dash_table
import dash

app = dash.Dash(__name__)

app.layout = \
    Div([
        dash_table.DataTable(id='samples-table',
            row_selectable='multi',
            style_table=dict(height='300px',overflowY='auto'),
            style_cell={'textAlign': 'left'},
            sort_action='native',
            filter_action='native',
        ),
        Div(id='last-div'),
    ])

import pandas as pd
from dash.dependencies import Input, Output, State

@app.callback(
    Output('samples-table','data'),
    Output('samples-table','columns'),
    Input('last-div','children'),
)
def samples_table(*args):
    df = pd.DataFrame([[1,2,3],[4,5,6]])
    data = df.to_dict('records')
    columns = [{'name':str(x),'id':str(x)} for x in (1,2,3)]
    return data, columns

if __name__ == '__main__':
    app.run_server(debug=True, host='0.0.0.0')
jchang10 commented 3 years ago

826 Seems related.

It looks like if I seed the data and columns in the layout first, the error disappears. If data and column are not seeded initially, then the error appears.