feat: initial LMS frontend with adaptive navigation and routing
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import flet as ft
|
||||
|
||||
def adaptive_menu(page: ft.Page):
|
||||
is_mobile = page.width < 600
|
||||
|
||||
menu_keys = ['articles', 'courses', 'my_courses', 'progress', 'profile', 'logout']
|
||||
|
||||
async def handle_change(e):
|
||||
index = int(e.control.selected_index)
|
||||
key = menu_keys[index]
|
||||
|
||||
if key == "logout":
|
||||
from app.state import state
|
||||
state.access_token = None
|
||||
await page.push_route("/login") # หรือ page.go
|
||||
return
|
||||
|
||||
route = f"/{menu_keys[index]}"
|
||||
print(f">>> Navigating to: {route}")
|
||||
await page.push_route(route)
|
||||
|
||||
# sync selected index กับ route
|
||||
current_route = page.route.replace("/", "") or "articles"
|
||||
|
||||
if current_route not in menu_keys:
|
||||
current_route = "articles"
|
||||
|
||||
current_selected_index = menu_keys.index(current_route)
|
||||
|
||||
if is_mobile:
|
||||
return ft.NavigationBar(
|
||||
destinations=[
|
||||
ft.NavigationBarDestination(icon=ft.Icons.ARTICLE, label='บทความ'),
|
||||
ft.NavigationBarDestination(icon=ft.Icons.SCHOOL, label='หลักสูตร'),
|
||||
ft.NavigationBarDestination(icon=ft.Icons.BOOK, label='คอร์สของฉัน'),
|
||||
ft.NavigationBarDestination(icon=ft.Icons.TRENDING_UP, label='ความคืบหน้า'),
|
||||
ft.NavigationBarDestination(icon=ft.Icons.PERSON, label='โปรไฟล์'),
|
||||
ft.NavigationBarDestination(icon=ft.Icons.LOGOUT, label="ออกจากระบบ"
|
||||
),
|
||||
],
|
||||
selected_index=current_selected_index,
|
||||
on_change=handle_change,
|
||||
)
|
||||
else:
|
||||
return ft.NavigationRail(
|
||||
destinations=[
|
||||
ft.NavigationRailDestination(icon=ft.Icons.ARTICLE, label='บทความ'),
|
||||
ft.NavigationRailDestination(icon=ft.Icons.SCHOOL, label='หลักสูตร'),
|
||||
ft.NavigationRailDestination(icon=ft.Icons.BOOK, label='คอร์สของฉัน'),
|
||||
ft.NavigationRailDestination(icon=ft.Icons.TRENDING_UP, label='ความคืบหน้า'),
|
||||
ft.NavigationRailDestination(icon=ft.Icons.PERSON, label='โปรไฟล์'),
|
||||
ft.NavigationRailDestination(icon=ft.Icons.LOGOUT, label="Logout"
|
||||
),
|
||||
],
|
||||
selected_index=current_selected_index,
|
||||
on_change=handle_change,
|
||||
extended=True,
|
||||
)
|
||||
Reference in New Issue
Block a user