Skip to content

fix(finance): comprehensive product master UX overhaul, sortable tables, and detail drawer#62

Merged
ilramdhan merged 2 commits into
mutugading:mainfrom
ilramdhan:feat/rbac-page-scoped-permissions
Jul 2, 2026
Merged

fix(finance): comprehensive product master UX overhaul, sortable tables, and detail drawer#62
ilramdhan merged 2 commits into
mutugading:mainfrom
ilramdhan:feat/rbac-page-scoped-permissions

Conversation

@ilramdhan

Copy link
Copy Markdown
Member

Description

Pull Request ini menghadirkan perombakan UX (User Experience) secara masif pada halaman Product Master. Pembaruan ini mencakup implementasi tabel yang dapat diurutkan secara server-side menggunakan komponen SortableHeader baru, kontrol visibilitas kolom yang tersimpan (persisted), filter multi-select, serta navigasi baris yang dapat diklik (clickable rows).

Selain itu, PR ini memperkenalkan Product Detail Drawer, sebuah laci interaktif (interactive drawer) dengan sticky header/footer dan lazy loading per-seksi, yang menggantikan kebutuhan navigasi ke halaman terpisah untuk melihat detail. Seluruh pola UI baru ini—termasuk standardisasi tinggi elemen kontrol (h-9), responsivitas icon-only di layar kecil, dan ritme tata letak (layout rhythm)—telah dikodifikasikan ke dalam dokumen design system (DESIGN.md, LAYOUT.md, RULES.md, CLAUDE.md).

Type of Change

  • 🐛 Bug fix
  • ✨ New feature
  • 🎨 UI/UX improvement
  • ♻️ Refactor
  • 📚 Documentation
  • 🔧 Chore (deps, config)

Module/Component Affected

  • Dashboard
  • Finance (Product Master)
  • HR / IT / CI / EXSIM
  • Components (common/)
  • Components (ui/)
  • Navigation
  • API Routes

Changes Made

1. Advanced Data Table & Filters:

  • SortableHeader: Mengimplementasikan komponen header tabel yang dapat diurutkan (mendukung server-side sorting untuk 9 kolom) lengkap dengan indikator segitiga fa-sort, area klik penuh, dan dukungan aksesibilitas (aria-sort & navigasi keyboard).
  • Column Visibility: Menambahkan komponen ColumnVisibilityMenu dan hook useColumnVisibility untuk menampilkan/menyembunyikan kolom secara dinamis (kode produk diatur agar tidak dapat disembunyikan).
  • Multi-Type Filter: Menambahkan ProductTypeMultiCombobox yang memungkinkan filter multi-select dan secara otomatis menyinkronkan data ke URL dalam format CSV.
  • Baris tabel (table rows) kini dapat diklik untuk menavigasi pengguna langsung ke detail produk (mengecualikan area kolom actions).

2. Product Detail Drawer:

  • Menggantikan halaman view konvensional dengan ProductDetailDrawer yang responsif.
  • Drawer ini memuat informasi dalam seksi-seksi berbentuk kartu (Details, Routing, Params yang dikelompokkan berdasarkan display group, dan Cost History).
  • Menerapkan arsitektur lazy queries per seksi agar pembacaan data rute dan parameter tidak memblokir render awal drawer.

3. UI Polish & Bug Fixes:

  • Menyempurnakan ritme UI: standardisasi tinggi toolbar dan filter row ke h-9, ukuran tombol yang seragam, KpiGrid dengan lebar penuh (full-width span) untuk elemen ganjil terakhir, table edge padding, serta floor responsivitas layar di batas 375px.
  • Menambahkan penyesuaian header actions menjadi icon-only pada resolusi layar di bawah sm (mobile).
  • Bug Fix: Memperbaiki state URL sync dengan memasukkan parameter sortBy dan sortOrder ke dalam defaults useUrlState (sebelumnya nilai ini hilang secara silent saat state berubah).

4. Design System Documentation:

  • Memperbarui DESIGN.md dan LAYOUT.md dengan konvensi UI terbaru (flat list page variant, h-9 parity, multi-select combobox, aturan row-click).
  • Menambahkan aturan baru ke RULES.md dan CLAUDE.md (Mistake 12: missing URL defaults, Mistake 13: stale typography), serta dokumentasi penggunaan SortableHeader.

Related Issues

Fixes #
Related to #

Screenshots

Before

After

Testing Performed

Manual Testing

  • Desktop (1440px+)
  • Tablet (768px)
  • Mobile (375px)
  • Light mode
  • Dark mode

Browser Testing

  • Chrome
  • Firefox
  • Safari
  • Edge

Build Verification

  • npm run lint passes
  • npx tsc --noEmit passes
  • npm run build succeeds

Accessibility

  • Keyboard navigation works (SortableHeader accessible via keyboard)
  • Screen reader compatible (aria-sort implemented)
  • Proper ARIA labels
  • Color contrast adequate

Performance

  • No unnecessary re-renders
  • Images optimized
  • Heavy components lazy loaded (Lazy queries per-section in Drawer)

Pre-merge Checklist

  • I have read and followed RULES.md
  • I have read and followed CONTRIBUTING.md
  • Loading states implemented (if data fetching)
  • Error handling present
  • Component props typed properly
  • Uses semantic color classes
  • Responsive design tested
  • Dark mode compatible
  • Screenshots included (for UI changes)

Reviewer Notes

  • State Synchronization (useUrlState Fix): Harap perhatikan perbaikan pada hook state parameter. Kealpaan memasukkan variabel ke dalam objek defaultValues pada useUrlState akan menyebabkan status URL terhapus otomatis saat ada interaksi lain. Aturan ini telah dibakukan di dokumen RULES.md.
  • UI Element Height Parity: Standar tinggi elemen kontrol (inputs, dropdowns, buttons) pada toolbar di atas tabel sekarang secara presisi dikunci di ukuran h-9 untuk memastikan konsistensi dan estetika setara di seluruh dashboard.
  • Row Click vs Action Clicks: Logika clickable rows sudah ditambahkan peringatan internal untuk tidak memicu navigasi drawer saat pengguna mengklik tombol di dalam sel actions.

ilramdhan and others added 2 commits July 2, 2026 16:24
…view drawer, multi-type filter, polish

- SortableHeader (shared): fa-sort triangle indicator, whole-th click target,
  aria-sort + keyboard; all 9 product master columns sortable server-side
- Column show/hide via useColumnVisibility + ColumnVisibilityMenu (persisted,
  h-9 trigger); product code not hideable
- Clickable rows navigate to detail (actions excluded); code cell plain text
- ProductDetailDrawer: sticky header/footer, carded sections (details/routing/
  params grouped by display group/cost history), calculated params excluded,
  lazy per-section queries
- ProductTypeMultiCombobox: multi-select filter, CSV in URL, popover clear
- Polish: uniform button sizes, h-9 filter row, icon-only header actions below
  sm, neutral KPI variants, KpiGrid odd-last full-width span, space-y-6 rhythm,
  table edge padding, 375px responsive floor
- Fix: sortBy/sortOrder added to useUrlState defaults (were silently dropped)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- DESIGN.md: control height parity (h-9 toolbar rows), header action button
  sizing + icon-only collapse, multi-select combobox pattern, row-click
  navigation rules
- LAYOUT.md: flat list page variant, table edge padding, 375px responsive floor
- RULES.md: Mistake 12 (sortBy/sortOrder must be in useUrlState defaults),
  Mistake 13 (stale typography cardTitle); SortableHeader + StatusBadge usage
- CLAUDE.md §10.3: useUrlState defaultValues tracking warning

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ilramdhan ilramdhan added this to the Costing Release Milestone milestone Jul 2, 2026
@ilramdhan ilramdhan self-assigned this Jul 2, 2026
Copilot AI review requested due to automatic review settings July 2, 2026 09:35
@ilramdhan ilramdhan added bug Something isn't working enhancement New feature or request fix labels Jul 2, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@ilramdhan ilramdhan moved this from Todo to In progress in Goapps Roadmap [Frontend] Jul 2, 2026
@ilramdhan ilramdhan merged commit 7c9bb33 into mutugading:main Jul 2, 2026
4 checks passed
@github-project-automation github-project-automation Bot moved this from In progress to Done in Goapps Roadmap [Frontend] Jul 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working enhancement New feature or request fix

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants