diff --git a/app/soapbox/components/status-reaction-wrapper.tsx b/app/soapbox/components/status-reaction-wrapper.tsx index 224da7cda..b95d98375 100644 --- a/app/soapbox/components/status-reaction-wrapper.tsx +++ b/app/soapbox/components/status-reaction-wrapper.tsx @@ -112,6 +112,7 @@ const StatusReactionWrapper: React.FC = ({ statusId, chi referenceElement={referenceElement} onReact={handleReact} visible={visible} + onClose={() => setVisible(false)} /> )} diff --git a/app/soapbox/components/ui/emoji-selector/emoji-selector.tsx b/app/soapbox/components/ui/emoji-selector/emoji-selector.tsx index f74803aee..961155cb3 100644 --- a/app/soapbox/components/ui/emoji-selector/emoji-selector.tsx +++ b/app/soapbox/components/ui/emoji-selector/emoji-selector.tsx @@ -3,10 +3,12 @@ import clsx from 'clsx'; import React, { useEffect, useState } from 'react'; import { usePopper } from 'react-popper'; -import { Emoji, HStack, IconButton } from 'soapbox/components/ui'; +import { Emoji as EmojiComponent, HStack, IconButton } from 'soapbox/components/ui'; import EmojiPickerDropdown from 'soapbox/features/emoji/components/emoji-picker-dropdown'; import { useSoapboxConfig } from 'soapbox/hooks'; +import type { Emoji, NativeEmoji } from 'soapbox/features/emoji'; + interface IEmojiButton { /** Unicode emoji character. */ emoji: string @@ -29,7 +31,7 @@ const EmojiButton: React.FC = ({ emoji, className, onClick, tabInd return ( ); }; @@ -61,7 +63,6 @@ const EmojiSelector: React.FC = ({ }): JSX.Element => { const soapboxConfig = useSoapboxConfig(); - const [expanded, setExpanded] = useState(false); // `useRef` won't trigger a re-render, while `useState` does. @@ -74,6 +75,8 @@ const EmojiSelector: React.FC = ({ } if (document.querySelector('em-emoji-picker')) { + event.preventDefault(); + event.stopPropagation(); return setExpanded(false); } @@ -98,6 +101,10 @@ const EmojiSelector: React.FC = ({ setExpanded(true); }; + const handlePickEmoji = (emoji: Emoji) => { + onReact((emoji as NativeEmoji).native); + }; + useEffect(() => () => { document.body.style.overflow = ''; }, []); @@ -112,7 +119,7 @@ const EmojiSelector: React.FC = ({ return () => { document.removeEventListener('mousedown', handleClickOutside); }; - }, [referenceElement]); + }, [referenceElement, popperElement]); useEffect(() => { if (visible && update) { @@ -142,6 +149,7 @@ const EmojiSelector: React.FC = ({ setVisible={setExpanded} update={update} withCustom={false} + onPickEmoji={handlePickEmoji} /> ) : ( { const search = (str: string, { maxResults = 5, custom }: searchOptions = {}, custom_emojis?: any): Emoji[] => { return index.search(str, maxResults) .flatMap((id: string) => { - console.log(id); if (id[0] === 'c') { const { shortcode, static_url } = custom_emojis.get((id as string).slice(1)).toJS();