Load draft content in admin while keeping public lesson locks
This commit is contained in:
+32
-1
@@ -1615,6 +1615,7 @@ function LegalPage({ title, body }: { title: string; body: string[] }) {
|
||||
|
||||
function AdminShell({ content, onSave }: { content: SiteContent; onSave: (c: SiteContent) => void }) {
|
||||
const [status, setStatus] = useState<'checking' | 'authenticated' | 'unauthenticated' | 'misconfigured'>('checking')
|
||||
const [adminContent, setAdminContent] = useState<SiteContent>(content)
|
||||
const [password, setPassword] = useState('')
|
||||
const [errorMsg, setErrorMsg] = useState('')
|
||||
const [submitting, setSubmitting] = useState(false)
|
||||
@@ -1639,6 +1640,36 @@ function AdminShell({ content, onSave }: { content: SiteContent; onSave: (c: Sit
|
||||
})
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
if (status === 'authenticated') return
|
||||
setAdminContent(content)
|
||||
}, [content, status])
|
||||
|
||||
useEffect(() => {
|
||||
if (status !== 'authenticated') return
|
||||
|
||||
let cancelled = false
|
||||
|
||||
fetch('/api/admin-content?source=draft')
|
||||
.then(r => (r.ok ? r.json() : null))
|
||||
.then(data => {
|
||||
if (cancelled) return
|
||||
if (data?.siteContent) {
|
||||
setAdminContent(c => ({ ...c, ...data.siteContent }))
|
||||
}
|
||||
})
|
||||
.catch(() => {})
|
||||
|
||||
return () => {
|
||||
cancelled = true
|
||||
}
|
||||
}, [status])
|
||||
|
||||
function handleAdminSave(next: SiteContent) {
|
||||
setAdminContent(next)
|
||||
onSave(next)
|
||||
}
|
||||
|
||||
async function handleLogin(e: React.FormEvent) {
|
||||
e.preventDefault()
|
||||
setSubmitting(true)
|
||||
@@ -1714,7 +1745,7 @@ function AdminShell({ content, onSave }: { content: SiteContent; onSave: (c: Sit
|
||||
}
|
||||
|
||||
if (status === 'authenticated') {
|
||||
return <AdminPage content={content} onSave={onSave} onLogout={handleLogout} />
|
||||
return <AdminPage content={adminContent} onSave={handleAdminSave} onLogout={handleLogout} />
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user