feat: initial LMS frontend with adaptive navigation and routing
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import flet as ft
|
||||
|
||||
from app.layout import main_layout
|
||||
from app.pages.login import login_page
|
||||
from app.pages.articles import articles_page
|
||||
from app.pages.courses import courses_page
|
||||
from app.pages.my_courses import my_courses_page
|
||||
from app.pages.progress import progress_page
|
||||
from app.pages.profile import profile_page
|
||||
from app.state import state
|
||||
|
||||
async def main(page: ft.Page):
|
||||
page.title = "LMS Frontend"
|
||||
|
||||
# register font
|
||||
page.fonts = {
|
||||
"NotoSansThai": "assets/fonts/NotoSansThai-Regular.ttf",
|
||||
"NotoSansThaiMedium": "assets/fonts/NotoSansThai-Medium.ttf",
|
||||
"NotoSansThaiBold": "assets/fonts/NotoSansThai-Bold.ttf",
|
||||
}
|
||||
|
||||
page.theme = ft.Theme(font_family="NotoSansThai")
|
||||
|
||||
# GLOBAL CONTAINER (รองรับ Persistent Layout + Dynamic Content)
|
||||
main_container = ft.Container(expand=True)
|
||||
|
||||
# ROUTES MAP
|
||||
routes = {
|
||||
"/articles": articles_page,
|
||||
"/courses": courses_page,
|
||||
"/my_courses": my_courses_page,
|
||||
"/progress": progress_page,
|
||||
"/profile": profile_page,
|
||||
}
|
||||
|
||||
# ROUTING
|
||||
async def route_change(e):
|
||||
print(">>> route_change:", page.route)
|
||||
|
||||
# กัน user แอบเข้า /main โดยไม่ login
|
||||
if page.route != "/login" and not state.access_token:
|
||||
await page.push_route("/login")
|
||||
return
|
||||
|
||||
# LOGIN
|
||||
if page.route == "/login":
|
||||
page.views.clear()
|
||||
|
||||
page.views.append(
|
||||
ft.View(
|
||||
route="/login",
|
||||
controls=[
|
||||
login_page(page, on_login_success=go_articles)
|
||||
],
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
vertical_alignment=ft.MainAxisAlignment.CENTER,
|
||||
)
|
||||
)
|
||||
|
||||
# MAIN
|
||||
else:
|
||||
# สร้าง view ครั้งเดียว
|
||||
if not page.views or page.views[-1].route != "/main":
|
||||
page.views.clear()
|
||||
|
||||
page.views.append(
|
||||
ft.View(
|
||||
route="/main",
|
||||
controls=[
|
||||
main_layout(page, main_container)
|
||||
],
|
||||
)
|
||||
)
|
||||
|
||||
# เปลี่ยน content อย่างเดียว
|
||||
if page.route in routes:
|
||||
main_container.content = routes[page.route]()
|
||||
else:
|
||||
main_container.content = ft.Text("404 NOT FOUND")
|
||||
|
||||
page.update()
|
||||
|
||||
# LOGIN SUCCESS
|
||||
async def go_articles():
|
||||
print(">>> GO ARTICLES")
|
||||
await page.push_route("/articles")
|
||||
|
||||
page.on_route_change = route_change
|
||||
|
||||
# start app
|
||||
await page.push_route("/login")
|
||||
|
||||
ft.run(main)
|
||||
Reference in New Issue
Block a user