From a03987c36b297f93f4d2a0b7ccec00d3d91a9f0f Mon Sep 17 00:00:00 2001 From: aarbit Date: Mon, 7 Sep 2026 23:46:48 -0500 Subject: [PATCH] Show the signed-in user's username in the top bar --- src/components/layout/TopBar.tsx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/components/layout/TopBar.tsx b/src/components/layout/TopBar.tsx index f4c21c9..d2aa018 100644 --- a/src/components/layout/TopBar.tsx +++ b/src/components/layout/TopBar.tsx @@ -1,4 +1,4 @@ -import { useRef, useState } from 'react' +import { useEffect, useRef, useState } from 'react' import { downloadProjectFile, readProjectFile, ProjectImportError } from '../../data/exportImport' import { supabase } from '../../data/supabaseClient' import { useProjectStore } from '../../state/projectStore' @@ -10,6 +10,21 @@ export default function TopBar() { const importProject = useProjectStore((s) => s.importProject) const fileInputRef = useRef(null) const [diagramManagerOpen, setDiagramManagerOpen] = useState(false) + const [username, setUsername] = useState(null) + + // One-time fetch — nothing else in the app changes your own username after + // CompleteProfileScreen sets it, so there's no need to keep this live. + useEffect(() => { + supabase.auth.getUser().then(({ data: { user } }) => { + if (!user) return + supabase + .from('profiles') + .select('username') + .eq('id', user.id) + .single() + .then(({ data }) => setUsername(data?.username ?? null)) + }) + }, []) const handleExport = () => downloadProjectFile(project) @@ -55,6 +70,7 @@ export default function TopBar() { > Export + {username && {username}}