1- # Advanced demo showing how to use the ui.outlet and outlet.view decorators to create a nested multi-page app with a
1+ # Advanced demo showing how to use the ui.content decorators to create a nested multi-page app with a
22# static header, footer and menu which is shared across all pages and hidden when the user navigates to the root page.
33
44from examples .single_page_app_complex .cms_config import ServiceDefinition , SubServiceDefinition , services
88# --- Other app ---
99
1010
11- @ui .outlet ('/other_app' ) # Needs to be defined before the main outlet / to avoid conflicts
11+ @ui .content ('/other_app' ) # Needs to be defined before the / to avoid conflicts
1212async def other_app_router ():
1313 ui .label ('Other app header' ).classes ('text-h2' )
1414 ui .html ('<hr>' )
@@ -17,14 +17,14 @@ async def other_app_router():
1717 ui .label ('Other app footer' )
1818
1919
20- @other_app_router .view ('/' )
20+ @other_app_router .content ('/' )
2121async def other_app_index ():
2222 ui .label ('Welcome to the index page of the other application' )
2323
2424
2525# --- Main app ---
2626
27- @ui .outlet ('/' ) # main app outlet
27+ @ui .content ('/' ) # main app
2828async def main_router (url_path : str ):
2929 with ui .header ():
3030 with ui .link ('' , '/' ).style ('text-decoration: none; color: inherit;' ):
@@ -36,10 +36,10 @@ async def main_router(url_path: str):
3636 with ui .element ('a' ).props ('href="/about"' ):
3737 ui .label ('Copyright 2024 by NiceCLOUD Inc.' ).classes ('text-h7' )
3838 with ui .element ().classes ('p-8' ):
39- yield {'menu_drawer' : menu_drawer } # pass menu drawer to all sub elements (views and outlets)
39+ yield {'menu_drawer' : menu_drawer } # pass menu drawer to all sub elements
4040
4141
42- @main_router .view ('/' )
42+ @main_router .content ('/' )
4343async def main_index (menu_drawer : LeftDrawer ): # main app index page
4444 menu_drawer .clear () # clear drawer
4545 menu_drawer .hide () # hide drawer
@@ -61,7 +61,7 @@ async def main_index(menu_drawer: LeftDrawer): # main app index page
6161 ui .markdown ('Click [here](/other_app) to visit the other app.' )
6262
6363
64- @main_router .view ('/about' )
64+ @main_router .content ('/about' )
6565async def about_page (menu_drawer : LeftDrawer ):
6666 menu_drawer .clear ()
6767 menu_drawer .hide ()
@@ -73,7 +73,7 @@ async def about_page(menu_drawer: LeftDrawer):
7373 ui .label ('Nice Country' )
7474
7575
76- @main_router .outlet ('/services/{service_name}' ) # service outlet
76+ @main_router .content ('/services/{service_name}' )
7777async def services_router (service_name : str , menu_drawer : LeftDrawer ):
7878 service : ServiceDefinition = services [service_name ]
7979 menu_drawer .clear ()
@@ -92,7 +92,7 @@ async def services_router(service_name: str, menu_drawer: LeftDrawer):
9292 service_element .classes ('text-white text-h6 bg-gray cursor-pointer' )
9393 service_element .style ('text-shadow: 2px 2px #00000070;' )
9494 service_element .on ('click' , lambda url = f'/services/{ service_name } /{ key } ' : ui .navigate .to (url ))
95- yield {'service' : service } # pass service object to all sub elements (views and outlets)
95+ yield {'service' : service } # pass service object to all sub elements
9696
9797
9898def update_title (service : ServiceDefinition = None ,
@@ -102,7 +102,7 @@ def update_title(service: ServiceDefinition = None,
102102 ui .page_title (new_title )
103103
104104
105- @services_router .view ('/' ) # service index page
105+ @services_router .content ('/' ) # service index page
106106async def show_index (service : ServiceDefinition ):
107107 update_title (service , None )
108108 with ui .row ():
@@ -113,15 +113,15 @@ async def show_index(service: ServiceDefinition):
113113 ui .html ('<br>' )
114114
115115
116- @services_router .outlet ('/{sub_service_name}' ) # sub service outlet
116+ @services_router .content ('/{sub_service_name}' )
117117async def sub_service_router (service : ServiceDefinition , sub_service_name : str ):
118118 sub_service : SubServiceDefinition = service .sub_services [sub_service_name ]
119119 ui .label (f'{ service .title } > { sub_service .title } ' ).classes ('text-h4' )
120120 ui .html ('<br>' )
121- yield {'sub_service' : sub_service } # pass sub_service object to all sub elements (views and outlets)
121+ yield {'sub_service' : sub_service } # pass sub_service object to all sub elements
122122
123123
124- @sub_service_router .view ('/' ) # sub service index page
124+ @sub_service_router .content ('/' )
125125async def sub_service_index (service : ServiceDefinition , sub_service : SubServiceDefinition ):
126126 update_title (service , sub_service )
127127 ui .label (sub_service .emoji ).classes ('text-h1' )
0 commit comments