Skip to content

Commit 8327a9f

Browse files
authored
Merge pull request #400 from BSd3v/fix/columnstate-chain
minor tweak to column state chain for updates
2 parents 45fb131 + b92e4cd commit 8327a9f

File tree

2 files changed

+207
-5
lines changed

2 files changed

+207
-5
lines changed

src/lib/fragments/AgGrid.react.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,10 +1342,10 @@ export function DashAgGrid(props) {
13421342

13431343
// Handle gridApi initialization - column state application
13441344
useEffect(() => {
1345-
if (gridApi && gridApi !== prevGridApi && props.columnState) {
1345+
if (gridApi && gridApi !== prevGridApi && columnState_push) {
13461346
setColumnState();
13471347
}
1348-
}, [gridApi, prevGridApi, props.columnState, setColumnState]);
1348+
}, [gridApi, prevGridApi, columnState_push]);
13491349

13501350
// Handle gridApi initialization - finalization
13511351
useEffect(() => {
@@ -1378,7 +1378,7 @@ export function DashAgGrid(props) {
13781378
setColumnState_push(true);
13791379
}
13801380
}
1381-
}, [props.columnState, props.loading_state, columnState_push]);
1381+
}, [props.columnState, props.loading_state]);
13821382

13831383
// Handle ID changes
13841384
useEffect(() => {

tests/test_column_state.py

Lines changed: 204 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dash import Dash, html, Output, Input, no_update, State, ctx
1+
from dash import Dash, html, Output, Input, no_update, State, ctx, Patch
22
import dash_ag_grid as dag
33
import plotly.express as px
44
import json
@@ -315,4 +315,206 @@ def make_grid(n):
315315
for x in range(10):
316316
dash_duo.find_element("#add-grid").click()
317317
time.sleep(2) # pausing to emulate separation because user inputs
318-
assert list(filter(lambda i: i.get("level") != "WARNING", dash_duo.get_logs())) == []
318+
assert list(filter(lambda i: i.get("level") != "WARNING", dash_duo.get_logs())) == []
319+
320+
def test_cs003_column_state(dash_duo):
321+
data = [
322+
{
323+
"localTime": "5:00am",
324+
"a": 0.231,
325+
"b": 0.523,
326+
"c": 0.423,
327+
"d": 0.527,
328+
},
329+
{
330+
"localTime": "5:15am",
331+
"a": 0.423,
332+
"b": 0.452,
333+
"c": 0.523,
334+
"d": 0.543,
335+
},
336+
{
337+
"localTime": "5:30am",
338+
"a": 0.537,
339+
"b": 0.246,
340+
"c": 0.426,
341+
"d": 0.421,
342+
},
343+
{
344+
"localTime": "5:45am",
345+
"a": 0.893,
346+
"b": 0.083,
347+
"c": 0.532,
348+
"d": 0.983,
349+
},
350+
{
351+
"localTime": "6:00am",
352+
"a": 0.231,
353+
"b": 0.523,
354+
"c": 0.423,
355+
"d": 0.527,
356+
},
357+
{
358+
"localTime": "6:15am",
359+
"a": 0.423,
360+
"b": 0.452,
361+
"c": 0.523,
362+
"d": 0.543,
363+
},
364+
{
365+
"localTime": "6:30am",
366+
"a": 0.537,
367+
"b": 0.246,
368+
"c": 0.426,
369+
"d": 0.421,
370+
},
371+
{
372+
"localTime": "6:45am",
373+
"a": 0.893,
374+
"b": 0.083,
375+
"c": 0.532,
376+
"d": 0.983,
377+
},
378+
{
379+
"localTime": "7:00am",
380+
"a": 0.231,
381+
"b": 0.523,
382+
"c": 0.423,
383+
"d": 0.527,
384+
},
385+
{
386+
"localTime": "7:15am",
387+
"a": 0.423,
388+
"b": 0.452,
389+
"c": 0.523,
390+
"d": 0.543,
391+
},
392+
{
393+
"localTime": "7:30am",
394+
"a": 0.537,
395+
"b": 0.246,
396+
"c": 0.426,
397+
"d": 0.421,
398+
},
399+
{
400+
"localTime": "7:45am",
401+
"a": 0.893,
402+
"b": 0.083,
403+
"c": 0.532,
404+
"d": 0.983,
405+
},
406+
{
407+
"localTime": "8:00am",
408+
"a": 0.231,
409+
"b": 0.523,
410+
"c": 0.423,
411+
"d": 0.527,
412+
},
413+
{
414+
"localTime": "8:15am",
415+
"a": 0.423,
416+
"b": 0.452,
417+
"c": 0.523,
418+
"d": 0.543,
419+
},
420+
{
421+
"localTime": "8:30am",
422+
"a": 0.537,
423+
"b": 0.246,
424+
"c": 0.426,
425+
"d": 0.421,
426+
},
427+
{
428+
"localTime": "8:45am",
429+
"a": 0.893,
430+
"b": 0.083,
431+
"c": 0.532,
432+
"d": 0.983,
433+
},
434+
{
435+
"localTime": "8:00am",
436+
"a": 0.231,
437+
"b": 0.523,
438+
"c": 0.423,
439+
"d": 0.527,
440+
},
441+
{
442+
"localTime": "8:15am",
443+
"a": 0.423,
444+
"b": 0.452,
445+
"c": 0.523,
446+
"d": 0.543,
447+
},
448+
{
449+
"localTime": "8:30am",
450+
"a": 0.537,
451+
"b": 0.246,
452+
"c": 0.426,
453+
"d": 0.421,
454+
},
455+
{
456+
"localTime": "8:45am",
457+
"a": 0.893,
458+
"b": 0.083,
459+
"c": 0.532,
460+
"d": 0.983,
461+
},
462+
]
463+
464+
columnDefs = [
465+
{"field": "localTime"},
466+
{"field": "a"},
467+
{"field": "b"},
468+
{"field": "c"},
469+
{"field": "d"},
470+
]
471+
472+
app = Dash(__name__)
473+
474+
app.layout = html.Div(
475+
[
476+
html.Div(
477+
[
478+
html.Button("Remove Column", id="remove-column", n_clicks=0),
479+
html.Div(
480+
id="grid-holder",
481+
children=[
482+
dag.AgGrid(
483+
id=f"grid",
484+
columnDefs=columnDefs,
485+
rowData=data,
486+
columnSize="autoSize",
487+
)
488+
],
489+
),
490+
],
491+
),
492+
]
493+
)
494+
495+
@app.callback(
496+
Output("grid", "columnDefs"),
497+
Input("remove-column", "n_clicks"),
498+
)
499+
def remove_column(n):
500+
if n:
501+
cols = Patch()
502+
if n < 3:
503+
del cols[0]
504+
return cols
505+
return no_update
506+
507+
dash_duo.start_server(
508+
app,
509+
debug=True,
510+
use_reloader=False,
511+
use_debugger=True,
512+
dev_tools_hot_reload=False,
513+
dev_tools_props_check=True,
514+
dev_tools_disable_version_check=True,
515+
)
516+
517+
for x in range(3):
518+
dash_duo.find_element("#remove-column").click()
519+
time.sleep(2) # pausing to emulate separation because user inputs
520+
assert list(filter(lambda i: i.get("level") != "ERROR", dash_duo.get_logs())) == []

0 commit comments

Comments
 (0)