Ok, I see the issue with the maximum call stack. here is the smallest reproducible:
import dash_ag_grid as dag
from dash import Dash, html, Output, Input, callback, State, no_update
import dash_mantine_components as dmc
app = Dash(__name__)
data = [
{
"localTime": "5:00am",
"a": 0.231,
"b": 0.523,
"c": 0.423,
"d": 0.527,
},
{
"localTime": "5:15am",
"a": 0.423,
"b": 0.452,
"c": 0.523,
"d": 0.543,
},
{
"localTime": "5:30am",
"a": 0.537,
"b": 0.246,
"c": 0.426,
"d": 0.421,
},
{
"localTime": "5:45am",
"a": 0.893,
"b": 0.083,
"c": 0.532,
"d": 0.983,
},
{
"localTime": "6:00am",
"a": 0.231,
"b": 0.523,
"c": 0.423,
"d": 0.527,
},
{
"localTime": "6:15am",
"a": 0.423,
"b": 0.452,
"c": 0.523,
"d": 0.543,
},
{
"localTime": "6:30am",
"a": 0.537,
"b": 0.246,
"c": 0.426,
"d": 0.421,
},
{
"localTime": "6:45am",
"a": 0.893,
"b": 0.083,
"c": 0.532,
"d": 0.983,
},
{
"localTime": "7:00am",
"a": 0.231,
"b": 0.523,
"c": 0.423,
"d": 0.527,
},
{
"localTime": "7:15am",
"a": 0.423,
"b": 0.452,
"c": 0.523,
"d": 0.543,
},
{
"localTime": "7:30am",
"a": 0.537,
"b": 0.246,
"c": 0.426,
"d": 0.421,
},
{
"localTime": "7:45am",
"a": 0.893,
"b": 0.083,
"c": 0.532,
"d": 0.983,
},
{
"localTime": "8:00am",
"a": 0.231,
"b": 0.523,
"c": 0.423,
"d": 0.527,
},
{
"localTime": "8:15am",
"a": 0.423,
"b": 0.452,
"c": 0.523,
"d": 0.543,
},
{
"localTime": "8:30am",
"a": 0.537,
"b": 0.246,
"c": 0.426,
"d": 0.421,
},
{
"localTime": "8:45am",
"a": 0.893,
"b": 0.083,
"c": 0.532,
"d": 0.983,
},
{
"localTime": "8:00am",
"a": 0.231,
"b": 0.523,
"c": 0.423,
"d": 0.527,
},
{
"localTime": "8:15am",
"a": 0.423,
"b": 0.452,
"c": 0.523,
"d": 0.543,
},
{
"localTime": "8:30am",
"a": 0.537,
"b": 0.246,
"c": 0.426,
"d": 0.421,
},
{
"localTime": "8:45am",
"a": 0.893,
"b": 0.083,
"c": 0.532,
"d": 0.983,
},
]
columnDefs = [
{"field": "localTime"},
{"field": "a"},
{"field": "b"},
{"field": "c"},
{"field": "d"},
]
popover = dmc.Stack(
[
dmc.Select(
value=None,
data=[x["field"] for x in columnDefs],
id="column_populate",
clearable=True,
# comboboxProps=dict(withInPortal=True),
),
dmc.Button("Remove Column", id="my-button", color="blue",fullWidth=True),
]
)
ag_grid = dag.AgGrid(
id="grid",
rowData=data,
columnDefs=columnDefs,
defaultColDef={
"resizable": True,
"sortable": True,
"filter": True,
"flex": 1,
},
dashGridOptions={"suppressRowTransform": True},
)
app.layout = dmc.MantineProvider(
html.Div([
dmc.Grid(children=[
dmc.GridCol(span=12,children=popover),
dmc.GridCol(span=12,children=ag_grid),
],align='flex-end')
],style={'height':'100vh','width':'100vw','padding':'20px'})
)
@callback(
Output("grid", "columnDefs"),
Input("my-button", "n_clicks"),
State("column_populate", "value"),
State("grid", "columnDefs"),
)
def remove_column(n_clicks, column_name, input_columnDefs):
if n_clicks is None or column_name is None:
return no_update
return [
col for col in input_columnDefs if col["field"] != column_name
]
if __name__ == "__main__":
app.run(debug=True)