"use client"; import { useState, useEffect } from "react"; import { toast } from "sonner"; import { AppShell } from "@/components/app-shell"; import { useAuth } from "@/lib/auth-context"; import { Input } from "@/components/ui/input"; import type { Role } from "@/lib/auth-types"; import { UserIcon, AtSignIcon, KeyRoundIcon, SettingsIcon } from "@/components/ui/phosphor-icons"; const ROLE_DETAILS = [ { value: "superadmin" as Role, label: "Super Administrator", description: "Akses penuh ke semua peta (Kemiskinan, Lahan & Jalan, SPBU) serta statistik analitik.", }, { value: "admin_poverty" as Role, label: "Admin Poverty Map", description: "Akses terbatas khusus untuk peta kemiskinan dan analisis data warga miskin.", }, { value: "admin_lands_roads" as Role, label: "Admin Lahan & Jalan", description: "Akses terbatas khusus untuk manajemen lahan tata ruang dan jalan transportasi.", }, { value: "admin_gas_stations" as Role, label: "Admin SPBU", description: "Akses terbatas khusus untuk pemetaan SPBU, EV Charger, dan Bengkel.", } ]; export default function SettingsPage() { const { user, token, login } = useAuth(); const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [selectedRole, setSelectedRole] = useState("superadmin"); const [mapStyle, setMapStyle] = useState<"street" | "satellite">("street"); const [saving, setSaving] = useState(false); // Load user details when loaded useEffect(() => { if (user) { setName(user.username || ""); setEmail(user.email || ""); setSelectedRole(user.role || "superadmin"); // Load map preference from localStorage if set const savedMapStyle = localStorage.getItem("default_map_style") as "street" | "satellite"; if (savedMapStyle) { setMapStyle(savedMapStyle); } } }, [user]); function handleSave(e: React.FormEvent) { e.preventDefault(); if (!user || !token) return; setSaving(true); setTimeout(() => { const updatedUser = { ...user, username: name.trim(), email: email.trim(), role: selectedRole }; // Save profile and role to AuthContext login(token, updatedUser); // Save map preferences to localStorage localStorage.setItem("default_map_style", mapStyle); toast.success("Pengaturan berhasil disimpan!"); setSaving(false); }, 800); } return (
{/* Page Header */}

Pengaturan Akun

Kelola informasi profil, peran administrator sistem, dan preferensi tampilan peta global.

{/* Profile Card */}

Informasi Profil

setName(e.target.value)} placeholder="Masukkan nama pengguna" required className="bg-background border border-border focus-visible:border-ring rounded-md h-10 text-sm" />
setEmail(e.target.value)} placeholder="Masukkan email" required className="bg-background border border-border focus-visible:border-ring rounded-md h-10 text-sm" />
{/* Role Gating Card */}

Peran & Hak Akses

Pilih peran admin untuk membatasi atau membuka modul visualisasi peta di sidebar.

{ROLE_DETAILS.map((roleOpt) => { const isSelected = selectedRole === roleOpt.value; return (
setSelectedRole(roleOpt.value)} className={`p-4 border rounded-xl cursor-pointer flex flex-col gap-2 transition-all select-none ${ isSelected ? "border-primary bg-primary/5 shadow-sm" : "border-border/60 bg-background hover:bg-muted/50" }`} >
{roleOpt.label} {isSelected && ( )}

{roleOpt.description}

); })}
{/* Map Preferences Card */}

Preferensi Peta

Default Map Style
{["street", "satellite"].map((style) => { const isSelected = mapStyle === style; return ( ); })}
{/* Submit Action */}
); }