import { redirect, Form } from "react-router"; import { auth } from "~/lib/auth.server"; import { findUserById, updateUser } from "~/models/user"; import type { Route } from "./+types/user-profile"; import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; import { Button } from "~/components/ui/button"; import { Input } from "~/components/ui/input"; import { Label } from "~/components/ui/label"; export function meta(): Route.MetaDescriptors { return [{ title: "Profile - Brackt" }]; } export async function loader(args: Route.LoaderArgs) { const session = await auth.api.getSession({ headers: args.request.headers }); if (!session) { return redirect("/login?redirectTo=/user-profile"); } const user = await findUserById(session.user.id); if (!user) { return redirect("/"); } return { user }; } export async function action(args: Route.ActionArgs) { const session = await auth.api.getSession({ headers: args.request.headers }); if (!session) { return redirect("/login?redirectTo=/user-profile"); } const formData = await args.request.formData(); const displayName = formData.get("displayName") as string; const username = formData.get("username") as string | null; const firstName = formData.get("firstName") as string | null; const lastName = formData.get("lastName") as string | null; await updateUser(session.user.id, { displayName: displayName || undefined, username: username || undefined, firstName: firstName || undefined, lastName: lastName || undefined, }); return { success: true }; } export default function UserProfilePage({ loaderData, actionData }: Route.ComponentProps) { const { user } = loaderData; return (
Your Profile {actionData?.success && (

Profile updated successfully.

)}

{user.email}

); }