import { useState, useEffect } from "react"; import { data, useFetcher } from "react-router"; import { useTranslation } from "react-i18next"; import type { Route } from "./+types/settings.profile"; import { loadProfileSettings } from "./settings.profile.server"; export function meta() { return [{ title: "Profile — Settings — trails.cool" }]; } export async function loader({ request }: Route.LoaderArgs) { return data(await loadProfileSettings(request)); } export default function ProfileSettings({ loaderData }: Route.ComponentProps) { const { user } = loaderData; const { t } = useTranslation(["journal", "common"]); const profileFetcher = useFetcher(); const [displayName, setDisplayName] = useState(user.displayName ?? ""); const [bio, setBio] = useState(user.bio ?? ""); const [profileVisibility, setProfileVisibility] = useState<"public" | "private">( user.profileVisibility, ); const [profileSaved, setProfileSaved] = useState(false); useEffect(() => { if (profileFetcher.data && !profileFetcher.data.error) { setProfileSaved(true); const timer = setTimeout(() => setProfileSaved(false), 3000); return () => clearTimeout(timer); } }, [profileFetcher.data]); return (

{t("settings.profile.title")}

setDisplayName(e.target.value)} placeholder={user.username} className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500" />