feat(source2): lock dark mode, sans-serif typography, and all recent updates
This commit is contained in:
1 parent
dd4c8f6876
commit
9f24b56e97
259 files changed
+15596
-8966
No files matched your search
@@ -0,0 +1,74 @@
|
||||
# Iteration Log — Fix: Site Switcher Tidak Bisa Pindah ke Nexus
|
||||
**Date:** 2026-07-28 22:50 WIB
|
||||
**Trigger:** User report — "ketika login sebagai superadmin, default site SIAB. kenapa tidak bisa berpindah ke site nexus?"
|
||||
|
||||
---
|
||||
|
||||
## Masalah
|
||||
|
||||
SUPER_ADMIN memilih site Nexus dari dropdown SiteSelector → halaman reload → site kembali ke SIAB.
|
||||
User tidak bisa bertahan di Nexus site.
|
||||
|
||||
---
|
||||
|
||||
## Root Cause Analysis
|
||||
|
||||
### Bug: Sidebar.tsx baris 33-36 — localStorage Overwrite
|
||||
|
||||
Setiap kali Sidebar di-mount, ia fetch `/api/auth/me` dan:
|
||||
```js
|
||||
if (data.user.site_uuid) {
|
||||
localStorage.setItem('backone_site_uuid', data.user.site_uuid); // OVERWRITE!
|
||||
setSelectedSite(data.user.site_uuid);
|
||||
}
|
||||
```
|
||||
|
||||
Pengguna `admin` (SUPER_ADMIN) memiliki `site_uuid: '6681452d_...'` (SIAB) tersimpan di DB.
|
||||
Setiap page load, Sidebar **selalu overwrite** localStorage dengan SIAB.
|
||||
|
||||
**Flow yang rusak:**
|
||||
```
|
||||
User pilih Nexus → localStorage="Nexus" → handleSiteSelect → window.location.reload()
|
||||
→ Sidebar mount → fetch /api/auth/me → user.site_uuid="SIAB" → localStorage.setItem("SIAB") ← BUG!
|
||||
→ tampil SIAB lagi
|
||||
```
|
||||
|
||||
### Tambahan: site_uuid SUPER_ADMIN di DB
|
||||
|
||||
User `admin` punya `site_uuid: '6681452d_...'` tersimpan di DB.
|
||||
Untuk SUPER_ADMIN, field ini seharusnya tidak membatasi — backend sudah benar
|
||||
(`getBaseFilter` pakai `requestedSiteUuid` dari header, bukan `user.site_uuid`).
|
||||
Masalahnya ada di frontend yang overwrite localStorage.
|
||||
|
||||
---
|
||||
|
||||
## Fix
|
||||
|
||||
**File:** `src/components/layout/Sidebar.tsx`
|
||||
|
||||
Logic baru: role-aware site UUID preservation:
|
||||
- **Global roles** (SUPER_ADMIN, EXECUTIVE, SOC_ANALYST, ENGINEER):
|
||||
Prioritaskan pilihan tersimpan di localStorage. Hanya set dari DB jika belum ada.
|
||||
- **Restricted roles** (TENANT_ADMIN, AGENT_VIEWER, COMPANY_*):
|
||||
Selalu pakai site_uuid dari DB (mereka tidak bisa switch site).
|
||||
|
||||
**Flow yang benar setelah fix:**
|
||||
```
|
||||
User pilih Nexus → localStorage="Nexus" → reload
|
||||
→ Sidebar mount → fetch /api/auth/me → isGlobalRole=true
|
||||
→ storedSiteUuid="Nexus" exists → siteToUse="Nexus" ← PRESERVED ✅
|
||||
→ tampil Nexus dengan benar
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Validation
|
||||
|
||||
- Build: ✅ PASS (25/25 pages)
|
||||
- Logic: Site switch sekarang persisten untuk SUPER_ADMIN
|
||||
- Tidak ada breaking changes untuk restricted roles
|
||||
|
||||
---
|
||||
|
||||
## Files Changed
|
||||
- `src/components/layout/Sidebar.tsx` — Fix localStorage overwrite bug
|
||||
Reference in new issue
Block a user