'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import { Plus, X, Folder, Briefcase, FileText, Zap, BarChart3, Globe, Sparkles, Book, Heart, Crown, Music, Building2 } from 'lucide-react' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Input } from '@/components/ui/input' import { cn } from '@/lib/utils' import { useLanguage } from '@/lib/i18n' const NOTEBOOK_ICONS = [ { icon: Folder, name: 'folder' }, { icon: Briefcase, name: 'briefcase' }, { icon: FileText, name: 'document' }, { icon: Zap, name: 'lightning' }, { icon: BarChart3, name: 'chart' }, { icon: Globe, name: 'globe' }, { icon: Sparkles, name: 'sparkle' }, { icon: Book, name: 'book' }, { icon: Heart, name: 'heart' }, { icon: Crown, name: 'crown' }, { icon: Music, name: 'music' }, { icon: Building2, name: 'building' }, ] const NOTEBOOK_COLORS = [ { name: 'Blue', value: '#3B82F6', bg: 'bg-blue-500' }, { name: 'Purple', value: '#8B5CF6', bg: 'bg-purple-500' }, { name: 'Red', value: '#EF4444', bg: 'bg-red-500' }, { name: 'Orange', value: '#F59E0B', bg: 'bg-orange-500' }, { name: 'Green', value: '#10B981', bg: 'bg-green-500' }, { name: 'Teal', value: '#14B8A6', bg: 'bg-teal-500' }, { name: 'Gray', value: '#6B7280', bg: 'bg-gray-500' }, ] interface CreateNotebookDialogProps { open?: boolean onOpenChange?: (open: boolean) => void } export function CreateNotebookDialog({ open, onOpenChange }: CreateNotebookDialogProps) { const router = useRouter() const { t } = useLanguage() const [name, setName] = useState('') const [selectedIcon, setSelectedIcon] = useState('folder') const [selectedColor, setSelectedColor] = useState('#3B82F6') const [isSubmitting, setIsSubmitting] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!name.trim()) return setIsSubmitting(true) try { const response = await fetch('/api/notebooks', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: name.trim(), icon: selectedIcon, color: selectedColor, }), }) if (response.ok) { // Close dialog and reload onOpenChange?.(false) window.location.reload() } else { const error = await response.json() console.error('Failed to create notebook:', error) } } catch (error) { console.error('Failed to create notebook:', error) } finally { setIsSubmitting(false) } } const handleReset = () => { setName('') setSelectedIcon('folder') setSelectedColor('#3B82F6') } const SelectedIconComponent = NOTEBOOK_ICONS.find(i => i.name === selectedIcon)?.icon || Folder return ( { onOpenChange?.(val) if (!val) handleReset() }}> {t('notebook.createNew')} {t('notebook.createDescription')}
{/* Notebook Name */}
setName(e.target.value)} placeholder="e.g. Q4 Marketing Strategy" className="w-full" autoFocus />
{/* Icon Selection */}
{NOTEBOOK_ICONS.map((item) => { const IconComponent = item.icon const isSelected = selectedIcon === item.name return ( ) })}
{/* Color Selection */}
{NOTEBOOK_COLORS.map((color) => { const isSelected = selectedColor === color.value return (
{/* Preview */} {name.trim() && (
{name.trim()}
)}
{/* Action Buttons */}
) }