'use client' import { trpc } from '@/lib/trpc/client' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Skeleton } from '@/components/ui/skeleton' import { Bot, Palette, Mail, HardDrive, Shield, Settings as SettingsIcon, } from 'lucide-react' import { AISettingsForm } from './ai-settings-form' import { BrandingSettingsForm } from './branding-settings-form' import { EmailSettingsForm } from './email-settings-form' import { StorageSettingsForm } from './storage-settings-form' import { SecuritySettingsForm } from './security-settings-form' import { DefaultsSettingsForm } from './defaults-settings-form' function SettingsSkeleton() { return (
{[...Array(4)].map((_, i) => ( ))}
) } interface SettingsContentProps { initialSettings: Record } export function SettingsContent({ initialSettings }: SettingsContentProps) { // We use the initial settings passed from the server // Forms will refetch on mutation success // Helper to get settings by prefix const getSettingsByKeys = (keys: string[]) => { const result: Record = {} keys.forEach((key) => { if (initialSettings[key] !== undefined) { result[key] = initialSettings[key] } }) return result } const aiSettings = getSettingsByKeys([ 'ai_enabled', 'ai_provider', 'ai_model', 'ai_send_descriptions', 'openai_api_key', ]) const brandingSettings = getSettingsByKeys([ 'platform_name', 'primary_color', 'secondary_color', 'accent_color', ]) const emailSettings = getSettingsByKeys([ 'smtp_host', 'smtp_port', 'smtp_user', 'smtp_password', 'email_from', ]) const storageSettings = getSettingsByKeys([ 'max_file_size_mb', 'allowed_file_types', ]) const securitySettings = getSettingsByKeys([ 'session_duration_hours', 'magic_link_expiry_minutes', 'rate_limit_requests_per_minute', ]) const defaultsSettings = getSettingsByKeys([ 'default_timezone', 'default_page_size', 'autosave_interval_seconds', ]) return ( AI Branding Email Storage Security Defaults AI Configuration Configure AI-powered features like smart jury assignment Platform Branding Customize the look and feel of your platform Email Configuration Configure email settings for notifications and magic links File Storage Configure file upload limits and allowed types Security Settings Configure security and access control settings Default Settings Configure default values for the platform ) } export { SettingsSkeleton }