@@ -689,3 +689,66 @@ def updateDiv(n_clicks):
689
689
dash_dcc .wait_for_text_to_equal ("#div-1" , "changed" )
690
690
691
691
assert dash_dcc .get_logs () == []
692
+
693
+ # multiple components, only one triggers the spinner
694
+ def test_ldcp017_loading_component_target_components_duplicates (dash_dcc ):
695
+
696
+ lock = Lock ()
697
+
698
+ app = Dash (__name__ )
699
+
700
+ app .layout = html .Div (
701
+ [
702
+ dcc .Loading (
703
+ [
704
+ html .Button (id = "btn-1" ),
705
+ html .Button (id = "btn-2" , children = "content 2" ),
706
+ ],
707
+ className = "loading-1" ,
708
+ target_components = {"btn-2" : "children" },
709
+ debug = True
710
+ )
711
+ ],
712
+ id = "root" ,
713
+ )
714
+
715
+ @app .callback (Output ("btn-1" , "children" ), [Input ("btn-2" , "n_clicks" )])
716
+ def updateDiv1 (n_clicks ):
717
+ if n_clicks :
718
+ with lock :
719
+ return "changed 1"
720
+
721
+ return "content 1"
722
+
723
+ @app .callback (Output ("btn-2" , "children" , allow_duplicate = True ),
724
+ [Input ("btn-1" , "n_clicks" )],
725
+ prevent_initial_call = True )
726
+ def updateDiv2 (n_clicks ):
727
+ if n_clicks :
728
+ with lock :
729
+ return "changed 2"
730
+
731
+ return "content 2"
732
+
733
+ dash_dcc .start_server (app )
734
+
735
+ dash_dcc .wait_for_text_to_equal ("#btn-1" , "content 1" )
736
+ dash_dcc .wait_for_text_to_equal ("#btn-2" , "content 2" )
737
+
738
+ with lock :
739
+ dash_dcc .find_element ("#btn-1" ).click ()
740
+
741
+ dash_dcc .find_element (".loading-1 .dash-spinner" )
742
+ dash_dcc .wait_for_text_to_equal ("#btn-2" , "" )
743
+
744
+ dash_dcc .wait_for_text_to_equal ("#btn-2" , "changed 2" )
745
+
746
+ with lock :
747
+ dash_dcc .find_element ("#btn-2" ).click ()
748
+ spinners = dash_dcc .find_elements (".loading-1 .dash-spinner" )
749
+ dash_dcc .wait_for_text_to_equal ("#btn-1" , "" )
750
+
751
+ dash_dcc .wait_for_text_to_equal ("#btn-1" , "changed 1" )
752
+ assert spinners == []
753
+
754
+ assert dash_dcc .get_logs () == []
0 commit comments