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 (
)
}
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()}
>
)
}
export { EditBookmarkDialog }