import { useState, useEffect } from "react"; import { X, Folder, Star, Heart, Bookmark, Lightbulb, Zap, Coffee, Music, Camera, Code, Globe, Lock, Flag, Tag, Box, Archive, FileText, Image, Video, Mail, Phone, MapPin, Calendar, Clock, Search, Settings, User, Users, Home, Briefcase, ShoppingBag, Gift, Award, Target, TrendingUp, BarChart, PieChart, Activity, Cpu, Database, Cloud, Sun, Moon, Flame, Leaf, Droplet, Snowflake, } from "lucide-react"; import { createCollection, updateCollection } from "../api/client"; const EMOJI_OPTIONS = [ "📁", "📚", "💡", "⭐", "🔖", "💻", "🎨", "📝", "🔬", "🎯", "🚀", "💎", "🌟", "📌", "💼", "🎮", "🎵", "🎬", "❤️", "🔥", "🌈", "🌸", "🌿", "🧠", "🏆", "📊", "🎓", "✨", "🔧", "⚡", ]; const ICON_OPTIONS = [ { icon: Folder, name: "folder" }, { icon: Star, name: "star" }, { icon: Heart, name: "heart" }, { icon: Bookmark, name: "bookmark" }, { icon: Lightbulb, name: "lightbulb" }, { icon: Zap, name: "zap" }, { icon: Coffee, name: "coffee" }, { icon: Music, name: "music" }, { icon: Camera, name: "camera" }, { icon: Code, name: "code" }, { icon: Globe, name: "globe" }, { icon: Flag, name: "flag" }, { icon: Tag, name: "tag" }, { icon: Box, name: "box" }, { icon: Archive, name: "archive" }, { icon: FileText, name: "file" }, { icon: Image, name: "image" }, { icon: Video, name: "video" }, { icon: Mail, name: "mail" }, { icon: MapPin, name: "pin" }, { icon: Calendar, name: "calendar" }, { icon: Clock, name: "clock" }, { icon: Search, name: "search" }, { icon: Settings, name: "settings" }, { icon: User, name: "user" }, { icon: Users, name: "users" }, { icon: Home, name: "home" }, { icon: Briefcase, name: "briefcase" }, { icon: Gift, name: "gift" }, { icon: Award, name: "award" }, { icon: Target, name: "target" }, { icon: TrendingUp, name: "trending" }, { icon: Activity, name: "activity" }, { icon: Cpu, name: "cpu" }, { icon: Database, name: "database" }, { icon: Cloud, name: "cloud" }, { icon: Sun, name: "sun" }, { icon: Moon, name: "moon" }, { icon: Flame, name: "flame" }, { icon: Leaf, name: "leaf" }, ]; export default function CollectionModal({ isOpen, onClose, onSuccess, collectionToEdit, }) { const [name, setName] = useState(""); const [description, setDescription] = useState(""); const [icon, setIcon] = useState(""); const [customEmoji, setCustomEmoji] = useState(""); const [activeTab, setActiveTab] = useState("emoji"); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (collectionToEdit) { setName(collectionToEdit.name); setDescription(collectionToEdit.description || ""); const savedIcon = collectionToEdit.icon || ""; setIcon(savedIcon); setCustomEmoji(savedIcon); if (savedIcon.startsWith("icon:")) { setActiveTab("icons"); } } else { setName(""); setDescription(""); setIcon(""); setCustomEmoji(""); } setError(null); }, [collectionToEdit, isOpen]); if (!isOpen) return null; const handleEmojiSelect = (emoji) => { if (icon === emoji) { setIcon(""); setCustomEmoji(""); } else { setIcon(emoji); setCustomEmoji(emoji); } }; const handleIconSelect = (iconName) => { const value = `icon:${iconName}`; if (icon === value) { setIcon(""); setCustomEmoji(""); } else { setIcon(value); setCustomEmoji(value); } }; const handleCustomEmojiChange = (e) => { const value = e.target.value; setCustomEmoji(value); const emojiMatch = value.match( /(\p{Emoji_Presentation}|\p{Emoji}\uFE0F)/gu, ); if (emojiMatch && emojiMatch.length > 0) { setIcon(emojiMatch[emojiMatch.length - 1]); } else if (value === "") { setIcon(""); } }; const handleSubmit = async (e) => { e.preventDefault(); setLoading(true); setError(null); try { if (collectionToEdit) { await updateCollection(collectionToEdit.uri, name, description, icon); } else { await createCollection(name, description, icon); } onSuccess(); onClose(); } catch (err) { console.error(err); setError(err.message || "Failed to save collection"); } finally { setLoading(false); } }; return (