@@ -689,3 +689,66 @@ def updateDiv(n_clicks):
689689 dash_dcc .wait_for_text_to_equal ("#div-1" , "changed" )
690690
691691 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