test ferst
This commit is contained in:
70
web/router.py
Normal file
70
web/router.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import flet as ft
|
||||
|
||||
from views.news_feed import NewsFeedView
|
||||
from views.news_detail import NewsDetailView
|
||||
from views.login import LoginView
|
||||
from views.dashboard import DashboardView
|
||||
from views.articles_list import ArticlesListView
|
||||
from views.article_editor import ArticleEditorView
|
||||
from views.categories import CategoriesView
|
||||
from views.media_library import MediaLibraryView
|
||||
|
||||
_PUBLIC = {"/", "/admin/login"}
|
||||
|
||||
|
||||
def _is_admin(route: str) -> bool:
|
||||
return route.startswith("/admin") and route != "/admin/login"
|
||||
|
||||
|
||||
def _parts(route: str) -> list[str]:
|
||||
return [p for p in route.strip("/").split("/") if p]
|
||||
|
||||
|
||||
def resolve_view(page: ft.Page, route: str):
|
||||
parts = _parts(route)
|
||||
|
||||
if not parts or route == "/":
|
||||
return NewsFeedView(page)
|
||||
|
||||
if parts[0] == "news" and len(parts) >= 2:
|
||||
return NewsDetailView(page, slug=parts[1])
|
||||
|
||||
if parts[0] == "admin":
|
||||
if len(parts) == 1:
|
||||
return DashboardView(page)
|
||||
sub = parts[1]
|
||||
if sub == "login":
|
||||
return LoginView(page)
|
||||
if sub == "articles":
|
||||
if len(parts) == 2:
|
||||
return ArticlesListView(page)
|
||||
if len(parts) >= 3:
|
||||
aid = parts[2]
|
||||
return ArticleEditorView(page, article_id=None if aid == "new" else aid)
|
||||
if sub == "categories":
|
||||
return CategoriesView(page)
|
||||
if sub == "media":
|
||||
return MediaLibraryView(page)
|
||||
return DashboardView(page)
|
||||
|
||||
return NewsFeedView(page)
|
||||
|
||||
|
||||
async def handle_route(page: ft.Page):
|
||||
route = page.route or "/"
|
||||
|
||||
if _is_admin(route):
|
||||
token = page.session.get("token")
|
||||
if not token:
|
||||
page.go("/admin/login")
|
||||
return
|
||||
|
||||
view = resolve_view(page, route)
|
||||
flet_view = view.build_page_view()
|
||||
|
||||
page.views.clear()
|
||||
page.views.append(flet_view)
|
||||
page.update()
|
||||
|
||||
if hasattr(view, "load"):
|
||||
page.run_task(view.load)
|
||||
Reference in New Issue
Block a user