import { createSignal, onMount } from 'solid-js'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { TagPicker } from '@/components/ui/TagPicker'; import { ModalPortal } from '@/components/ui/ModalPortal'; import { IconX } from '@tabler/icons-solidjs'; interface Bookmark { id: number; title: string; url: string; description?: string; tags: string[]; } interface EditBookmarkModalProps { isOpen: boolean; onClose: () => void; onSubmit: (bookmark: Partial) => void; bookmark: Bookmark | null; availableTags?: string[]; } export const EditBookmarkModal = (props: EditBookmarkModalProps) => { const [editBookmark, setEditBookmark] = createSignal({ title: '', url: '', description: '' }); const [tags, setTags] = createSignal([]); const defaultTags = ['reading', 'article', 'dev', 'tutorial', 'docs', 'tool', 'video', 'personal', 'work']; const availableTags = () => (props.availableTags && props.availableTags.length > 0 ? props.availableTags : defaultTags); // Update form when bookmark changes onMount(() => { if (props.bookmark) { setEditBookmark({ title: props.bookmark.title, url: props.bookmark.url, description: props.bookmark.description || '' }); setTags(props.bookmark.tags || []); } }); // Update form when bookmark prop changes const updateForm = () => { if (props.bookmark) { setEditBookmark({ title: props.bookmark.title, url: props.bookmark.url, description: props.bookmark.description || '' }); setTags(props.bookmark.tags || []); } }; // Call updateForm when bookmark changes if (props.bookmark) { updateForm(); } const handleSubmit = () => { const bookmark = { title: editBookmark().title || editBookmark().url, url: editBookmark().url, description: editBookmark().description, tags: tags() }; props.onSubmit(bookmark); }; return ( <> {/* Backdrop */} {props.isOpen && (
)} {/* Modal */}
{/* Header */}

Edit Bookmark

{/* Content */}
{ const target = e.currentTarget as HTMLInputElement; if (target) setEditBookmark(prev => ({ ...prev, url: target.value })); }} required /> { const target = e.currentTarget as HTMLInputElement; if (target) setEditBookmark(prev => ({ ...prev, title: target.value })); }} /> { const target = e.currentTarget as HTMLInputElement; if (target) setEditBookmark(prev => ({ ...prev, description: target.value })); }} />
setTags(next)} placeholder="Add tags..." allowNew={true} />
{/* Footer */}
); };