/* * Copyright © 2024 Hexastack. All rights reserved. * * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). */ import EmojiConvertor from "emoji-js"; import React, { useEffect, useRef } from "react"; import emojiData from "../constants/emojiData"; import "./EmojiPicker.scss"; interface EmojiPickerProps { onBlur: (event: React.FocusEvent) => void; onSelect: (event: React.MouseEvent, emoji: string) => void; } const EmojiPicker: React.FC = ({ onBlur, onSelect }) => { const emojiConvertorRef = useRef(new EmojiConvertor()); const domNode = useRef(null); useEffect(() => { const elem = domNode.current; if (elem) { elem.style.opacity = "0"; window.requestAnimationFrame(() => { elem.style.transition = "opacity 350ms"; elem.style.opacity = "1"; }); elem.focus(); // @ts-expect-error ts error emojiConvertorRef.current.init_env(); } }, []); const emojiClicked = ( _event: React.MouseEvent, emoji: string, ) => { onSelect(_event, emoji); // setMessage(message + emoji); if (domNode.current) { domNode.current.blur(); } }; return (
{emojiData.map((category) => (
{category.name}
{category.emojis.map((emoji) => ( emojiClicked(event, emoji)} > {emoji} ))}
))}
); }; export default EmojiPicker;