diff --git a/client/pages/Admin.tsx b/client/pages/Admin.tsx index d8acbc91..4fb7b7c7 100644 --- a/client/pages/Admin.tsx +++ b/client/pages/Admin.tsx @@ -133,13 +133,24 @@ export default function Admin() { const savePost = async (idx: number) => { const p = blogPosts[idx]; - const payload = { ...p, slug: (p.slug || p.title || "").toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-") }; + const payload = { + ...p, + slug: (p.slug || p.title || "") + .toLowerCase() + .trim() + .replace(/[^a-z0-9\s-]/g, "") + .replace(/\s+/g, "-"), + }; const res = await fetch("/api/blog", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }); - if (!res.ok) return aethexToast.error({ title: "Save failed", description: await res.text().catch(() => "") }); + if (!res.ok) + return aethexToast.error({ + title: "Save failed", + description: await res.text().catch(() => ""), + }); const saved = await res.json(); const next = blogPosts.slice(); next[idx] = saved; @@ -149,8 +160,14 @@ export default function Admin() { const deletePost = async (idx: number) => { const p = blogPosts[idx]; - const res = await fetch(`/api/blog/${encodeURIComponent(p.slug)}`, { method: "DELETE" }); - if (!res.ok) return aethexToast.error({ title: "Delete failed", description: await res.text().catch(() => "") }); + const res = await fetch(`/api/blog/${encodeURIComponent(p.slug)}`, { + method: "DELETE", + }); + if (!res.ok) + return aethexToast.error({ + title: "Delete failed", + description: await res.text().catch(() => ""), + }); setBlogPosts(blogPosts.filter((_, i) => i !== idx)); aethexToast.info({ title: "Deleted", description: p.title }); }; @@ -240,7 +257,9 @@ export default function Admin() { Blog Posts - Manage blog content stored in Supabase + + Manage blog content stored in Supabase +
@@ -263,36 +282,135 @@ export default function Admin() {
{blogPosts.map((p, i) => ( -
+
- { - const next = blogPosts.slice(); next[i] = { ...next[i], title: e.target.value }; setBlogPosts(next); - }} /> - { - const next = blogPosts.slice(); next[i] = { ...next[i], slug: e.target.value }; setBlogPosts(next); - }} /> + { + const next = blogPosts.slice(); + next[i] = { ...next[i], title: e.target.value }; + setBlogPosts(next); + }} + /> + { + const next = blogPosts.slice(); + next[i] = { ...next[i], slug: e.target.value }; + setBlogPosts(next); + }} + />
- { const n = blogPosts.slice(); n[i] = { ...n[i], author: e.target.value }; setBlogPosts(n); }} /> - { const n = blogPosts.slice(); n[i] = { ...n[i], date: e.target.value }; setBlogPosts(n); }} /> + { + const n = blogPosts.slice(); + n[i] = { ...n[i], author: e.target.value }; + setBlogPosts(n); + }} + /> + { + const n = blogPosts.slice(); + n[i] = { ...n[i], date: e.target.value }; + setBlogPosts(n); + }} + />
- { const n = blogPosts.slice(); n[i] = { ...n[i], read_time: e.target.value }; setBlogPosts(n); }} /> - { const n = blogPosts.slice(); n[i] = { ...n[i], category: e.target.value }; setBlogPosts(n); }} /> - { const n = blogPosts.slice(); n[i] = { ...n[i], image: e.target.value }; setBlogPosts(n); }} /> + { + const n = blogPosts.slice(); + n[i] = { ...n[i], read_time: e.target.value }; + setBlogPosts(n); + }} + /> + { + const n = blogPosts.slice(); + n[i] = { ...n[i], category: e.target.value }; + setBlogPosts(n); + }} + /> + { + const n = blogPosts.slice(); + n[i] = { ...n[i], image: e.target.value }; + setBlogPosts(n); + }} + />
-