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 (
-
-
-
- );
- }
-
- // 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 (
+
+
+
+ );
+ }
+
+ // Don't render if not admin
+ if (!loading && !isAdmin()) {
+ return null;
+ }
+
const resetForm = () => {
setTitle('');
setSlug('');