@@ -210,9 +210,18 @@ def generate_data(ui_request: pb.UiRequest) -> Generator[str, None, None]:
210
210
runtime ().context ().reset_previous_node ()
211
211
runtime ().context ().reset_current_node ()
212
212
213
- result = runtime ().context ().run_event_handler (ui_request .user_event )
214
213
path = ui_request .path
215
214
has_run_navigate_on_load = False
215
+
216
+ if ui_request .user_event .HasField ("navigation" ):
217
+ page_config = runtime ().get_page_config (path = path )
218
+ if (
219
+ page_config and page_config .on_load and not has_run_navigate_on_load
220
+ ):
221
+ has_run_navigate_on_load = True
222
+ yield from run_page_load (path = path )
223
+
224
+ result = runtime ().context ().run_event_handler (ui_request .user_event )
216
225
for _ in result :
217
226
navigate_commands = [
218
227
command
@@ -240,14 +249,7 @@ def generate_data(ui_request: pb.UiRequest) -> Generator[str, None, None]:
240
249
and not has_run_navigate_on_load
241
250
):
242
251
has_run_navigate_on_load = True
243
- result = page_config .on_load (LoadEvent (path = path ))
244
- # on_load is a generator function then we need to iterate through
245
- # the generator object.
246
- if result :
247
- for _ in result :
248
- yield from render_loop (path = path , init_request = True )
249
- runtime ().context ().set_previous_node_from_current_node ()
250
- runtime ().context ().reset_current_node ()
252
+ yield from run_page_load (path = path )
251
253
252
254
yield from render_loop (path = path )
253
255
runtime ().context ().set_previous_node_from_current_node ()
@@ -265,6 +267,18 @@ def generate_data(ui_request: pb.UiRequest) -> Generator[str, None, None]:
265
267
error = pb .ServerError (exception = str (e ), traceback = format_traceback ())
266
268
)
267
269
270
+ def run_page_load (* , path : str ):
271
+ page_config = runtime ().get_page_config (path = path )
272
+ assert page_config and page_config .on_load
273
+ result = page_config .on_load (LoadEvent (path = path ))
274
+ # on_load is a generator function then we need to iterate through
275
+ # the generator object.
276
+ if result :
277
+ for _ in result :
278
+ yield from render_loop (path = path , init_request = True )
279
+ runtime ().context ().set_previous_node_from_current_node ()
280
+ runtime ().context ().reset_current_node ()
281
+
268
282
@flask_app .route (UI_PATH , methods = ["POST" ])
269
283
def ui_stream () -> Response :
270
284
# Prevent CSRF by checking the request site matches the site
0 commit comments