// ======================================== // Settings Page // ======================================== // Application settings and configuration with CLI tools management import { useState, useEffect } from 'react'; import { Settings, Moon, Sun, Globe, Bell, Shield, Cpu, RefreshCw, Save, RotateCcw, Check, X, Loader2, ChevronDown, ChevronUp, } from 'lucide-react'; import { Card } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Badge } from '@/components/ui/Badge'; import { useTheme, useConfig } from '@/hooks'; import { useConfigStore, selectCliTools, selectDefaultCliTool, selectUserPreferences } from '@/stores/configStore'; import type { CliToolConfig, UserPreferences } from '@/types/store'; import { cn } from '@/lib/utils'; // ========== CLI Tool Card Component ========== interface CliToolCardProps { toolId: string; config: CliToolConfig; isDefault: boolean; isExpanded: boolean; onToggleExpand: () => void; onToggleEnabled: () => void; onSetDefault: () => void; onUpdateModel: (field: 'primaryModel' | 'secondaryModel', value: string) => void; } function CliToolCard({ toolId, config, isDefault, isExpanded, onToggleExpand, onToggleEnabled, onSetDefault, onUpdateModel, }: CliToolCardProps) { return ( {/* Header */}
{toolId} {isDefault && ( Default )} {config.type}

{config.primaryModel}

{isExpanded ? ( ) : ( )}
{/* Tags */} {config.tags && config.tags.length > 0 && (
{config.tags.map((tag) => ( {tag} ))}
)}
{/* Expanded Content */} {isExpanded && (
onUpdateModel('primaryModel', e.target.value)} className="mt-1" />
onUpdateModel('secondaryModel', e.target.value)} className="mt-1" />
{!isDefault && config.enabled && ( )}
)}
); } // ========== Main Page Component ========== export function SettingsPage() { const { theme, setTheme } = useTheme(); const cliTools = useConfigStore(selectCliTools); const defaultCliTool = useConfigStore(selectDefaultCliTool); const userPreferences = useConfigStore(selectUserPreferences); const { updateCliTool, setDefaultCliTool, setUserPreferences, resetUserPreferences } = useConfigStore(); const [expandedTools, setExpandedTools] = useState>(new Set()); const [isSaving, setIsSaving] = useState(false); const toggleToolExpand = (toolId: string) => { setExpandedTools((prev) => { const next = new Set(prev); if (next.has(toolId)) { next.delete(toolId); } else { next.add(toolId); } return next; }); }; const handleToggleToolEnabled = (toolId: string) => { updateCliTool(toolId, { enabled: !cliTools[toolId].enabled }); }; const handleSetDefaultTool = (toolId: string) => { setDefaultCliTool(toolId); }; const handleUpdateModel = (toolId: string, field: 'primaryModel' | 'secondaryModel', value: string) => { updateCliTool(toolId, { [field]: value }); }; const handlePreferenceChange = (key: keyof UserPreferences, value: unknown) => { setUserPreferences({ [key]: value }); }; return (
{/* Page Header */}

Settings

Configure your dashboard preferences and CLI tools

{/* Appearance Settings */}

Appearance

Theme

Choose your preferred color theme

Compact View

Use a more compact layout for lists

{/* CLI Tools Configuration */}

CLI Tools

Configure available CLI tools and their models. Default tool: {defaultCliTool}

{Object.entries(cliTools).map(([toolId, config]) => ( toggleToolExpand(toolId)} onToggleEnabled={() => handleToggleToolEnabled(toolId)} onSetDefault={() => handleSetDefaultTool(toolId)} onUpdateModel={(field, value) => handleUpdateModel(toolId, field, value)} /> ))}
{/* Data Refresh Settings */}

Data Refresh

Auto Refresh

Automatically refresh data periodically

{userPreferences.autoRefresh && (

Refresh Interval

How often to refresh data

{[15000, 30000, 60000, 120000].map((interval) => ( ))}
)}
{/* Notifications */}

Notifications

Enable Notifications

Show notifications for workflow events

Sound Effects

Play sound for notifications

{/* Display Settings */}

Display Settings

Show Completed Tasks

Display completed tasks in task lists

{/* Reset Settings */}

Reset Settings

Reset all user preferences to their default values. This cannot be undone.

); } export default SettingsPage;