import React, { useMemo, useRef } from 'react'; import ReactQuill from 'react-quill'; import 'react-quill/dist/quill.snow.css'; import { api } from '@/lib/api'; interface QuillWrapperProps { value: string; onChange: (value: string) => void; placeholder?: string; } const QuillWrapper: React.FC = ({ value, onChange, placeholder }) => { const quillRef = useRef(null); const imageHandler = () => { const input = document.createElement('input'); input.setAttribute('type', 'file'); input.setAttribute('accept', 'image/*'); input.click(); input.onchange = async () => { const file = input.files ? input.files[0] : null; if (file) { const formData = new FormData(); formData.append('file', file); try { const res = await api.post('/api/upload', formData, { headers: { 'Content-Type': 'multipart/form-data', }, }); if (res.url) { const quill = quillRef.current?.getEditor(); if (quill) { const range = quill.getSelection(true); quill.insertEmbed(range?.index || 0, 'image', res.url); } } else { alert('Upload failed: ' + (res.message || 'Unknown error')); } } catch (error) { console.error('Upload error:', error); alert('Upload failed'); } } }; }; const modules = useMemo( () => ({ toolbar: { container: [ [{ header: [1, 2, 3, false] }], ['bold', 'italic', 'underline', 'strike'], [{ list: 'ordered' }, { list: 'bullet' }], ['link', 'image'], ['clean'], ], handlers: { image: imageHandler, }, }, }), [] ); return ( ); }; export default QuillWrapper;