import { createFileRoute, Link, useNavigate } from "@tanstack/react-router"
import { useTranslation } from "react-i18next"
import {
ArrowLeft,
ChevronRight,
Download,
Globe,
Key,
LogOut,
ShieldBan,
Sparkles,
User,
} from "lucide-react"
import { useAuth, useIsAdmin } from "@/components/auth-provider"
export const Route = createFileRoute("/_app/settings/")({
component: SettingsPage,
})
type SettingsItem = {
label: string
description?: string
to: string
icon: React.ReactNode
}
function SettingsPage() {
const { t } = useTranslation()
const { logout } = useAuth()
const isAdmin = useIsAdmin()
const navigate = useNavigate()
const account: SettingsItem[] = [
{
label: t("settings.editProfile"),
description: t("settings.editProfileDesc"),
to: "/settings/edit-profile",
icon: ,
},
]
const data: SettingsItem[] = [
{
label: t("settings.import"),
description: t("settings.importDesc"),
to: "/settings/import",
icon: ,
},
{
label: t("settings.yearWrapUp"),
description: t("settings.yearWrapUpDesc"),
to: "/settings/wrapup",
icon: ,
},
]
const integrations: SettingsItem[] = [
{
label: t("settings.webhookTokens"),
description: t("settings.webhookTokensDesc"),
to: "/settings/webhooks",
icon: ,
},
]
const social: SettingsItem[] = [
{
label: t("settings.blockedUsers"),
description: isAdmin ? t("settings.blockedUsersDescAdmin") : t("settings.blockedUsersDesc"),
to: "/settings/blocked",
icon: ,
},
]
if (isAdmin) {
social.push({
label: t("settings.blockedDomains"),
description: t("settings.blockedDomainsDesc"),
to: "/settings/blocked",
icon: ,
})
}
const handleLogout = () => {
logout()
navigate({ to: "/login" })
}
return (
)
}
function SettingsGroup({
label,
items,
}: {
label: string
items: SettingsItem[]
}) {
return (
{label}
{items.map((item) => (
{item.icon}
{item.label}
{item.description && (
{item.description}
)}
))}
)
}