You've been invited to join an organization. Please log in or sign up to accept.
diff --git a/src/routes/logout.tsx b/src/routes/logout.tsx
index 404493f..a3916c9 100644
--- a/src/routes/logout.tsx
+++ b/src/routes/logout.tsx
@@ -1,11 +1,11 @@
import { useEffect } from 'react'
import BaseLayout from '~/components/BaseLayout'
+import { useAppContext } from '~/lib/app-context'
import { authClient } from '~/lib/auth-client'
-import { useSSRData } from '~/lib/ssr-data'
export default function LogoutPage() {
- const kfAuthUrl = useSSRData('kfAuthUrl')
+ const { kfAuthUrl } = useAppContext()
useEffect(() => {
authClient.signOut().then(() => {
diff --git a/src/routes/query.tsx b/src/routes/query.tsx
index 5179f0d..29f6e16 100644
--- a/src/routes/query.tsx
+++ b/src/routes/query.tsx
@@ -2,14 +2,10 @@ import { Link } from 'react-router'
import QueryExplorer from '~/components/QueryExplorer'
import UserMenu from '~/components/UserMenu'
-import { useSSRData } from '~/lib/ssr-data'
+import { useAppContext } from '~/lib/app-context'
export default function QueryPage() {
- const currentUser = useSSRData<{
- slug: string
- displayName: string
- orgs?: { slug: string; displayName: string }[]
- } | null>('currentUser')
+ const { currentUser } = useAppContext()
return (
diff --git a/src/routes/schemas/[id].tsx b/src/routes/schemas/[id].tsx
index b18387b..dfd4669 100644
--- a/src/routes/schemas/[id].tsx
+++ b/src/routes/schemas/[id].tsx
@@ -3,7 +3,6 @@ import { Link, useParams } from 'react-router'
import BaseLayout from '~/components/BaseLayout'
import SchemaLabelManager from '~/components/SchemaLabelManager'
-import { useSSRData } from '~/lib/ssr-data'
interface SchemaData {
id: number
@@ -16,7 +15,7 @@ interface SchemaData {
export default function SchemaDetailPage() {
const params = useParams()
- const schemaId = useSSRData
('schemaId') ?? params.id
+ const schemaId = params.id
const [schema, setSchema] = useState(null)
const [loading, setLoading] = useState(true)
const [error, setError] = useState('')
diff --git a/src/routes/settings/avatar.data.ts b/src/routes/settings/avatar.data.ts
new file mode 100644
index 0000000..26d3ecd
--- /dev/null
+++ b/src/routes/settings/avatar.data.ts
@@ -0,0 +1,4 @@
+import { requireAuth } from '~/lib/auth-middleware'
+
+export const middleware = [requireAuth]
+export const handle = { title: 'Avatar — Underlay' }
diff --git a/src/routes/settings/avatar.tsx b/src/routes/settings/avatar.tsx
index 2106df0..29a5a67 100644
--- a/src/routes/settings/avatar.tsx
+++ b/src/routes/settings/avatar.tsx
@@ -2,15 +2,15 @@ import { type FormEvent, useState } from 'react'
import { Link } from 'react-router'
import BaseLayout from '~/components/BaseLayout'
-import { useSSRData } from '~/lib/ssr-data'
+import { useAppContext } from '~/lib/app-context'
export default function SettingsAvatar() {
- const me = useSSRData('currentUser')
+ const { currentUser } = useAppContext()
const [success, setSuccess] = useState('')
const [error, setError] = useState('')
const [submitting, setSubmitting] = useState(false)
- const [avatarUrl, setAvatarUrl] = useState(me?.avatarUrl ?? '')
+ const [avatarUrl, setAvatarUrl] = useState(currentUser?.avatarUrl ?? '')
async function handleUpload(e: FormEvent) {
e.preventDefault()
@@ -50,8 +50,6 @@ export default function SettingsAvatar() {
}
}
- if (!me) return null
-
return (
@@ -100,7 +98,7 @@ export default function SettingsAvatar() {
/>
) : (
- {me.displayName?.charAt(0)?.toUpperCase() ?? '?'}
+ {currentUser.displayName?.charAt(0)?.toUpperCase() ?? '?'}
)}
diff --git a/src/routes/settings/index.data.ts b/src/routes/settings/index.data.ts
new file mode 100644
index 0000000..b6df305
--- /dev/null
+++ b/src/routes/settings/index.data.ts
@@ -0,0 +1,4 @@
+import { requireAuth } from '~/lib/auth-middleware'
+
+export const middleware = [requireAuth]
+export const handle = { title: 'Settings — Underlay' }
diff --git a/src/routes/settings/index.tsx b/src/routes/settings/index.tsx
index 18289d4..c3ebe4c 100644
--- a/src/routes/settings/index.tsx
+++ b/src/routes/settings/index.tsx
@@ -2,23 +2,22 @@ import { type FormEvent, useState } from 'react'
import { Link } from 'react-router'
import BaseLayout from '~/components/BaseLayout'
-import { useSSRData } from '~/lib/ssr-data'
+import { useAppContext } from '~/lib/app-context'
export default function Settings() {
- const me = useSSRData
('currentUser')
- const kfAccountUrl = useSSRData('kfAccountUrl')
+ const { currentUser, kfAccountUrl } = useAppContext()
const [success, setSuccess] = useState('')
const [error, setError] = useState('')
// Profile form (Underlay-specific fields only — name/email/avatar managed by KF Auth)
- const [slugValue, setSlugValue] = useState(me?.slug ?? '')
- const [bio, setBio] = useState(me?.bio ?? '')
- const [website, setWebsite] = useState(me?.website ?? '')
- const [location, setLocation] = useState(me?.location ?? '')
+ const [slugValue, setSlugValue] = useState(currentUser?.slug ?? '')
+ const [bio, setBio] = useState(currentUser?.bio ?? '')
+ const [website, setWebsite] = useState(currentUser?.website ?? '')
+ const [location, setLocation] = useState(currentUser?.location ?? '')
// Notifications
- const notifPrefs = (me?.notificationPrefs as Record) ?? {}
+ const notifPrefs = (currentUser?.notificationPrefs as Record) ?? {}
const [collectionActivity, setCollectionActivity] = useState(
notifPrefs.collectionActivity ?? true,
)
@@ -39,7 +38,7 @@ export default function Settings() {
e.preventDefault()
clearMessages()
setSubmitting('profile')
- const slugChanged = slugValue.trim() !== '' && slugValue.trim() !== me?.slug
+ const slugChanged = slugValue.trim() !== '' && slugValue.trim() !== currentUser?.slug
try {
const payload: Record = { bio, website, location }
if (slugChanged) payload.slug = slugValue.trim()
@@ -110,8 +109,6 @@ export default function Settings() {
}
}
- if (!me) return null
-
return (
@@ -145,20 +142,20 @@ export default function Settings() {
Profile
- {me.avatarUrl ? (
+ {currentUser.avatarUrl ? (

) : (
- {me.displayName?.charAt(0)?.toUpperCase() ?? '?'}
+ {currentUser.displayName?.charAt(0)?.toUpperCase() ?? '?'}
)}