Skip to content

Instantly share code, notes, and snippets.

@Diegiwg
Created February 6, 2023 18:17
Show Gist options
  • Save Diegiwg/c669805e0c80dba6152ed64fa371f452 to your computer and use it in GitHub Desktop.
Save Diegiwg/c669805e0c80dba6152ed64fa371f452 to your computer and use it in GitHub Desktop.
from nicegui import ui, page
from dataclasses import dataclass
from typing import Callable
@dataclass
class Route:
path: str
callback: Callable
class RouteManeger:
routes: dict[str, Route]
current_route: Route
def __init__(self) -> None:
self.routes = dict()
def register_route(self, route: Route):
self.routes[route.path] = route
def set_route(self, route_path: str):
self.current_route = self.routes[route_path]
def run_route(self):
return self.current_route.callback()
rm = RouteManeger()
class State:
def set_root(self, root):
self.root = root
def set_element(self, element):
self.element = element
def get_root(self):
return self.root
def get_element(self):
return self.element
def test_page():
with ui.card() as main:
ui.label("TEST")
return main
test = Route(path="test", callback=test_page)
rm.register_route(test)
def ola_mundo_page():
with ui.card() as main:
ui.label("Ola Mundo")
ui.label("vai que cola")
return main
ola_mundo = Route(path="ola-mundo", callback=ola_mundo_page)
rm.register_route(ola_mundo)
rm.set_route("ola-mundo")
def redirect(route_path: str):
rm.set_route(route_path)
temp = rm.run_route()
state.get_element().clear()
state.get_element().slots = temp.slots
state.get_root().remove(element=temp)
state = State()
@ui.page("/")
def html():
with ui.left_drawer():
ui.label("Do Lado")
ui.button("Test", on_click=lambda: redirect("test"))
ui.button("Ola Mundo", on_click=lambda: redirect("ola-mundo"))
with ui.card().style(add="width: 100%; height: 90vh;") as root:
element = rm.run_route()
state.set_root(root=root)
state.set_element(element=element)
ui.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment