import React, { useState, useEffect } from "react"; import { X, Loader2 } from "lucide-react"; import CollectionIcon from "../common/CollectionIcon"; import { ICON_MAP } from "../common/iconMap"; import EmojiPicker, { Theme } from "emoji-picker-react"; import { updateCollection, type Collection } from "../../api/client"; import { useStore } from "@nanostores/react"; import { $theme } from "../../store/theme"; interface EditCollectionModalProps { isOpen: boolean; onClose: () => void; collection: Collection; onUpdate: (updatedCollection: Collection) => void; } export default function EditCollectionModal({ isOpen, onClose, collection, onUpdate, }: EditCollectionModalProps) { const [name, setName] = useState(collection.name); const [description, setDescription] = useState(collection.description || ""); const initialIsIcon = collection.icon?.startsWith("icon:") ?? false; const initialIconValue = collection.icon?.replace("icon:", "") || ""; const [activeTab, setActiveTab] = useState<"icon" | "emoji">( initialIsIcon || !collection.icon ? "icon" : "emoji", ); const [icon, setIcon] = useState(initialIconValue); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const theme = useStore($theme); useEffect(() => { if (isOpen) { setName(collection.name); setDescription(collection.description || ""); const isIcon = collection.icon?.startsWith("icon:") ?? false; setActiveTab(isIcon || !collection.icon ? "icon" : "emoji"); setIcon(collection.icon?.replace("icon:", "") || ""); setError(null); document.body.style.overflow = "hidden"; } return () => { document.body.style.overflow = "unset"; }; }, [isOpen, collection]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!name.trim()) return; try { setLoading(true); setError(null); const iconValue = icon ? ICON_MAP[icon] ? `icon:${icon}` : icon : undefined; const updated = await updateCollection( collection.uri, name.trim(), description.trim() || undefined, iconValue, ); if (updated) { onUpdate(updated); onClose(); } else { setError("Failed to update collection"); } } catch (err) { console.error(err); setError("An error occurred while updating"); } finally { setLoading(false); } }; if (!isOpen) return null; return (
e.stopPropagation()} >

Edit Collection

setName(e.target.value)} placeholder="My Collection" autoFocus />