'use client' import * as React from 'react' import { Plus, Check } from 'lucide-react' import { toast } from 'sonner' import { Button } from '@/components/ui/button' import { AwesomeIcon } from '@/components/ui/awesome-icon' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { usePersonalListStore, type PersonalListItem } from '@/lib/personal-list-store' import { cn } from '@/lib/utils' interface PushToListButtonProps { title: string description: string url: string repository?: string variant?: 'default' | 'ghost' | 'outline' size?: 'default' | 'sm' | 'lg' | 'icon' className?: string showLabel?: boolean onPush?: () => void } const DEFAULT_CATEGORIES = [ 'Development', 'Design', 'Tools', 'Resources', 'Libraries', 'Frameworks', 'Documentation', 'Learning', 'Inspiration', 'Other', ] export function PushToListButton({ title: initialTitle, description: initialDescription, url, repository, variant = 'outline', size = 'default', className, showLabel = true, onPush, }: PushToListButtonProps) { const { addItem, openEditor, items } = usePersonalListStore() const [isDialogOpen, setIsDialogOpen] = React.useState(false) const [isAdded, setIsAdded] = React.useState(false) const [formData, setFormData] = React.useState({ title: initialTitle, description: initialDescription, url, repository: repository || '', category: 'Development', tags: '', }) // Check if item is already added React.useEffect(() => { const alreadyAdded = items.some((item) => item.url === url) setIsAdded(alreadyAdded) }, [items, url]) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() const tags = formData.tags .split(',') .map((tag) => tag.trim()) .filter(Boolean) addItem({ title: formData.title, description: formData.description, url: formData.url, repository: formData.repository || undefined, category: formData.category, tags: tags.length > 0 ? tags : undefined, }) setIsDialogOpen(false) setIsAdded(true) toast.success(