5.0 KiB
You are a Senior Full Stack Engineer.
Project: Training Management System (TMS)
Current task: Update the Create/Edit Training Record form course field.
Requirement: Change the course input behavior to a dropdown first, and only show text input when the employee selects "อื่น ๆ".
Important constraints:
- Do NOT change folder structure.
- Do NOT change database schema unless absolutely necessary.
- Do NOT remove existing courseName field.
- Do NOT break existing create/edit training record flow.
- Reuse existing Course Master data.
- Reuse existing Auth.js and Drizzle ORM.
- Keep Thai UI.
- Keep responsive/mobile behavior.
- Minimal-impact changes only.
Business behavior:
- Course field should be displayed as a dropdown/select by default.
Label:
- ชื่อหลักสูตร *
Placeholder:
- เลือกหลักสูตร
Dropdown options:
- Active courses from Course Master
- Last option must be: อื่น ๆ
- Course option display format:
If courseCode exists:
- courseCode - courseName
Example:
- IT001 - Cyber Security Awareness
If courseCode does not exist:
- courseName
- When employee selects a Course Master item:
Set:
- courseId = selected course id
- courseName = selected course name
Optional auto-fill if data exists:
- provider / organizer
- submittedHours / standardHours
Do not show custom text input.
- When employee selects "อื่น ๆ":
Behavior:
- Hide or replace the dropdown with a text input field.
- Show text input for custom course name.
Text input label:
- ชื่อหลักสูตรอื่น ๆ *
Placeholder:
- กรอกชื่อหลักสูตร
Set:
- courseId = null
- courseName = custom text value
Also show a small button/link:
- เปลี่ยนกลับไปเลือกจากหลักสูตร
When clicked:
- Clear custom course name
- Show dropdown again
- courseId = selected/default state
- courseName = ""
- Validation rules:
If selected course is from Course Master:
- courseId is required or courseName must be derived from selected course.
If selected "อื่น ๆ":
- custom courseName is required.
Thai validation messages:
- กรุณาเลือกหลักสูตร
- กรุณากรอกชื่อหลักสูตร
- กรุณาระบุจำนวนชั่วโมงอบรม
- Edit mode behavior:
If existing record has courseId:
- show dropdown selected to that course.
If existing record has courseId = null but has courseName:
- show custom text input with existing courseName.
- API / Data fetching:
Use existing Course Master API/query if available.
Course list should only show active courses.
Return course fields:
- id
- courseCode
- name
- standardHours
- organizer
- certificateRequired
- Database behavior:
Training record must always save:
- courseName
Training record should save:
- courseId if selected from master
Training record should save:
- courseId = null if "อื่น ๆ"
Do not remove courseName because it is needed for historical reporting.
- UI/UX:
Desktop:
- Dropdown full width
- Custom input full width
Mobile:
- Dropdown/input must fit screen width
Use existing UI components:
- Select
- Input
- Button
- FormField
Do not use complex combobox unless existing project already uses one.
- Files likely involved:
- src/features/training-records/components/training-record-form.tsx
- src/features/training-records/schemas/training-record.ts
- src/features/training-records/api/types.ts
- src/features/training-records/server/training-record-data.ts
- src/app/api/training-records/route.ts
- src/app/api/training-records/[id]/route.ts
- src/app/api/courses/route.ts
- src/features/courses/server/course-data.ts
- Output Review File
Create: docs/management-change-training-course-dropdown-review.md
The file must include:
- Summary
- Files Changed
- UI Changes
- Course Dropdown Behavior
- Custom Course Behavior
- Edit Mode Behavior
- Validation Rules
- Database Behavior
- Manual Test Checklist
- Known Limitations
Manual Test Checklist:
- Create form shows course dropdown by default.
- Active Course Master records are shown in dropdown.
- "อื่น ๆ" appears as the last option.
- Selecting Course Master saves courseId and courseName.
- Selecting Course Master auto-fills provider if available.
- Selecting Course Master auto-fills hours if available.
- Selecting "อื่น ๆ" changes dropdown to text input.
- Custom course name is required when "อื่น ๆ" is selected.
- "เปลี่ยนกลับไปเลือกจากหลักสูตร" works.
- Edit existing master course shows dropdown selected.
- Edit existing custom course shows text input.
- HRD review page still shows course name correctly.
- Reports still show course name correctly.
- Mobile layout works.
Return:
- Complete code changes with file paths.
- Content of docs/management-change-training-course-dropdown-review.md.