← full-stack-fastapi-template  /  frontend/src/routes/_layout/settings.tsx

1
import { createFileRoute } from "@tanstack/react-router"
2
3
import ChangePassword from "@/components/UserSettings/ChangePassword"
4
import DeleteAccount from "@/components/UserSettings/DeleteAccount"
5
import UserInformation from "@/components/UserSettings/UserInformation"
6
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
7
import useAuth from "@/hooks/useAuth"
8
9
const tabsConfig = [
10
  { value: "my-profile", title: "My profile", component: UserInformation },
11
  { value: "password", title: "Password", component: ChangePassword },
12
  { value: "danger-zone", title: "Danger zone", component: DeleteAccount },
13
]
14
15
export const Route = createFileRoute("/_layout/settings")({
16
  component: UserSettings,
17
  head: () => ({
18
    meta: [
19
      {
20
        title: "Settings - FastAPI Template",
21
      },
22
    ],
23
  }),
24
})
25
26
function UserSettings() {
27
  const { user: currentUser } = useAuth()
28
  const finalTabs = currentUser?.is_superuser
29
    ? tabsConfig.slice(0, 3)
30
    : tabsConfig
31
32
  if (!currentUser) {
33
    return null
34
  }
35
36
  return (
37
    <div className="flex flex-col gap-6">
38
      <div>
39
        <h1 className="text-2xl font-bold tracking-tight">User Settings</h1>
40
        <p className="text-muted-foreground">
41
          Manage your account settings and preferences
42
        </p>
43
      </div>
44
45
      <Tabs defaultValue="my-profile">
46
        <TabsList>
47
          {finalTabs.map((tab) => (
48
            <TabsTrigger key={tab.value} value={tab.value}>
49
              {tab.title}
50
            </TabsTrigger>
51
          ))}
52
        </TabsList>
53
        {finalTabs.map((tab) => (
54
          <TabsContent key={tab.value} value={tab.value}>
55
            <tab.component />
56
          </TabsContent>
57
        ))}
58
      </Tabs>
59
    </div>
60
  )
61
}
62