import React, { useState, useEffect, useCallback } from "react"; import axios from "axios"; import { InputText } from "primereact/inputtext"; import { InputTextarea } from "primereact/inputtextarea"; import { InputNumber } from "primereact/inputnumber"; import { InputSwitch } from "primereact/inputswitch"; import GenericButton from "@/components/buttons/GenericButton"; import { useRouter } from "next/router"; import { useSession } from "next-auth/react"; import { useToast } from "@/hooks/useToast"; import dynamic from 'next/dynamic'; import { Tooltip } from 'primereact/tooltip'; const MDEditor = dynamic(() => import("@uiw/react-md-editor"), { ssr: false }); const EditDraftDocumentForm = ({ draft }) => { const [title, setTitle] = useState(draft?.title || ''); const [summary, setSummary] = useState(draft?.summary || ''); const [isPaidResource, setIsPaidResource] = useState(draft?.price ? true : false); const [price, setPrice] = useState(draft?.price || 0); const [coverImage, setCoverImage] = useState(draft?.image || ''); const [topics, setTopics] = useState(draft?.topics || ['']); const [content, setContent] = useState(draft?.content || ''); const [user, setUser] = useState(null); const [additionalLinks, setAdditionalLinks] = useState(draft?.additionalLinks || ['']); const { data: session } = useSession(); const { showToast } = useToast(); const router = useRouter(); useEffect(() => { if (session) { setUser(session.user); } }, [session]); const handleContentChange = useCallback((value) => { setContent(value || ''); }, []); const handleSubmit = async (e) => { e.preventDefault(); try { const userResponse = await axios.get(`/api/users/${user.pubkey}`); if (!userResponse.data) { showToast('error', 'Error', 'User not found', 'Please try again.'); return; } const payload = { title, summary, type: 'document', price: isPaidResource ? price : null, content, image: coverImage, topics: [...new Set([...topics.map(topic => topic.trim().toLowerCase()), 'document'])], additionalLinks: additionalLinks.filter(link => link.trim() !== '') }; const response = await axios.put(`/api/drafts/${draft.id}`, payload); if (response.status === 200) { showToast('success', 'Success', 'Document updated successfully.'); if (response.data?.id) { router.push(`/draft/${response.data.id}`); } } } catch (error) { console.error(error); showToast('error', 'Error', 'Failed to update document. Please try again.'); } }; const handleTopicChange = (index, value) => { const updatedTopics = topics.map((topic, i) => i === index ? value : topic); setTopics(updatedTopics); }; const addTopic = (e) => { e.preventDefault(); setTopics([...topics, '']); }; const removeTopic = (e, index) => { e.preventDefault(); const updatedTopics = topics.filter((_, i) => i !== index); setTopics(updatedTopics); }; const handleLinkChange = (index, value) => { const updatedLinks = additionalLinks.map((link, i) => i === index ? value : link); setAdditionalLinks(updatedLinks); }; const addLink = (e) => { e.preventDefault(); setAdditionalLinks([...additionalLinks, '']); }; const removeLink = (e, index) => { e.preventDefault(); const updatedLinks = additionalLinks.filter((_, i) => i !== index); setAdditionalLinks(updatedLinks); }; return (
setTitle(e.target.value)} placeholder="Title" />
setSummary(e.target.value)} placeholder="Summary" rows={5} cols={30} />

Paid Document

setIsPaidResource(e.value)} /> {isPaidResource && (
setPrice(e.value)} placeholder="Price (sats)" />
)}
setCoverImage(e.target.value)} placeholder="Cover Image URL" />
Content
External Links {additionalLinks.map((link, index) => (
handleLinkChange(index, e.target.value)} placeholder="https://example.com" className="w-full mt-2" /> {index > 0 && ( removeLink(e, index)} /> )}
))}
{topics.map((topic, index) => (
handleTopicChange(index, e.target.value)} placeholder="Topic" className="w-full mt-2" /> {index > 0 && ( removeTopic(e, index)} /> )}
))}
); }; export default EditDraftDocumentForm;