diff --git a/desktop/src/lib/editor.ts b/desktop/src/lib/editor.ts index dc07e20f..390e8e93 100644 --- a/desktop/src/lib/editor.ts +++ b/desktop/src/lib/editor.ts @@ -386,3 +386,40 @@ const applyBlockContentMarksChangesToYDoc = ( blockContentMap.set('marks', blockContent.marks); } }; + +export const editorHasContent = (block?: JSONContent) => { + if (!block) { + return false; + } + + if (block.text && block.text?.length > 0) { + return true; + } + + if (block.type === 'file' && block.attrs?.fileId) { + return true; + } + + if (block.type === 'upload' && block.attrs?.uploadId) { + return true; + } + + if (block.type === 'gif' && block.attrs?.gifId) { + return true; + } + + if (block.type === 'emoji' && block.attrs?.emoji) { + return true; + } + + if (block.content && block.content?.length > 0) { + for (let i = 0; i < block.content.length; i += 1) { + const innerBlock = block.content[i]; + if (editorHasContent(innerBlock)) { + return true; + } + } + } + + return false; +}; diff --git a/desktop/src/renderer/components/messages/message-create.tsx b/desktop/src/renderer/components/messages/message-create.tsx index d3f77f05..2d1d83a7 100644 --- a/desktop/src/renderer/components/messages/message-create.tsx +++ b/desktop/src/renderer/components/messages/message-create.tsx @@ -7,6 +7,7 @@ import { useMutation } from '@/renderer/hooks/use-mutation'; import { useWorkspace } from '@/renderer/contexts/workspace'; import { MessageNode } from '@/types/messages'; import { CircleX } from 'lucide-react'; +import { editorHasContent } from '@/lib/editor'; interface MessageCreateProps { conversationId: string; @@ -23,6 +24,7 @@ export const MessageCreate = React.forwardRef< const workspace = useWorkspace(); const { mutate, isPending } = useMutation(); + const [hasContent, setHasContent] = React.useState(false); const messageEditorRef = React.useRef(null); const [replyTo, setReplyTo] = React.useState(null); @@ -57,7 +59,14 @@ export const MessageCreate = React.forwardRef< { + setHasContent(editorHasContent(content)); + }} onSubmit={(content) => { + if (!editorHasContent(content)) { + return; + } + const messageContent = content; if (replyTo) { messageContent.content.unshift({ @@ -86,7 +95,7 @@ export const MessageCreate = React.forwardRef< }} loading={isPending} canEdit={true} - canSubmit={true} + canSubmit={hasContent} />
diff --git a/desktop/src/renderer/components/messages/message-editor.tsx b/desktop/src/renderer/components/messages/message-editor.tsx index 39c160cd..9c12f4b5 100644 --- a/desktop/src/renderer/components/messages/message-editor.tsx +++ b/desktop/src/renderer/components/messages/message-editor.tsx @@ -2,7 +2,6 @@ import React from 'react'; import type { JSONContent } from '@tiptap/core'; import { EditorContent, useEditor } from '@tiptap/react'; import isHotkey from 'is-hotkey'; -import { MessageGifPicker } from '@/renderer/components/messages/message-gif-picker'; import { DropdownMenu, DropdownMenuContent, @@ -164,15 +163,6 @@ export const MessageEditor = React.forwardRef< />
- {/* { - console.log(emoji); - }} - /> */} - - {props.loading ? ( ) : (