diff --git a/src/app/profile/settings/page.tsx b/src/app/profile/settings/page.tsx
new file mode 100644
index 0000000..e0181c3
--- /dev/null
+++ b/src/app/profile/settings/page.tsx
@@ -0,0 +1,37 @@
+import { redirect } from "next/navigation";
+import Link from "next/link";
+import SiteNav from "@/components/SiteNav";
+import AccountSettings from "../AccountSettings";
+import { getCurrentUser } from "@/lib/session";
+import { listFinalDrawings } from "@/lib/drawings";
+
+export const dynamic = "force-dynamic";
+export const metadata = { title: "Settings · DrawIt" };
+
+export default async function SettingsPage() {
+ const user = await getCurrentUser();
+ if (!user) redirect("/login");
+
+ const drawings = listFinalDrawings(user.id).map((d) => ({ id: d.id, image: d.image }));
+
+ return (
+ <>
+
+
+
+
Settings
+ ← Back to profile
+
+
+
+ >
+ );
+}
diff --git a/src/components/NavLinks.tsx b/src/components/NavLinks.tsx
index 00bebf7..f1eacba 100644
--- a/src/components/NavLinks.tsx
+++ b/src/components/NavLinks.tsx
@@ -6,7 +6,7 @@ import LogoutButton from "./LogoutButton";
export default function NavLinks({
user,
}: {
- user: { username: string; isAdmin: boolean } | null;
+ user: { username: string; isAdmin: boolean; displayName?: string; avatar?: string } | null;
}) {
const pathname = usePathname() || "/";
@@ -34,8 +34,13 @@ export default function NavLinks({
Report a problem
-
- 🖼️ {user.username}
+
+ {user.avatar ? (
+

+ ) : (
+ "🖼️"
+ )}{" "}
+ {user.displayName || user.username}
>
diff --git a/src/components/ShadingRunner.tsx b/src/components/ShadingRunner.tsx
index 3df5f2c..12c5847 100644
--- a/src/components/ShadingRunner.tsx
+++ b/src/components/ShadingRunner.tsx
@@ -10,6 +10,7 @@ import {
saveFinalDrawing,
exportCanvasToDataURL,
fileToDataURL,
+ loadDrawingAsLayer,
} from "./drawingPersistence";
interface StepData { n: number; title: string; instruction: string; tip: string; guideSvg: string; }
@@ -49,7 +50,7 @@ export default function ShadingRunner({
const stageRef = useRef
(null);
const strokesRef = useRef([]);
const drawingRef = useRef(null);
- const baseImgRef = useRef(null);
+ const baseImgRef = useRef(null);
const saveTimer = useRef | undefined>(undefined);
const [toneIdx, setToneIdx] = useState(0);
const [size, setSize] = useState(SIZES[1]);
@@ -111,9 +112,7 @@ export default function ShadingRunner({
let alive = true;
loadProgressDrawing(meta.level, meta.sublevel).then((img) => {
if (!img || !alive) return;
- const im = new Image();
- im.onload = () => { baseImgRef.current = im; redraw(); };
- im.src = img;
+ loadDrawingAsLayer(img).then((cv) => { if (alive) { baseImgRef.current = cv; redraw(); } });
});
return () => { alive = false; };
}, [loggedIn, alreadyEarned, meta.level, meta.sublevel, redraw]);
diff --git a/src/components/SiteNav.tsx b/src/components/SiteNav.tsx
index a774e5f..d0a3d08 100644
--- a/src/components/SiteNav.tsx
+++ b/src/components/SiteNav.tsx
@@ -10,7 +10,7 @@ export default async function SiteNav() {
🐟 DrawIt
-
+
);
diff --git a/src/components/TraceRunner.tsx b/src/components/TraceRunner.tsx
index 2bbf2fd..3ed82ec 100644
--- a/src/components/TraceRunner.tsx
+++ b/src/components/TraceRunner.tsx
@@ -4,7 +4,7 @@ import Link from "next/link";
import { useRouter } from "next/navigation";
import { badgeSvgMarkup, badgeFullSvg } from "./BadgeArt";
import LineDraw from "./LineDraw";
-import { loadProgressDrawing, saveProgressDrawing, saveFinalDrawing, exportCanvasToDataURL, fileToDataURL } from "./drawingPersistence";
+import { loadProgressDrawing, saveProgressDrawing, saveFinalDrawing, exportCanvasToDataURL, fileToDataURL, loadDrawingAsLayer } from "./drawingPersistence";
interface StepData { n: number; title: string; instruction: string; tip: string; lines: string[] }
interface Meta {
@@ -41,7 +41,7 @@ export default function TraceRunner({ meta, steps, loggedIn, username, completed
const stageRef = useRef