import type { Bookmark, Tag } from "@markone/core" import { useId, useRef } from "react" import { useBookmarkTags, useUpdateBookmark } from "~/bookmark/api" import { Button } from "~/components/button" import { Dialog, DialogActionRow, DialogBody, DialogTitle } from "~/components/dialog" import { FormField } from "~/components/form-field" import { LoadingSpinner } from "~/components/loading-spinner" import { Message, MessageVariant } from "~/components/message.tsx" import { TagsInput, type TagsInputRef } from "~/components/tags-input" import { useBookmarkPageStore } from "../-store" function EditBookmarkDialog({ bookmark }: { bookmark: Bookmark }) { const closeDialog = useBookmarkPageStore((state) => state.closeDialog) const { data: tags, status } = useBookmarkTags(bookmark) const editFormId = useId() function content() { switch (status) { case "pending": return (

Loading

) case "success": return case "error": return null } } return ( EDIT BOOKMARK {content()} ) } function EditForm({ formId, bookmark, tags }: { formId: string; bookmark: Bookmark; tags: Tag[] }) { const tagsInputRef = useRef(null) const updateBookmarkMutation = useUpdateBookmark(bookmark) const closeDialog = useBookmarkPageStore((state) => state.closeDialog) async function onSubmit(event: React.FormEvent) { if (tagsInputRef.current) { event.preventDefault() const form = new FormData(event.currentTarget) const title = form.get("title") const tags = tagsInputRef.current.tags if (title && typeof title === "string") { try { await updateBookmarkMutation.mutateAsync({ title, tags, }) closeDialog() } catch {} } } } function message() { switch (updateBookmarkMutation.status) { case "pending": return (

Saving changes

) case "error": return Error updating the bookmark! default: return null } } return ( <> {message()}
tag.name).join(" ")} /> ) } export { EditBookmarkDialog }