import React, { useState, useCallback, useEffect, FC, useRef } from "react"; import { Fade, Flex, useColorModeValue } from "@chakra-ui/react"; import data from "@emoji-mart/data"; import { PublicKey } from "@solana/web3.js"; import { useErrorHandler } from "@strata-foundation/react"; import { MessageType } from "@strata-foundation/chat"; import { BrowserView, MobileView } from "react-device-detect"; import { useEmojis } from "../contexts/emojis"; import { useSendMessage } from "../contexts/sendMessage"; export const EmojiPicker: FC = (props) => { const pickerRef = useRef(); const moduleRef = useRef(); const handleDivRef = (divEl: any) => { pickerRef.current = divEl; if (!moduleRef.current) { moduleRef.current = import("emoji-mart").then( (m) => new m.Picker({ ...props, ref: pickerRef, data, } as any) ); } }; useEffect(() => { if (pickerRef.current && pickerRef.current.firstChild) { if (props.noBoxShadow) { pickerRef.current.firstChild.style.boxShadow = "none"; } if (props.autoFocus) { pickerRef.current.firstChild.shadowRoot .querySelector('input[type="search"]') ?.focus(); } } }, [props]); return
; }; interface IEmojiPickerPopover { chatKey: PublicKey | undefined; } export const EmojiPickerPopover: FC = ({ chatKey }) => { const [emoji, setEmoji] = useState(); const { referenceMessageId, hidePicker } = useEmojis(); const rgbBackground = useColorModeValue("243 244 246", "32 41 55"); const rgbColor = useColorModeValue("white", "black"); const rgbInput = useColorModeValue("255 255 255", "56 63 75"); const colorBorder = useColorModeValue("#e4e7eb", ""); const { handleErrors } = useErrorHandler(); const { sendMessage, error } = useSendMessage(); handleErrors(error); const reset = useCallback(() => { setEmoji(undefined); hidePicker(); }, [hidePicker, setEmoji]); const preventClickBehavior = (e: any) => { e.preventDefault(); e.stopPropagation(); }; useEffect(() => { if (emoji) { sendMessage({ message: { type: MessageType.React, emoji: emoji.native, referenceMessageId, }, }); reset(); } }, [emoji, referenceMessageId, reset, sendMessage]); return ( <> {/* @ts-ignore */} {/* @ts-ignore */} ); };