From b4725b184b8bdc12ea2ee5baa655ce5f6fefc897 Mon Sep 17 00:00:00 2001 From: Flook Date: Mon, 4 May 2026 17:44:35 +0700 Subject: [PATCH] feat: initial LMS frontend with adaptive navigation and routing --- .gitignore | 6 ++ README.md | 72 ++++++++++++++++++++ app/api.py | 23 +++++++ app/layout.py | 30 +++++++++ app/pages/articles.py | 7 ++ app/pages/courses.py | 7 ++ app/pages/login.py | 69 +++++++++++++++++++ app/pages/my_courses.py | 7 ++ app/pages/profile.py | 7 ++ app/pages/progress.py | 7 ++ app/state.py | 6 ++ app/widgets/adaptive_menu.py | 58 ++++++++++++++++ assets/fonts/NotoSansThai-Bold.ttf | Bin 0 -> 47480 bytes assets/fonts/NotoSansThai-Medium.ttf | Bin 0 -> 47544 bytes assets/fonts/NotoSansThai-Regular.ttf | Bin 0 -> 47484 bytes main.py | 93 ++++++++++++++++++++++++++ requirements.txt | 3 + 17 files changed, 395 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/api.py create mode 100644 app/layout.py create mode 100644 app/pages/articles.py create mode 100644 app/pages/courses.py create mode 100644 app/pages/login.py create mode 100644 app/pages/my_courses.py create mode 100644 app/pages/profile.py create mode 100644 app/pages/progress.py create mode 100644 app/state.py create mode 100644 app/widgets/adaptive_menu.py create mode 100644 assets/fonts/NotoSansThai-Bold.ttf create mode 100644 assets/fonts/NotoSansThai-Medium.ttf create mode 100644 assets/fonts/NotoSansThai-Regular.ttf create mode 100644 main.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..345bd64 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.venv/ +__pycache__/ +*.pyc +.env +.flet/ +.idea/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..baa368e --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# LMS Frontend + +โปรเจกต์ **lms-frontend** เป็นระบบ Frontend +สำหรับระบบ **Learning Management System (LMS)** + +ระบบนี้ถูกออกแบบเพื่อ: +- รองรับการเรียนรู้ผ่าน Web / Mobile / Desktop +- ใช้โค้ดชุดเดียว (Single Codebase) แต่รองรับหลายแพลตฟอร์ม +- เชื่อมต่อกับ Backend LMS ผ่าน API +- รองรับการพัฒนา UI แบบ Modular และขยายในอนาคต + +--- + +## Purpose + +- เป็น Frontend หลักของระบบ LMS +- แสดงผลข้อมูลการเรียนรู้จาก Backend API +- รองรับผู้ใช้งานบนหลายอุปกรณ์ (Responsive + Adaptive UI) +- ออกแบบให้รองรับการ scale ในระดับ production + +--- + +## Features + +- Login / Logout (JWT Authentication) +- Adaptive Navigation + - Desktop / Web → Sidebar (NavigationRail) + - Mobile → Bottom Navigation (NavigationBar) +- Client-side Routing (ไม่ reload แอป) +- Modular Page Architecture +- Cross-platform UI (Web / Mobile / Desktop) +- รองรับฟอนต์ไทย (Noto Sans Thai) + +--- + +## Technical Overview + +- Frontend Framework: **Flet (Python)** +- Language: **Python 3.11+** +- Backend API: **Django REST API (lms-backend)** +- Authentication: **JWT** +- UI Pattern: **Adaptive Layout + Client-side Routing** +- Font: **Noto Sans Thai** + +--- + +## Project Structure + +```bash +lms-frontend/ +├── main.py # Entry point (routing & app flow) +├── app/ +│ ├── state.py # Global state (auth/session) +│ ├── layout.py # Main layout (menu + content) +│ ├── pages/ # Application pages +│ │ ├── articles.py +│ │ ├── courses.py +│ │ ├── my_courses.py +│ │ ├── progress.py +│ │ └── profile.py +│ └── widgets/ +│ └── adaptive_menu.py # Responsive navigation component +├── assets/ +│ └── fonts/ +│ └── NotoSansThai-Regular.ttf +├── requirements.txt +└── README.md +``` + +## License +- สงวนลิขสิทธิ์สำหรับการใช้งานเพื่อการศึกษาและพัฒนาภายในองค์กรเท่านั้น +- Developed with ❤️ using Flet & Python \ No newline at end of file diff --git a/app/api.py b/app/api.py new file mode 100644 index 0000000..328b837 --- /dev/null +++ b/app/api.py @@ -0,0 +1,23 @@ +import requests + +API_BASE_URL = "http://127.0.0.1:8000" + +def login(username: str, password: str): + url = f"{API_BASE_URL}/api/auth/login/" + + response = requests.post(url, json={ + "email": username, + "password": password + }) + + response.raise_for_status() + return response.json() + +def get_me(token: str): + url = f"{API_BASE_URL}/api/auth/me/" + response = requests.get( + url, + headers={"Authorization": f"Bearer {token}"} + ) + response.raise_for_status() + return response.json() \ No newline at end of file diff --git a/app/layout.py b/app/layout.py new file mode 100644 index 0000000..4dbb1ac --- /dev/null +++ b/app/layout.py @@ -0,0 +1,30 @@ +import flet as ft + +from app.widgets.adaptive_menu import adaptive_menu + +def main_layout(page: ft.Page, content_container: ft.Container): + print(">>> ENTER main_layout") + menu = adaptive_menu(page) + + # ตรวจสอบโหมด (ป้องกันหน้าจอขาวจาก width=0) + width = page.width if page.width > 0 else 1024 # default ไว้ที่ desktop ก่อนถ้ายังไม่รู้ width + is_mobile = width < 600 + print(f">>> Device mode: {'MOBILE' if is_mobile else 'DESKTOP'} (Width: {page.width})") + + if is_mobile: + return ft.Column( + controls=[ + content_container, + menu + ], + expand=True + ) + else: + return ft.Row( + controls=[ + menu, + ft.VerticalDivider(width=1), + content_container + ], + expand=True + ) \ No newline at end of file diff --git a/app/pages/articles.py b/app/pages/articles.py new file mode 100644 index 0000000..18aa138 --- /dev/null +++ b/app/pages/articles.py @@ -0,0 +1,7 @@ +import flet as ft + +def articles_page(): + return ft.Column([ + ft.Text("บทความ", size=22), + ft.Text("รายการบทความจะมาอยู่ตรงนี้"), + ]) \ No newline at end of file diff --git a/app/pages/courses.py b/app/pages/courses.py new file mode 100644 index 0000000..22a5f5c --- /dev/null +++ b/app/pages/courses.py @@ -0,0 +1,7 @@ +import flet as ft + +def courses_page(): + return ft.Column([ + ft.Text("หลักสูตร", size=22), + ft.Text("รายการหลักสูตร") + ]) \ No newline at end of file diff --git a/app/pages/login.py b/app/pages/login.py new file mode 100644 index 0000000..2e30386 --- /dev/null +++ b/app/pages/login.py @@ -0,0 +1,69 @@ +import flet as ft +import asyncio + +from app.api import login, get_me +from app.state import state + +def login_page(page: ft.Page, on_login_success): + username = ft.TextField( + label="Email", + on_submit=lambda _: handle_login(), # เรียก wrapper + autofocus=True + ) + + password = ft.TextField( + label="Password", + password=True, + can_reveal_password=True, + on_submit=lambda _: handle_login(), # เรียก wrapper + ) + + message = ft.Text() + + # WRAPPER (sync) + def handle_login(e=None): + asyncio.create_task(do_login()) # ยิง async + + # ASYNC ตัวจริง + async def do_login(): + if not username.value or not password.value: + message.value = "กรุณากรอกข้อมูลให้ครบถ้วน" + message.color = ft.Colors.RED_400 + page.update() + return + + try: + message.value = "กำลังตรวจสอบข้อมูล..." + message.color = ft.Colors.BLUE_400 + page.update() + + result = await asyncio.to_thread(login, username.value, password.value) + state.access_token = result["access"] + + state.user = await asyncio.to_thread(get_me, state.access_token) + + await on_login_success() # ไป route + + except Exception as e: + message.value = "เข้าสู่ระบบไม่สำเร็จ" + message.color = ft.Colors.RED_400 + print("LOGIN ERROR:", e) + page.update() + + login_button = ft.FilledButton( + "ล็อกอิน", + on_click=handle_login, # ใช้ wrapper + width=200, + ) + + return ft.Column( + controls=[ + ft.Text("เข้าสู่ระบบ", size=24), + username, + password, + login_button, + message, + ], + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + spacing=20, + ) \ No newline at end of file diff --git a/app/pages/my_courses.py b/app/pages/my_courses.py new file mode 100644 index 0000000..3955743 --- /dev/null +++ b/app/pages/my_courses.py @@ -0,0 +1,7 @@ +import flet as ft + +def my_courses_page(): + return ft.Column([ + ft.Text('หลักสูตรของฉัน', size=22), + ft.Text('ข้อมูลหลักสูตรที่ลงทะเบียน') + ]) \ No newline at end of file diff --git a/app/pages/profile.py b/app/pages/profile.py new file mode 100644 index 0000000..36d1566 --- /dev/null +++ b/app/pages/profile.py @@ -0,0 +1,7 @@ +import flet as ft + +def profile_page(): + return ft.Column([ + ft.Text("ข้อมูลผู้ใช้งาน", size=22), + ft.Text("รายละเอียดข้อมูลผู้ใช้งานจะมาอยู่ตรงนี้"), + ]) \ No newline at end of file diff --git a/app/pages/progress.py b/app/pages/progress.py new file mode 100644 index 0000000..753b12b --- /dev/null +++ b/app/pages/progress.py @@ -0,0 +1,7 @@ +import flet as ft + +def progress_page(): + return ft.Column([ + ft.Text('ความก้าวหน้าของฉัน', size=22), + ft.Text('รายละเอียดความก้าวหน้าของฉัน') + ]) \ No newline at end of file diff --git a/app/state.py b/app/state.py new file mode 100644 index 0000000..7f07b0d --- /dev/null +++ b/app/state.py @@ -0,0 +1,6 @@ +class AppState: + def __init__(self): + self.access_token = None + self.user = None + +state = AppState() \ No newline at end of file diff --git a/app/widgets/adaptive_menu.py b/app/widgets/adaptive_menu.py new file mode 100644 index 0000000..b72cfa4 --- /dev/null +++ b/app/widgets/adaptive_menu.py @@ -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, + ) \ No newline at end of file diff --git a/assets/fonts/NotoSansThai-Bold.ttf b/assets/fonts/NotoSansThai-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9c6798cf1bae508887dd1c01b3922fd413dbc3ee GIT binary patch literal 47480 zcmce<34B|{)i*qIuNGUjWbKmWO_nUltM3EJbFXYU35DnVe(z^x?j6mY<;*!} z&YWegLMS0bkBfqknH`;7_ECEeAwn%7bji$x-910N_OF){;?E+){Qa3dOWXcuTgAT# z$t@#9t?KRxgfF^Cd>3_JK`-limb5N8TK9TCzF&p!EgQD?4gct+nmW`)eMNFp-{>$K z4bRQEXKfnTd-8+(-Y+4f?IuEYy|B5zZ=?CwKfDLe*Wr15GYXV>!f)}t5#P%;Zy(!p z_3!`rGeS(&=(BoYXhYu%zy0_FLd1)auG-$WXPEw(W}|)~>N^Mfw)cNl;qnmTSdRKP z4G)cuU9@At6NHq0g*oI5kMs|3R$Y7!>gS@q`XQP+=WfM!@RiV1isa!==QfOsbG z!!R}VC$d_Yl_%MZvEQ9=CjTrxbxa-Bnza(hSrg$O4X({={G5mkUxd6k{z5Cezgc_f z&(XF;d`h83T@~s|f2{W`{>{va*k-E2b3KQO5`or|jcCRpq+tOV zA_`$1?x-zXC}8$vu5_nsNSH1_X^v7*C>4UBI6%k-LY$}~{mty|o=L7J#Ph5)H-(2j zfu6t1o(k2%VceX62%{1mE5qOSk+)&2T$JVkDoRYmjH`_l;97(aB_+g-tB1siNNVw+ zq#hqi8b~8bnn?@t?W6(jFDZ)?<4zh zJslsBoI%b+p5c*@dyy_g8bn%yGzX~=kgACfP!K+{o{wWBt5CzrM{w}Ii+F#<=qU>@ zdpTq)$V##n@UY%Tsg9ax0rk?2_@0Y4U&QpIa+*La!$?}%6TwXmmALAntNmJi@ERReyXk3ZqeSN{e><|w@`PL?r(Xnycv0O z^Y-WcJn!kexAQ*NEA)1KwSJ9$kN$xEPW>PBM-5s-%+PGO%hpMTn{_5ypS{ebu{AqErL{nldag_{}oLX{y$*WGK)8H&} zRyc>8r#jDbe%E=O^KR$QoKHJHF4dP7mX?=BOIu3kl`b#cSbAgWU8P4{Mpv<`(iL~L zxlVG8x=wdphJ6Qp zxBH&(9WM8kpH#l3{Fd?;%fGA;D*P3vR~)RkrsDaE*DBtr__Si8GP}}TIas;B@`B2P zl{ZwrQdM5nP<2t&@2ZYg8>(xow^v_T{io{ps*l!?nx!?{Yj)LKP;*PoFKT{Q^Pb=2 z@9+=$cl)pOU+2Hg|A7Aq|8xFV{C^JU12uu}z^cHez-VB9;KIN)fu96E349r(!Ghq7 z;N0M{;QHY0!3Trygd8DnC=_Z89Sl7bdOY-8=#|i)L&azOJ)wVcqJwO?4x6r`KIn zcc|_sbzjsA^}71}dQW|G{ZRd>_2<@KUVnf6f7icM|3>`>_5Wz7YUpTK-LM7gl1XKe zuTLiT**aAy-p73qa!X14$Y~*kZX`b>x0Acc{p2C?2vu_l;if)XMME?}o9Qe%pRS^P zw4d%53WS94GvO)W8R3tjLd+6#MWa|QhIIA1RmJBNUt9c{Q|r__%}$52*y(b5o%PN; zN?k6a=UMDb>`x0Rd_Bgyh1`kp9v}~s|E3yhrNvzS_#r#$Xe*rqIkX0nXscl7UrI3b@qhVa5w3gP> z!}K-!HvNQtN{`Zi(XRxRU=|!gP>2h)!a6pDu%0DhP}n7$g4}6H`-M-$au6=ao{OLo zOUL|eqK)(dx}BEOGf9$OM$e!Js7TMDMZ`kSqBqc|=pK3-y@j^W8T5L39SzfMw2)p4 zD%OFX=TQYYn_NmRBL~SIKO>KmUy*0YbL2PVW%4Td3;8Q~pL{?* zp*i4=TuSMEw2K_2DypZY;F4xgY(8B?SAa`Sq8sQYI!O1^bLr*uDtaTmojyPxq(7rS zr~gBAJ}3Wx z-tjLG^WW40UaqEo8lcPQV%kHOfHnhkCmo{0^fbBy+CN;pauJyz z=aDbS#Uw>8rv`E*wUR5K0gh7_IYiy$IvOR{&>*=1TFm!o4f!E$Be&2Fax-lww?S9A zhxU?t>2h)xT}pmJSCa>!!~B%4BM;HFlLGQtSdp~)H{*-(~ z|C{`c{GC2YKBK=RpVD8D-_q}sSLhF^gBrpz0874CzNoJ8Q zXi%Ndp=LryI)luH)>2AbkS!az7G#1R)dK0$M&^?mvVbgx{;~|(%Sq6b)LHbdVzofybjq?PO@Bg6>pZ9VCO9BG1NDvI0U14&^rjh<_~TW29Zzk8mOv@B>{hWz60 z`A#NJ(Himra#sngvG$oI43|;~8-dly{4UDhGoheznWnFAV2q4!*sy(=T*9yW`E`U} z*9~mh)JImrt{5Oo_;tb1$i_i3YjiXi0o&c{H)92}9!ij;{#e^`q;!9h zmO>$O(*5Ni$7~CBJ%A)bO<9ffHv!{YNDeGCFR38az)%QOi({vsOP0b8TM1gOf#tK6 z43VAO!m?n#E?7pHaJFNf4AK=`9<7DM8HAiW0N7ybW0x%^FOct%Q@|Tha0BBy%ozIv zg9tTnRbW*&Ln6uIe#o3tChi%nm~}ggw{so?oszd>6x)m^X1N!?Ov5;+*a+B{0zbXL z&uU2QHK@sKR*6zfN14I{qs3g{TH=mExsHS-5pteMdxil3&ighah-UY~|pP9L>p8lrdl7w0F=^6q?W4*ExfkP)j z&ib^1woB04EUd^zP%H@EW^hW}!!X8Xvl;ESfKsfNb^N*#*9b;p+!?~P3Y;l`dKJKm zSH^$@k$_q@@UIhCV?5C~$+?U(IL~s)_*+~d5g;eO4+w04xdixQT-5-aO5Dr#Qi*Sw z41Ecbh3R91&>IN+C~Kha@jtPFXoXJF4qdZL2oRspOKOB6GFQBgB!qp$%F`(%C?rTg zz#c5z4iC%`QX-s98ijm(A0*wv5)y&G$ArnsAAHn?-+&{%$S&I8Q+`(1J8&Uo;?)z~63+^8xH6nj4 z?)M{=A%6?{Y{IzRY<@xm_Art>g7U8f4+)4r!kidPi!dJxsT4{ep-3tp$szm>Fx`f^ zF_=z89Tjm2J5V1$^y+fRB~LC($K|`AsCzUJx!MKJiWx1-|DCjiiF7 z010u};#id=nU%()a0#y$Bfkg#zX}P!|5ETProJm+pA`g1bCP@=G)pjCh?il0jIQ@W z+&%<+;r@;3da@GZ)gPDsf^sR@gdp-#T7f%D>F@k5*2v%gLTsSRO5r8+mzn-emI@On zp8%fEAx@B1#H8+E=eH4?YjOX}Ejc%#edQOxghvVhlTbK8ctjo_bRjL*_ppid*l zZX|}u@zZcTg}HOQP5h0+unB!3(P1g^elI8RGjq7M&=8r0w19?Ezd-uCoc{~*pCMm^ z`(rE#1AqrfdOmsYWMkm@QSoK$C?vIt%g#nJLmp?r7_$s~ zbUV_G*efv~e18BtHC4b;Bjd{Da-NbxCG+^Ra)D$iqjDZm0mWBxUO~Kym*u>YI21pV z^VnMy-;?ud(xF%;=d(zqqFT;plX8VZ&TB}U_=KF#A5W3|i_EymGmY z#OWt;KA+e@OAaSREQ&cjxMPem#h$S!J>^CC0}xh?i02mC!!9TpWiEa#cN_L!Wn zh6ePIoUehtc$1v>qmDdB8o+*Zv0NTRKWE7K5cbJoIUkMhTt364!^(vJPG~CZGmPq1dV7Tz6~PI(U08mC7oms zbo~*uJN{W4`s#!CVjKJ#=~`{*a{xW1$4Gyl&->p3&38Mr(0;NBIo5gvmem$~+l*1B zdYLL)f+t%5UoWm3QD-x9{gW-WV6-vx;zZhrIcz|GTY$ka_(C?|!)7+dM|Q&RGJ;$` zpmhSecHnReo(jiPim@0(%C2|dyY8;9Z1iRaT>_n{T5!|*$R z`v&BOac6iPl7F#CoX4 zvt_uCaM;-BPFM%bV)Y|81=;j*)6n$6+a}?!5BMD5WA8@)42O&=Y}{6O&scs8IC1`8 zVknJQ39Gw-mEC}EJI5BI#9ls6Kjt-rQik_2;AJBq8JZk%dfQESG6Whhn5Wup!nZNB zAH*|8-vBHh#usd@3?j#PZ9PVF!e7X6H8r*q&!%cJF6zgex1;alYi9Pza4gk4zTRxK z@59LHwK5wcZa|M|?wg_l8;?l~1_Ns|!q*$)AhrUhX3AF9^gfQ|;2M&a9mjG-7$XPq z31^I-ZY^;N;{@kq`>Fa3fT0_oncNCK@yeMRH$DE;ERP?BNyTB%fyo_7ia7xngDngQ z7}v5DGu6XF)Et5}+zfZc9Bc9@OS4SYGI&8_`A*2f-@vm zL>%mhMmP``FQi5Af|pPy;u@8I+vmlOW_;srORQf zuSE1@HR300=vulCahmmrq-;dY?PMY%qOzH8K~#MkViw!!Adgz?pd;|+k0FM!i|&S> zllf6kMJ!_LmdGZ@@&5QJE_$@9ccX6*s3^AW;>2=Udu18$y-}DCPr$3-K zl8>;{zeH~$zXg?FM$F=7_-t<_b)=sD2)^6fVKXpK)CY)rJVNgzP4q5!{qKg<*n$Yi zHu4?llmp~?#NX~C+3?m5g7a96z>QVfi3r77=ojnYqiZ35K-ASl@fVbaAzDmfS$wK-Y@-eitMf3&wB7F(k&>r~C7Gpi0N=_s9 zAo}xLateK!{tkNBHHeShK=wiR>w#sJ1Fa~F7!V!PVU@ZND^rqRko(C`5OIAF5i7x}5B%Z$g_p zKu)J`(La+m`WNW#IA4MY=R5RW`X2WXen{U(RCk(?7a-Xk<)o9hL4expgci zmv_i_d6cMpkID7JZPN2_C%cD(p`i3V7?$sHKf#FnU2YeQOW$L1`(Q}=9+m5d+a)N& z?U_)9(@*2_)423BhtDV+4|dA!Basjl1OFhYL>*Tg|)7#c%wvD#Rm0G7)YMoXoAy-OFA3(-hSi)AY zHI40r3_yq63}-g@45i|j%mN{q2qF1r`o;iycU=rrO)CyCP;ky}P&CW)qrFEd9}?kOVQqv`rlX?l_9wCP1+a&c^0aa8U- zQY+79Itk-)qxiH&5gGB3>4=Zi$$d;CWlTnUEKQa)Ueil3jTw0J zq>#LjV$vYtHi@R;4n9~o803)S&dYJ-N44BSVAg)}c*9gZg65f^lsQPvSH`;lLz|uWcO~|(m&Eax@A<=yJ@6v zSAWimsfVf+yhyc@H`A<~M2D)6kD1NOIZyP-Q!s z&5VMK<0D|kEi%|!GQbW;B-lccgld4#P&F_GQYa#^Y9ts{4N6Z3GoD7}d4y}VL(>Q{ zB#o3kw5xw)bi>d{ziLEkJ(AH{UigtqEOEv01CJFNlVL+ksrZ&8|%-O z0N6gX5sE$x01fob2jnvzbNCsLIsA;r9Dc@Q4nN~jd(0UR1=@+w*OW;3!?_K17mh1o zkw=`2*tlhMjLg~AKQc%<__dK=qucvNwh{mKZQHj&r)KThsSgP%_D$qbWOkRLoKkd= zlI*Pb4P3LJ#T7%}ewsXiGg%KnqrMIPwrg>A z;BImSG_oh4t(}3$G&_~E*|Zfp{%WLUI72fBn(-6RcWLT&5s}g4%fd&<-zLJBmV8!3 zJT-L&zuv{J$)o)Gx$q3i?_t;EFZt8&^78vdoO(_r#Q7+{m|as{JpXf^-^257A{Inb zKNsF)Jtz>3O}@vU-XmSv8S&)3;ygS(7bV~JbTJ|bMx2Q=jv)=o`OU}V+4Ib@%(^U} zexANBLs_~!eP`|2^A4o+IHz!0e)|*GY3i|9^)SOctm0hIv>JTjghp*3q00{{ODTzi7Q)E6kE;A$N#f^Klu zBG?x=0|Sdji4UWs3jM3`5iuq^)02%4JCBfy=X!ipn7bKIZ1{+X3{`tw`(9%UQVN#0;*S zR$1jJ6BL)Qu~ly=*8o2@4iPTs=Vyfs+szbL5dm}Jv~b52=db~l6p((jg8A@!barq zvJ+4E<7I4yW~o<{+|A2Rfa`RP^gTT)+Q_x#u|7=W>_mN~jsS8734;jmvcGg5_(}J4 z_hcX6g1YHe89nlTQctGwEsrw|-&3v7E77d*}(}jGKZb;*$E3z=np)u<|NIJdooEG_9V4mqU%&GHp>%0 zUOZJ}5`#G1@^ydU-)U=W`nO|Sfs8R!_So9&yG#q5mEnIGG)+@Ue)6Ah>;#~N zpB6nE-Z2VY;}XcK%g7-}%^%=nfr{l>A_)P0@HmR95leO@W&L`{G$!z!{ducD(1V1RwSHTOq z0bV|MK;hlPhYZj`idY}~o;VN8Jf85N?Wg<6Zk&5Ri|oOv_$zVR`9^v(IR_rT$H)cn z&pkn|1nez*J|@iOY)I^L@Uik)DKRVd{3g7WfU~8DdkUD%v$(!YUV#_wRrumm@K(Nu zJ>>&<GrUmvlp`bu*uj}s=39pEEI||S0M`Ov6kg>HM1E(}*~AQg@*JG? zpG)T=Kab8sem*dm1urtR297oEH%42AHIZYDa;#B~HOjFj;=O?bfQsQR2WR%r#V8lR z7p$Wf!WW!_lhhX@e+j(=*GuW8D7g&YU>(l(Ux7Za1g=Hq^M&7(d3p2Tx4jvo-wuDQ zNbiTQRpc~K;Oze|p$o7RZ;Yq(oCXSxeFevU7T!c)@0~Hu61b;Q2aWe(V4U%n0RCcB z`4v8<4BF(uGx>XzFbXL-g;aP`;eG7UQ*_GVbfTcszd)g{Kq1O0L^*{d8su``G;@sW zImRjHN*l+uh2z@Fac$wawsKrk&aDQ{tp?7mW{!8txs`IfQ;ykOj#D+qX)gThmw+=E zHgh>P)xhSJpzDqFhoHm*@IQ<2KK~4n{GWq=Mb5v_+{w*cGg%-!EZmPY^|_PhuM)1{ zpZoE2`sWIv12wKdsZ?X?T91;T;N_os!I|-~3i1cH1>i3Y6Y&BJLDuv;TPa+DCO|wZYqBJ=; zxud6gc>bBZXh1}zi8OKwG;!QFb4<@bgyRg-LeEF^q80C>+y`$o!(2PZ*=&w8*edYP zuO)f7ZX_>bH~AgXD@cEV%>66U+eq&qy^Hi7(g%3JLd|0Mc<68(RO{y#+j@Sh{Si}W7S3Hv9>)LZD^jCISd0=|DJ<>>6x z7j!P*63F{#okR|@54m%Z&Ont+kuE~I80kAmm!Jm?V9Z4-NPd=vtR>Ee=mTYAePSdGVR{O*AQ=~ z@C)w~L7W9HjSH^`F9^>HzZ4$BO1WRSQ@B<5f$)7{T(}JHAD@jkvi1lg!hmox^6P|^ z!V+PDFiU6?8u1=iP^c8jgkrp@RxB8WT$ueT4EZm56zwk*E<^0&T|`S>L!9P$M0%dY z+eHu2d+}Dp&B7jfJ-&ZWcm;Cw5^(aFf)Vk%U3epDDLO{QR{iK8qp!Zt+@0hSj!dEUVD z9>IoD*x^_za2SLxUe2@<%CLrORcbN6qBp!Zj1oln@RSbor#^mN#jls~>q`DK#q#i+ zuznJ}Ji+qfN|qO;I)CDIaLyHVI(eNS&ld}Lb3{<{5(6*U&hx!Izl>iUyrhm_t9VI} z=Uc!Jd9o-gA0 z1jk8*oM(7m!SZ4UujAz9m2#eG68~a(`Zg;^q>}X+<#im$3y@*#JQu-Tj}^k+a@RmA z7od#2& z5pWt|yhdI^I)e1HoPXk&JbRv5mRXnOrRN0RE`r@Z{hh+!#rl=XZm6OM3VfoR+#zFyneJFTt-ipbqEf)IB1kPVy+Pe-FRnBmru^fh)7p*{=Xd z@827_kH(DHYAEmXDuXOv`FZ3llbv!ELFCjMLd- zW0P-T(}ER>thJ(0>~wl-s?VEvjV==^>xyjF6^bn3)wkdp1GUkEzkpWqG$s1GXd zHUJunS*5lV3%IG=J_bvqS|854kOKXTegTdl9TEWWYx^nG>yK;z!AL{&7ly?JJt zaOQ$Vwez!;D))?FeNWX;$mBEkbIUL)>2!Hx=uetA%cyA6 znLEb=;c#Glr*`is?M&VmOC(}+e)5sgy=V&<1uBHV(PT6Rpez830m#s&j>Q==8T=~u zXx(G#(tzFF5soe?E#27Kx3@mFd&AqSpD&vkZ=UTeGVe1un)k0=v9ATa)&L@>P)(X7 zh(MGC@0E4xo9tArQdvMEi6Cj5#A6W|T^N=IMs}L?dW%7)v1sjut@+h4yHTe#nY@lF zPk~dZDk;uB=q$H8G-KNSwZ4kD)#^4G^Hi!ec{zpAvXVf)t=#J^tuzJ7`-EUwL~R@y@h!mdA`jS~l0@nY$RhS$p*#){lJEg75`NQ2 z-~?k_>Q=iAG6XgmOQ1`_rcxcLn&FQ6>Gryz?l}YX_Ns!C^6`Z|&5Mj#`cYeDQAJSb z)p)!nOSVa^GX*t;byckmwK|2*5ndduSGc^S#wgnav5DwR%LQID_d!4 zMU&MeiYqj5_2508R5kX85YCT~-t>wBK#Y7gHP#hKlew6t&&J^PW2vFis^0mnTdc*g zkl!!#<`fpqOceT!I<;11$Sbd)+iQmx&mV3&Qx}Zc-6by>7S9VfHT1=B*jMOl^;9fq ziRWhb2!g@b9!h91fzaYm;G~%oM@$Y~feiW&o|E8IDjES;}O1|8DFd1 zj3^k(mWW799_8YYEwlZ>29>EZKEI-D)k2q}Am^g4Ijzy4-k$3zM}50FYmuj9uC^-J z8#;M@`}Wq{B74K~_BkC5UcXfgyNU|)?ZsIg`LhD^7Bi`jH*V;s!ZNIWXheOGNZ|8? zEiIcdp4!KROeRnW`=_60$nJR9IL#VKA8t2BUFsw0%Rpkgurp`GR4u)1x%#D?A=RKdYrNuFne< z#p|-v3j}JnI10AVmn?ZYi$#}*7k(ifFqu^XJJW@INLs6D;MgQ0m{lTTD;8`Kz>c*G z8KIu*ZZ0pZ)|s>PN>iRfsWg}5dTKp7voS}hR9t-NZpChTTcqBWqh2ovX46UeozXy@ zwY}Z$^X5l8^XXj^wpU+eVMSrM|7S4FjXU1N1rzAp5@B;qupQ9SeWl{I zA0~hNNK^gt#)TC^*>le+ljq;^lUQJLa8dMG#`Qtqtse96v6--a7*a7}am%ZFYER|M z-zM##S>a=F%%&L&y#>a7xkinlbyMqf|9yw#zDn6aaabg7viV8W2Kg2 zs`~XQr~HR~`m6)R#Z(O1L^OvJW#i zf%?!R<(bD5SYke|Q9?{{X^FMR7JynOOzJGs{A+gY$SXFh^Kz)DvE+IJ+q6&!vJKs8 zW1iNcHF@$YeFt}HH?J*qhN^8@24gl=s^X!tLc3b+ZFg3>tj1z*Nf~q$e}#+;2^THE z1=GqTTudUtGJW=^oPEyjgQ40)NHoR#Hd{DqqMf6A_l_nXp)+GmO|jmLc~)U3s>3{E ze4b3nU_}1*Gd;U&l_6U{RN~a+Y0{I`&kY-#Giztf%+V|tl_tH_5ULE+TE$hhwz4?^ds&-Oo$JWY z(JHeo`l=ba!lI^-%{@Qh5VQrsIbB;;h38ha*4ZjdMQW4AWG=Tys%jS3UO#>w-D9+t zSro!rrMheO<=6e_MoVpdxEQd*eugh2gw+Q9`B*(@Qe|R{+8XxLZS^}A%^PeQj|HI; zt;i`WyJbcPQ_dvaCiw%plqnV!twOK@Mizc+AXQDbqj!6hr%O0QA7M`L!*ZB3raFwAz7r(sj!Z7#N(K=?$O#q@5%wy}8H zBH^1dvsTpDU-0@S-(Q9nUYRedMRjg&uFAjEpQYDlDFn4bn_ZP?Uf3DFG~7^BlBH<- zenhR!RVh@t+N_vR_D24an9b*Q8BRalS`#j*Sz5BRA-FzXsZ`c3&Qau4#~jI(*V(Hh zrLI`D_1ZL)4?=<>B9(?x+G3%D@Xa=k_0J6_CNtF*tCa!CHbJaQ^}5#YSrm93Dqrtg zS)t9>D#UE1Mv+zMNG$f*#LEJ;Rr#v;4PlKbOQAO90Km5^PKvwc__u9!F7gLwdpaC$ z<4MKE{+29-uFadg^`NuS<7q4zXLRsk81R+k+BI5Jlx_@GmRL^H6? znTmFr8JRA=qy<(CgGJJ}{~y6}Cp9MjcGI_lgU9|5J*k}apImnVe}EQ2^m;GvmA82QOx7D(+$ao_ z0?`hC8EKcy4`$P_6%nz#8Hn37n(cyUF#k>%F08UclP z(&WvtvHp@D0*6_^)_;QUb4`&|t5F-2Mq|w64QS2kgJMsGm}}0%R;8@hWtX_~oEi(G zSF%yqmim*pkVVabE4Js@5?q^PGj(HQ00w;63^Qd>^2f2prf73*do(vkvG&igmfX1`-x9}H`ZE$g3* zw-b@HOA)X1o-xl|>-_31lf$6*n?L9fkQ8I}iVYC!)+ zdzB@BvVYPfdvjnGFj>j0H!w=tjFV9Xe-6Xxq}B}~NpCP3jixTM!ECbGv-E05UQO}L zg^Sy~^;%I^SMF)@yd-S5TP*g{QoE(JqRJ(TYc%?`Yc?#&FDS^jw=_�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 Xvia8awzvAedXF~MWX)$92Pd6 literal 0 HcmV?d00001 diff --git a/assets/fonts/NotoSansThai-Medium.ttf b/assets/fonts/NotoSansThai-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..aea0450d050ac0e10660e94eb2be4d117d2dd965 GIT binary patch literal 47544 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 QRKTstT=6yT$?@_34;4l<-v9sr literal 0 HcmV?d00001 diff --git a/assets/fonts/NotoSansThai-Regular.ttf b/assets/fonts/NotoSansThai-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..54f3e29af8a8f22bbd35b65ae95da51822946dc8 GIT binary patch literal 47484 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%0AW_{bR|$IAfHy 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 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) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..be425cf --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +flet==0.84.0 +requests==2.33.1 +python-dotenv==1.2.2 \ No newline at end of file