import { ActionIcon, Avatar, Badge, Box, Button, Card, Code, Divider, Grid, Group, Paper, rem, Stack, Text, Title, Tooltip, } from "@mantine/core"; import { modals } from "@mantine/modals"; import { IconAt, IconCheck, IconCopy, IconDashboard, IconEdit, IconExternalLink, IconId, IconLogout, IconShield, IconUser, } from "@tabler/icons-react"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { useState } from "react"; import { useSnapshot } from "valtio"; import { protectedRouteMiddleware } from "@/middleware/authMiddleware"; import { authClient } from "@/utils/auth-client"; import { authStore } from "../../store/auth"; export const Route = createFileRoute("/profile/")({ component: Profile, beforeLoad: protectedRouteMiddleware, }); function Profile() { const snap = useSnapshot(authStore); const navigate = useNavigate(); const [copied, setCopied] = useState(null); async function logout() { await authClient.signOut(); navigate({ to: "/signin" }); } const openLogoutModal = () => modals.openConfirmModal({ title: Konfirmasi Keluar, centered: true, size: "sm", children: ( Apakah Anda yakin ingin keluar dari akun Anda? Anda harus masuk kembali untuk mengakses data Anda. ), labels: { confirm: "Keluar", cancel: "Batal" }, confirmProps: { color: "red", leftSection: }, onConfirm: logout, }); const copyToClipboard = (text: string, key: string) => { if (navigator.clipboard) { navigator.clipboard.writeText(text); setCopied(key); setTimeout(() => setCopied(null), 2000); } }; interface InfoFieldProps { icon: React.ElementType; label: string; value: string | null | undefined; copyable?: boolean; id?: string; } const InfoField = ({ icon: Icon, label, value, copyable = false, id = "", }: InfoFieldProps) => ( {label} {value || "N/A"} {copyable && value && ( copyToClipboard(value, id)} > {copied === id ? ( ) : ( )} )} ); return ( {/* Header Section */} Profil Saya Kelola informasi akun dan pengaturan keamanan Anda {snap.user?.role === "admin" && ( )} {/* Profile Overview Card */} {snap.user?.name?.charAt(0).toUpperCase()} {snap.user?.name} {snap.user?.email} {snap.user?.role || "user"} Informasi Identitas Keamanan & Sesi Sesi Saat Ini Aktif Sekarang ID: {snap.session?.id?.substring(0, 8)}... Session Token {snap.session?.token ? `${snap.session.token.substring(0, 32)}...` : "N/A"} snap.session?.token && copyToClipboard(snap.session.token, "token") } > {copied === "token" ? ( ) : ( )} ); }