'use client' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { toast } from 'sonner' import { Loader2, Settings } from 'lucide-react' import { trpc } from '@/lib/trpc/client' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' const COMMON_TIMEZONES = [ { value: 'Europe/Monaco', label: 'Monaco (CET/CEST)' }, { value: 'Europe/Paris', label: 'Paris (CET/CEST)' }, { value: 'Europe/London', label: 'London (GMT/BST)' }, { value: 'America/New_York', label: 'New York (EST/EDT)' }, { value: 'America/Los_Angeles', label: 'Los Angeles (PST/PDT)' }, { value: 'Asia/Tokyo', label: 'Tokyo (JST)' }, { value: 'Asia/Singapore', label: 'Singapore (SGT)' }, { value: 'Australia/Sydney', label: 'Sydney (AEST/AEDT)' }, { value: 'UTC', label: 'UTC' }, ] const formSchema = z.object({ default_timezone: z.string().min(1, 'Timezone is required'), default_page_size: z.string().regex(/^\d+$/, 'Must be a number'), autosave_interval_seconds: z.string().regex(/^\d+$/, 'Must be a number'), }) type FormValues = z.infer interface DefaultsSettingsFormProps { settings: { default_timezone?: string default_page_size?: string autosave_interval_seconds?: string } } export function DefaultsSettingsForm({ settings }: DefaultsSettingsFormProps) { const utils = trpc.useUtils() const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { default_timezone: settings.default_timezone || 'Europe/Monaco', default_page_size: settings.default_page_size || '20', autosave_interval_seconds: settings.autosave_interval_seconds || '30', }, }) const updateSettings = trpc.settings.updateMultiple.useMutation({ onSuccess: () => { toast.success('Default settings saved successfully') utils.settings.getByCategory.invalidate({ category: 'DEFAULTS' }) }, onError: (error) => { toast.error(`Failed to save settings: ${error.message}`) }, }) const onSubmit = (data: FormValues) => { updateSettings.mutate({ settings: [ { key: 'default_timezone', value: data.default_timezone }, { key: 'default_page_size', value: data.default_page_size }, { key: 'autosave_interval_seconds', value: data.autosave_interval_seconds }, ], }) } return (
( Default Timezone Timezone used for displaying dates and deadlines across the platform )} /> ( Default Page Size Default number of items shown in lists and tables )} /> ( Autosave Interval (seconds) How often evaluation forms are automatically saved while editing. Lower values provide better data protection but increase server load. Recommended: 30 seconds. )} /> ) }