diff --git a/src/pages/AdminSettings.tsx b/src/pages/AdminSettings.tsx
index 9e34da89..e2a10893 100644
--- a/src/pages/AdminSettings.tsx
+++ b/src/pages/AdminSettings.tsx
@@ -1,82 +1,29 @@
-import { useState, useEffect } from 'react';
-import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
+import { useState } from 'react';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Switch } from '@/components/ui/switch';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
-import { Textarea } from '@/components/ui/textarea';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
-import { Separator } from '@/components/ui/separator';
import { Badge } from '@/components/ui/badge';
import { AdminHeader } from '@/components/layout/AdminHeader';
import { useAuth } from '@/hooks/useAuth';
import { useUserRole } from '@/hooks/useUserRole';
-import { supabase } from '@/integrations/supabase/client';
-import { useToast } from '@/hooks/use-toast';
-import { Loader2, Save, Clock, Users, Bell, Shield, Settings, Trash2, Plus, X } from 'lucide-react';
-
-interface AdminSetting {
- id: string;
- setting_key: string;
- setting_value: any;
- category: string;
- description: string;
-}
+import { useAdminSettings } from '@/hooks/useAdminSettings';
+import { Loader2, Save, Clock, Users, Bell, Shield, Settings, Trash2 } from 'lucide-react';
export default function AdminSettings() {
const { user } = useAuth();
- const { permissions, loading: roleLoading } = useUserRole();
- const { toast } = useToast();
- const queryClient = useQueryClient();
- const [hasChanges, setHasChanges] = useState(false);
-
- // Fetch admin settings
- const { data: settings, isLoading } = useQuery({
- queryKey: ['admin-settings'],
- queryFn: async () => {
- const { data, error } = await supabase
- .from('admin_settings')
- .select('*')
- .order('category', { ascending: true });
-
- if (error) throw error;
- return data as AdminSetting[];
- },
- enabled: !!user && permissions?.role_level !== 'user'
- });
-
- // Update settings mutation
- const updateSettingMutation = useMutation({
- mutationFn: async ({ key, value }: { key: string; value: any }) => {
- const { error } = await supabase
- .from('admin_settings')
- .update({
- setting_value: value,
- updated_by: user?.id,
- updated_at: new Date().toISOString()
- })
- .eq('setting_key', key);
-
- if (error) throw error;
- },
- onSuccess: () => {
- queryClient.invalidateQueries({ queryKey: ['admin-settings'] });
- setHasChanges(false);
- toast({
- title: "Settings Updated",
- description: "Admin settings have been saved successfully.",
- });
- },
- onError: (error: any) => {
- toast({
- title: "Error",
- description: error.message || "Failed to update settings",
- variant: "destructive",
- });
- }
- });
+ const { isAdmin, isModerator, loading: roleLoading } = useUserRole();
+ const {
+ settings,
+ isLoading,
+ error,
+ updateSetting,
+ isUpdating,
+ getSettingsByCategory
+ } = useAdminSettings();
if (roleLoading || isLoading) {
return (
@@ -89,38 +36,51 @@ export default function AdminSettings() {
);
}
- if (!user || permissions?.role_level === 'user') {
+ if (!user || (!isAdmin() && !isModerator())) {
return (
<>
You don't have permission to access admin settings.
+ {error && ( ++ No admin settings have been configured yet. Please contact your system administrator. +
+ {error && ( +