import React, { useState, useEffect } from 'react'; import { useQuery, useMutation } from '@tanstack/react-query'; import { api } from '../lib/api'; import { useToast } from '../components/Toast'; export default function Settings() { const toast = useToast(); const [workspaceName, setWorkspaceName] = useState(''); const [defaultBillable, setDefaultBillable] = useState(false); const [weekStart, setWeekStart] = useState('Monday'); const { data: settings, isLoading, refetch } = useQuery({ queryKey: ['settings'], queryFn: () => api.getSettings(), }); const { data: user } = useQuery({ queryKey: ['me'], queryFn: () => api.getMe(), }); const updateMutation = useMutation({ mutationFn: async (data: { workspaceName: string; defaultBillable: boolean; weekStart: string }) => { return api.updateSettings(data); }, onSuccess: async () => { toast.success('Einstellungen erfolgreich aktualisiert'); await refetch(); }, onError: () => { toast.error('Fehler beim Aktualisieren der Einstellungen'); }, }); useEffect(() => { if (settings) { setWorkspaceName(settings.workspaceName || ''); setDefaultBillable(settings.defaultBillable ?? false); setWeekStart(settings.weekStart || 'Monday'); } }, [settings]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); updateMutation.mutate({ workspaceName, defaultBillable, weekStart, }); }; if (isLoading) { return (
); } if (user?.role !== 'admin') { return (

Zugriff verweigert

Diese Seite ist nur für Administratoren zugänglich.

); } return (

Workspace Einstellungen

{/* Workspace Name */}
setWorkspaceName(e.target.value)} className="w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all" placeholder="z.B. Meine Agentur GmbH" />
{/* Default Billable */}
setDefaultBillable(e.target.checked)} className="h-4 w-4 text-blue-600 focus:ring-blue-500 border-slate-300 rounded cursor-pointer" />
{/* Week Start */}
); }