import { useEffect, useRef, useState } from 'react'; import { BaseEditor } from '@kevisual/codemirror/editor/editor.ts'; import { Box, Drawer } from '@mui/material'; import { useShallow } from 'zustand/shallow'; import { useContainerStore } from '../store'; import { Tooltip } from '@mui/material'; import { IconButton } from '@kevisual/components/button/index.tsx'; import { LeftOutlined, SaveOutlined } from '@ant-design/icons'; export const DrawEdit = () => { const editorElRef = useRef(null); const editorRef = useRef(null); const containerStore = useContainerStore( useShallow((state) => { return { openDrawEdit: state.openDrawEdit, setOpenDrawEdit: state.setOpenDrawEdit, data: state.data, updateData: state.updateData, }; }), ); const { openDrawEdit, setOpenDrawEdit } = containerStore; const [mount, setMount] = useState(false); useEffect(() => { if (openDrawEdit && editorElRef.current && !mount) { editorRef.current = new BaseEditor(); editorRef.current.createEditor(editorElRef.current); setMount(true); } return () => { if (editorRef.current) { editorRef.current.destroyEditor(); } }; }, [openDrawEdit]); useEffect(() => { if (openDrawEdit && containerStore.data?.id && mount) { const editor = editorRef.current; const formData = containerStore.data; const fileType = editor?.getFileType(formData.title); const language = editor?.language; if (fileType && fileType !== language) { editor?.setLanguage(fileType, editorElRef.current!); } else { editor?.resetEditor(editorElRef.current!); } editor?.setContent(formData.code || ''); } }, [openDrawEdit, containerStore.data?.id, mount]); return (
{ setOpenDrawEdit(false); }}> { const code = editorRef.current?.getContent(); containerStore.updateData({ id: containerStore.data.id, code }, { refresh: false }); }}>
{containerStore.data?.title}
); }; export default DrawEdit;