/* Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; import React, { useContext } from "react"; import { _t } from "../../../languageHandler"; import ContextMenu, { aboveLeftOf, MenuProps, useContextMenu } from "../../structures/ContextMenu"; import EmojiPicker from "../emojipicker/EmojiPicker"; import { CollapsibleButton } from "./CollapsibleButton"; import { OverflowMenuContext } from "./MessageComposerButtons"; interface IEmojiButtonProps { addEmoji: (unicode: string) => boolean; menuPosition?: MenuProps; className?: string; } export function EmojiButton({ addEmoji, menuPosition, className }: IEmojiButtonProps): JSX.Element { const overflowMenuCloser = useContext(OverflowMenuContext); const [menuDisplayed, button, openMenu, closeMenu] = useContextMenu(); let contextMenu: React.ReactElement | null = null; if (menuDisplayed && button.current) { const position = menuPosition ?? aboveLeftOf(button.current.getBoundingClientRect()); const onFinished = (): void => { closeMenu(); overflowMenuCloser?.(); }; contextMenu = ( ); } const computedClassName = classNames("mx_EmojiButton", className, { mx_EmojiButton_highlight: menuDisplayed, }); // TODO: replace ContextMenuTooltipButton with a unified representation of // the header buttons and the right panel buttons return ( <> {contextMenu} ); }