Follow-on polish for the nav-design overhaul (#9bfb575).
- /veeam-analysis migrates the bespoke TicketRow + custom pagination to
the new DataTable using getRowCanExpand + renderSubRow. Drops ~85
lines of fragment/colspan markup in favor of the standard pattern.
- PageHeader on the last common stragglers — /settings,
/settings/security, /sentinelone/coverage, /sentinelone/mappings.
Settings is reachable from the new top-bar UserMenu so it had to
match the rest of the visual system.
- /dashboard and /status load with the new Skeleton helpers
(SkeletonRows, SkeletonChart, SkeletonTable) so loading shells now
approximate the post-load layout instead of a single h-NN bar.
- DESIGN.md: closed the straggler PageHeader item; deprioritized the
hard-coded palette audit with a note that ~770 references are mostly
semantic via the documented bg-{hue}-500/15 / text-{hue}-700 recipe.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import { redirect } from "next/navigation";
|
|
import { getSession } from "@/lib/auth-utils";
|
|
import { TwoFactorSetup } from "@/components/settings/two-factor-setup";
|
|
import { ActiveSessions } from "@/components/settings/active-sessions";
|
|
import {
|
|
Card,
|
|
CardContent,
|
|
CardDescription,
|
|
CardHeader,
|
|
CardTitle,
|
|
} from "@/components/ui/card";
|
|
import { PageHeader } from "@/components/navigation/page-header";
|
|
|
|
export default async function SecuritySettingsPage() {
|
|
const session = await getSession();
|
|
|
|
if (!session) {
|
|
redirect("/auth/sign-in");
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<PageHeader
|
|
title="Security"
|
|
description="Manage your security preferences"
|
|
breadcrumbs={[
|
|
{ label: "Settings", href: "/settings" },
|
|
{ label: "Security" },
|
|
]}
|
|
accent
|
|
/>
|
|
<div className="container mx-auto px-6 py-6 max-w-2xl space-y-6">
|
|
<Card>
|
|
<CardHeader>
|
|
<CardTitle>Two-factor authentication</CardTitle>
|
|
<CardDescription>Add an extra layer of security to your account.</CardDescription>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<TwoFactorSetup />
|
|
</CardContent>
|
|
</Card>
|
|
|
|
<Card>
|
|
<CardHeader>
|
|
<CardTitle>Active sessions</CardTitle>
|
|
<CardDescription>Manage your active sessions across devices.</CardDescription>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<ActiveSessions userId={session.user.id} />
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</>
|
|
);
|
|
}
|