import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { Divider } from 'components/divider'; import { Fab } from 'components/fab'; import { Row } from 'components/layout'; import { Visible } from 'components/visible'; import { useResponsiveLayout } from 'hooks'; import { At, Attach, MicroPhone, PaperPlan, SmilingOutline, Text, VideoCameraOutline } from 'icons'; import { CLEAR_EDITOR_COMMAND, EditorState } from 'lexical'; import { FC, useCallback, useEffect, useState } from 'react'; import { RichTextVariant } from '../Types'; export const BottomAction: FC = ({ variant, onSendMessage }) => { const [editor] = useLexicalComposerContext(); const { isMobile } = useResponsiveLayout(); const [isMessage, setIsMessage] = useState(false); const isSmall = variant === 'comment' || isMobile; const handleSendMessage = useCallback(() => { onSendMessage(editor.getEditorState()); editor.dispatchCommand(CLEAR_EDITOR_COMMAND, undefined); editor.focus(); }, [editor, onSendMessage]); const colorVariant = isMessage ? 'primary' : 'base-02'; const iconColor = isMessage ? 'white' : 'body'; const onPressSend = isMessage ? handleSendMessage : undefined; const hoverColor = isMessage ? 'primary-hover' : 'base-02-hover'; const attachActions = [ { id: 1, icon: , }, ]; const mediaActions = [ { id: 1, icon: , }, { id: 2, icon: , }, ]; const atActions = [ { id: 1, icon: , }, { id: 2, icon: , }, ]; useEffect(() => { const removeTextContentListener = editor.registerTextContentListener((textContent) => { if (textContent) { if (!isMessage) { setIsMessage(true); } } else { if (isMessage) { setIsMessage(false); } } }); return () => { removeTextContentListener(); }; }, [editor, isMessage]); return ( {attachActions.map((action) => ( {}} variant="plain" shapeVariant="round" sizeVariant="small" colorVariant="transparent" hoverColorVariant="base-02" centerElement={action.icon} /> ))} {mediaActions.map((action) => ( {}} variant="plain" shapeVariant="round" sizeVariant="small" colorVariant="transparent" hoverColorVariant="base-02" centerElement={action.icon} /> ))} {atActions.map((action) => ( {}} variant="plain" shapeVariant="round" sizeVariant="small" colorVariant="transparent" hoverColorVariant="base-02" centerElement={action.icon} /> ))} {}} variant="plain" shapeVariant="round" sizeVariant="small" colorVariant="transparent" centerElement={} /> } /> ); }; export interface BottomActionProps { variant: RichTextVariant; onSendMessage: (editorState: EditorState) => void; }