Skip to content

new-vtrc-mobile — Six Screens

บทนี้ (branch: master) ลงรายละเอียดหน้าจอที่มีใน repo — 6 ไฟล์ screen; 5 เข้า navigator, 1 ถูกตัดออก


ตารางหน้าจอ

#ScreenPathIn navigator?Citation
1Loginsrc/screens/Login/LoginScreen.tsxใช่ — AuthNavigatorAuthNavigator.tsx:13
2Homesrc/screens/Home/HomeScreen.tsxใช่ — HomeNavigator → tabBottomTabNavigator.tsx:19
3Menusrc/screens/Menu/MenuScreen.tsxใช่ — MenuNavigatorBottomTabNavigator.tsx:20
4Settingsrc/screens/Setting/SettingScreen.tsxใช่ — SettingNavigatorBottomTabNavigator.tsx:21
5CheckEmpCodesrc/screens/CheckEmpCode/CheckEmpCode.tsxไม่ — commentAuthNavigator.tsx:5,12
6(Login subcomponents)Login/components/*ผ่าน LoginStipulationModal, ReportModal, Logo, ContactUs, AlertModal

หมายเหตุ: "6 screens" ในภาพรวมนับ CheckEmpCode เป็นหน้าที่มีโค้ดแม้ยังไม่ mount — หน้า runtime ที่ผู้ใช้ถึงได้จริงหลัง build ปัจจุบันคือ Login + 3 tabs = 4 routes


1. LoginScreen

หน้าที่ซับซ้อนที่สุดใน repo

ส่วนรายละเอียดCitation
Formreact-hook-form + yup resolverLoginScreen.tsx + package.json:33,56
Captchaเรียก generateCaptcha จาก authServiceผ่าน service
SSOssoCheckEmpLogin ก่อน login เต็มauthService.ts:57-96
Encryptpassword → encryptToBase64EncryptCrypto.ts
ModalsStipulation / Report / Alert / ContactUsscreens/Login/components/
Successdispatch(setLoginData)isLoggedIn=true → RootNavigator สลับแท็บauthSlice.ts:28-35

Language สลับผ่าน i18n (locales/th.json, en.json)


2. HomeScreen

ส่วนสถานะ
LayoutHome/components/Layout.tsx, SwipperBanner.tsx
News APInewsService.fetchNews มีใน service แต่ Home ยังไม่ผูก state เต็ม (มี console.log pattern ตามที่ระบุใน 01-map)
Tabภายใต้ HomeNavigator

ยังไม่ใช่ home แบบ vtrc-mobile ที่มีเมนูสวัสดิการเต็มชุด


3. MenuScreen

ส่วนสถานะ
ไฟล์MenuScreen.tsx + styles.ts
บทบาทplaceholder / scaffold ของเมนูรวม
TabMenuNavigator

ยังไม่มี deep link ไปโดเมน leave/hospital ตาม legacy mobile


4. SettingScreen

ส่วนสถานะ
ไฟล์SettingScreen.tsx + styles.ts
บทบาทsettings scaffold (ภาษา / เกี่ยวกับแอป ฯลฯ ตามที่ implement ในไฟล์)
TabSettingNavigator

5. CheckEmpCode (orphan)

มี CheckEmpCode.tsx + styles แต่:

tsx
// import CheckEmpCodeScreen from '@/screens/CheckEmpCode/CheckEmpCode';
{/* <Stack.Screen name="CheckEmpCode" ... /> */}

(AuthNavigator.tsx:5,12)

เป็นซาก pattern login 2 ขั้น (กรอก empCode ก่อน) ที่ถูกปิด — QUAL-NEW-05


RootNavigator
├── AuthStack (เมื่อ !isLoggedIn)
│   └── Login
│   └── (CheckEmpCode — dead)
└── AppStack (เมื่อ isLoggedIn)
    └── BottomTabNavigator + MyTabBar
        ├── HomeNavigator → HomeScreen
        ├── MenuNavigator → MenuScreen
        └── SettingNavigator → SettingScreen

MyTabBar เป็น custom tab bar (navigation/MyTabbar.tsx) — options icon แบบ Ionicons ใน BottomTabNavigator ถูก comment ทิ้ง (BottomTabNavigator.tsx:22-43)


Shared UI kit (ยังไม่นับเป็น "screen")

ใช้ซ้ำข้ามหน้า:

GroupComponents
formFormInput, FormCheckbox, FormRadio, FormDropdown, FormDateTimePicker
buttonSubmitButton, OutlineButton
modalCenterModal, BottomSheetModal, ConfirmAlert, AppLoading
layoutAppLayout, LinearGradientLayout, Spacer

มี unit tests ใน __tests__/components/ สำหรับหลายตัว — จุดแข็งเทียบ vtrc-mobile


TypeScript boundary

  • ทั้ง src/ เป็น .ts / .tsx
  • tsconfig.json + path alias @/
  • Zod schemas ใน services/schema.ts validate response ก่อนเข้า redux
  • ไม่พบไฟล์ .js ใน src/ (ยกเว้น entry index.js ที่ root ของ RN project)

Six-screen checklist (wired vs stub)

#ScreenWired in navigator?Business logic depth
1Loginใช่สูง — captcha, SSO, csID, login, modals
2Homeใช่ต่ำ — fetch news ยังไม่แสดงครบ
3Menuใช่ว่าง
4Settingใช่logout เท่านั้น
5CheckEmpCodeไม่ (comment)stub
6(ไฟล์ที่ 6 นับรวม CheckEmpCode + Login subcomponents นับเป็นส่วนของ Login)Login มี components ย่อยหลายไฟล์

สรุป parity: ไม่เทียบเท่า vtrc-mobile — เป็น architecture shell ที่ auth ทำงานจริงกับ UAT backend