import type { SessionUser } from "../middleware/session.ts"; import { Avatar } from "./Avatar.tsx"; import { Layout } from "./layout.tsx"; interface SettingsProps { user: SessionUser; hasPassword: boolean; passkeys: { id: number; created_at: string }[]; sshKeys: { id: number; name: string; fingerprint: string; created_at: string; }[]; theme: string; success: string | null; error: string | null; } const successMessages: Record = { password: "Password updated.", password_removed: "Password removed.", passkey_revoked: "Passkey revoked.", theme: "Theme preference saved.", user_created: "Account created.", user_deleted: "Account deleted.", ssh_key_added: "SSH key added.", ssh_key_deleted: "SSH key removed.", }; export function Settings({ user, hasPassword, passkeys, sshKeys, theme, success, error, }: SettingsProps) { const successMsg = success ? (successMessages[success] ?? null) : null; return (

Settings

{successMsg &&

{successMsg}

} {error &&

{error}

} {/* Avatar */}

Avatar

{/* Appearance */}

Appearance

{/* Password */}

Password

{hasPassword ? "Password is set." : "No password set."}

{hasPassword && (
)}
{hasPassword && passkeys.length > 0 && (
)}
{/* Passkeys */}

Passkeys

{passkeys.length > 0 && (
{passkeys.map((pk) => (
Added{" "} {new Date( pk.created_at, ).toLocaleDateString()}
))}
)}
{/* SSH Keys */}

SSH Keys

{sshKeys.length > 0 && (
{sshKeys.map((key) => (
{key.name} {key.fingerprint} Added{" "} {new Date( key.created_at, ).toLocaleDateString()}
))}
)}
{/* Admin: User Management */} {user.isAdmin && (

User Management

Create account

Delete account

)}
); }