"use client" import { memo, useState } from "react" import type { Editor } from "@tiptap/react" import type { ExcalidrawImperativeAPI } from "@excalidraw/excalidraw/types" import { Shapes } from "lucide-react" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { cn } from "@/lib/utils" import { DocsExcalidrawEditor, docsExcalidrawEditorKey, useDocsExcalidrawSave, } from "@/components/drive/richtext/docs-excalidraw-editor" import { DOCS_GRAPHIC_DRAW_EVENT, notifyDocsGraphicDrawSaved, openDocsGraphicDrawModal, readSelectedGraphicAttrs, } from "@/lib/drive/docs-graphic-draw-bridge" import { DOCS_GRAPHIC_DRAW_DIALOG_CONTENT, DOCS_GRAPHIC_DRAW_DIALOG_OVERLAY, } from "@/lib/drive/drive-dialog-styles" export { openDocsGraphicDrawModal, DOCS_GRAPHIC_DRAW_EVENT } function DocsGraphicDrawModalInner({ open, editor, onClose, }: { open: boolean editor: Editor | null onClose: () => void }) { const [api, setApi] = useState(null) const { exportDrawing, saving } = useDocsExcalidrawSave(api) const selectedAttrs = open ? readSelectedGraphicAttrs(editor) : null const drawScene = selectedAttrs?.drawScene ?? null const editorKey = docsExcalidrawEditorKey(drawScene) const handleValidate = async () => { const payload = await exportDrawing() if (!payload || !editor) return editor .chain() .focus() .updateDocsGraphic({ graphicType: "draw", drawScene: payload.drawScene, src: payload.src, width: payload.width, height: payload.height, lockAspectRatio: true, }) .run() notifyDocsGraphicDrawSaved() handleClose() } const handleClose = () => { setApi(null) onClose() } return ( !next && handleClose()}> Modifier le dessin Éditeur vectoriel pour créer et modifier un dessin dans le document.
{open ? ( ) : null}
) } export const DocsGraphicDrawModal = memo(DocsGraphicDrawModalInner)