diff --git a/src/pages/AdminBlog.tsx b/src/pages/AdminBlog.tsx index b926621e..00edb072 100644 --- a/src/pages/AdminBlog.tsx +++ b/src/pages/AdminBlog.tsx @@ -48,44 +48,7 @@ export default function AdminBlog() { const [featuredImageId, setFeaturedImageId] = useState(''); const [featuredImageUrl, setFeaturedImageUrl] = useState(''); - const { data: posts, isLoading } = useQuery({ - queryKey: ['admin-blog-posts'], - queryFn: async () => { - const { data, error } = await supabase - .from('blog_posts') - .select('*') - .order('created_at', { ascending: false }); - if (error) throw error; - return data as BlogPost[]; - }, - }); - - // Show loading state while checking permissions - if (loading) { - return ( - -
-
-
-

Loading...

-
-
-
- ); - } - - // Redirect if not admin or superuser - useEffect(() => { - if (!loading && !isAdmin()) { - navigate('/'); - } - }, [loading, isAdmin, navigate]); - - // Don't render if not admin - if (!loading && !isAdmin()) { - return null; - } - + // All mutations must be called before conditional returns const saveMutation = useMutation({ mutationFn: async ({ isDraft }: { isDraft: boolean }) => { const postData = { @@ -140,6 +103,44 @@ export default function AdminBlog() { }, }); + const { data: posts, isLoading } = useQuery({ + queryKey: ['admin-blog-posts'], + queryFn: async () => { + const { data, error } = await supabase + .from('blog_posts') + .select('*') + .order('created_at', { ascending: false }); + if (error) throw error; + return data as BlogPost[]; + }, + }); + + // useEffect must be called before conditional returns + useEffect(() => { + if (!loading && !isAdmin()) { + navigate('/'); + } + }, [loading, isAdmin, navigate]); + + // Show loading state while checking permissions + if (loading) { + return ( + +
+
+
+

Loading...

+
+
+
+ ); + } + + // Don't render if not admin + if (!loading && !isAdmin()) { + return null; + } + const resetForm = () => { setTitle(''); setSlug('');