5.9 KiB
You are a Senior Frontend Engineer and Responsive UI Specialist.
Project: Training Management System (TMS)
Current issue: The table components on these pages exceed the responsive breakpoint and are not mobile/tablet friendly:
- /dashboard/pending-review
- /dashboard/training-records
- /dashboard/employees
Problem: The table width overflows the page layout instead of being contained inside a responsive horizontal scroll area. On smaller breakpoints, table components push the dashboard content width beyond the viewport.
Current task: Fix table responsiveness for Pending Review, Training Records, and Employees pages.
Important constraints:
- Do NOT change database schema.
- Do NOT change business logic.
- Do NOT remove table columns unless absolutely necessary.
- Do NOT rewrite the whole data table system.
- Reuse existing DataTable components.
- Keep Thai UI.
- Keep desktop layout as close as possible.
- Fix responsive behavior with minimal-impact changes.
Pages to inspect and fix:
- src/app/dashboard/pending-review/page.tsx
- src/features/training-records/components/pending-review-table.tsx
- src/features/training-records/components/pending-review-columns.tsx
- src/app/dashboard/training-records/page.tsx
- src/features/training-records/components/training-record-tables/index.tsx
- src/features/training-records/components/training-record-tables/columns.tsx
- src/app/dashboard/employees/page.tsx
- src/features/employees/components/*
- src/components/ui/table/data-table.tsx
- src/components/ui/table/data-table-toolbar.tsx
- src/components/ui/table/data-table-pagination.tsx
- src/components/layout/page-container.tsx
Root causes to check:
-
Parent container missing:
- min-w-0
- max-w-full
- overflow-hidden
-
Table wrapper missing:
- w-full
- max-w-full
- overflow-x-auto
-
Table itself has fixed/min width too large without scroll container.
-
Toolbar filters use fixed width and do not wrap.
-
Pagination uses fixed row layout and overflows.
-
Table cell content does not truncate/wrap:
- long Thai course names
- employee names
- emails
- department names
- action buttons
Required fixes:
Part 1: Parent layout containment
Ensure page content wrappers include:
- min-w-0
- max-w-full
- overflow-hidden where appropriate
Example:
Part 2: DataTable scroll wrapper
Ensure DataTable table area is wrapped with:
Important:
- On mobile/tablet, table should scroll horizontally inside its own container.
- The whole page must NOT scroll horizontally.
Part 3: Page-level table cards
If table is inside Card, Card must have:
- min-w-0
- max-w-full
- overflow-hidden
CardContent should have:
- min-w-0
- max-w-full
- overflow-hidden or overflow-x-auto only at table area
Part 4: Toolbar responsiveness
DataTableToolbar should:
- stack on mobile
- wrap on tablet
- keep desktop inline
Use:
- flex flex-col gap-2 md:flex-row md:flex-wrap md:items-center
- w-full md:w-auto
- min-w-0
- search input w-full md:w-[250px]
Filters/buttons:
- w-full sm:w-auto
- justify-start
- flex-wrap
Part 5: Pagination responsiveness
DataTablePagination should:
- stack on mobile
- avoid fixed-width overflow
- use flex-col gap-2 sm:flex-row
- make pagination buttons wrap or remain inside container
Part 6: Column width strategy
For table columns:
Use controlled widths:
- Course Name: min-w-[220px] max-w-[320px] truncate or line-clamp-2
- Employee Name: min-w-[160px]
- Email: min-w-[220px] truncate
- Department: min-w-[160px]
- Status: min-w-[120px]
- Actions: sticky right-0 if already supported, or min-w-[100px]
Do not allow long text to force table beyond intended min width.
Use:
- truncate
- whitespace-nowrap where appropriate
- break-words for Thai long text if better
- line-clamp-2 for course name or remark
Part 7: Action buttons
Action cells should:
- not push table width too much
- use icon button or compact action dropdown on mobile if existing project supports it
Part 8: Verify affected pages
Pending Review:
- table should scroll within table area
- toolbar should not overflow
- action buttons still accessible
Training Records:
- table should scroll within table area
- certificate/status/action columns should remain usable
- long course names should not push layout
Employees:
- employee code/name/email/department columns should not push layout
- email should truncate
- action buttons should remain accessible
Part 9: Browser/responsive validation
Test visually or by code review at:
- 360px
- 390px
- 412px
- 768px
- 1024px
- 1440px
Expected:
- No page-level horizontal overflow
- Only table container scrolls horizontally
- Sidebar/header remain stable
- Toolbar wraps cleanly
- Pagination stays inside container
- Thai text does not break layout
Part 10: Output review file
Create:
docs/responsive-table-fix-review.md
Include:
- Summary
- Root Cause
- Pages Fixed
- Files Changed
- Table Wrapper Changes
- Toolbar Changes
- Pagination Changes
- Column Width Strategy
- Responsive Test Checklist
- Remaining Risks
- Final Responsive Readiness Score
Manual Test Checklist:
- Pending Review table no longer breaks page width.
- Training Records table no longer breaks page width.
- Employees table no longer breaks page width.
- Tables scroll horizontally inside their own container.
- Page itself does not horizontally scroll.
- Toolbar wraps on mobile.
- Pagination stays inside container.
- Long Thai course names do not push layout.
- Long emails truncate correctly.
- Action buttons remain accessible.
- Works at 360px.
- Works at 390px.
- Works at 412px.
- Works at 768px.
- Works at 1024px.
- Desktop layout remains acceptable.
Return:
- Complete code changes with file paths.
- Content of docs/responsive-table-fix-review.md.
- Any remaining responsive issues.