Created
February 6, 2023 18:17
-
-
Save Diegiwg/c669805e0c80dba6152ed64fa371f452 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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