'use client'; import { useEffect, useState } from 'react'; import { Plus, Trash2 } from 'lucide-react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; interface Domain { id: string; name: string; color: string; icon: string; sort_order: number; } export function SettingsDomains() { const [domains, setDomains] = useState([]); const [newDomainName, setNewDomainName] = useState(''); const [loading, setLoading] = useState(true); useEffect(() => { fetchDomains(); }, []); async function fetchDomains() { try { const response = await fetch('/api/domains?sort=sort_order'); if (response.ok) { const data = await response.json(); setDomains(data.items || []); } } catch (error) { console.error('Failed to fetch domains:', error); } finally { setLoading(false); } } async function addDomain() { if (!newDomainName.trim()) return; try { await fetch('/api/domains', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: newDomainName, color: '#3b82f6', icon: '📁', sort_order: domains.length, }), }); setNewDomainName(''); fetchDomains(); } catch (error) { console.error('Failed to add domain:', error); } } async function deleteDomain(id: string) { if (!confirm('Are you sure? This cannot be undone.')) return; try { await fetch(`/api/domains/${id}`, { method: 'DELETE' }); fetchDomains(); } catch (error) { console.error('Failed to delete domain:', error); } } return ( Domains Manage your workspace domains (e.g., Personal, Work, OTS). {/* Existing domains */}
{loading ? (

Loading domains...

) : ( domains.map((domain) => (
{domain.name}
)) )}
{/* Add new domain */}
setNewDomainName(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && addDomain()} />
); }