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 'primeicons/primeicons.css'; import { Tooltip } from 'primereact/tooltip'; import 'primereact/resources/primereact.min.css'; import MarkdownEditor from '@/components/markdown/MarkdownEditor'; 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 (
); }; export default EditDraftDocumentForm;