import React, { useEffect, useState, useCallback } from "react"; import logo_light from "../assets/logo_light_46.png"; import logo_dark from "../assets/logo_dark_46.png"; import { Banner, Button, Input, Upload, Toast } from "@douyinfe/semi-ui"; import { IconSun, IconMoon, IconGithubLogo, IconPaperclip, } from "@douyinfe/semi-icons"; import RichEditor from "../components/rich_editor"; import { LexicalComposer } from "@lexical/react/LexicalComposer"; import { editorConfig } from "../data/editor_config"; import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"; import { $generateHtmlFromNodes } from "@lexical/html"; import axios from "axios"; function Form({ theme }) { const [editor] = useLexicalComposerContext(); const [data, setData] = useState({ title: "", attachments: [], }); const onFileChange = (fileList) => { const attachments = []; const processFile = (index) => { const reader = new FileReader(); reader.onload = (event) => { const dataUri = event.target.result; attachments.push({ path: dataUri, filename: fileList[index].name }); }; reader.readAsDataURL(fileList[index].fileInstance); }; fileList.forEach((_, i) => processFile(i)); setData((prev) => ({ ...prev, attachments: attachments, })); }; const onSubmit = useCallback( (e) => { editor.update(() => { const sendMail = async () => { await axios .post(`${process.env.REACT_APP_BACKEND_URL}/report_bug`, { subject: data.title, message: $generateHtmlFromNodes(editor), attachments: data.attachments, }) .then((res) => Toast.success("Bug reported!")) .catch((err) => Toast.error("Oops! Something went wrong.")); }; sendMail(); }); }, [editor, data] ); return (