From a6316367325fe036490aa2484385e21de787f50f Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 21 Jan 2023 13:17:47 -0600 Subject: [PATCH] Allow selecting an emoji from the picker --- .../ui/emoji-selector/emoji-selector.tsx | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/app/soapbox/components/ui/emoji-selector/emoji-selector.tsx b/app/soapbox/components/ui/emoji-selector/emoji-selector.tsx index caaea79ee..a8b740cd2 100644 --- a/app/soapbox/components/ui/emoji-selector/emoji-selector.tsx +++ b/app/soapbox/components/ui/emoji-selector/emoji-selector.tsx @@ -1,7 +1,8 @@ import classNames from 'clsx'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; -import { Emoji, HStack } from 'soapbox/components/ui'; +import { Emoji, HStack, IconButton } from 'soapbox/components/ui'; +import { Picker } from 'soapbox/features/emoji/emoji-picker'; interface IEmojiButton { /** Unicode emoji character. */ @@ -32,10 +33,19 @@ interface IEmojiSelector { visible?: boolean, /** Whether the selector should be focused. */ focused?: boolean, + /** Whether to allow any emoji to be chosen. */ + all?: boolean, } /** Panel with a row of emoji buttons. */ -const EmojiSelector: React.FC = ({ emojis, onReact, visible = false, focused = false }): JSX.Element => { +const EmojiSelector: React.FC = ({ + emojis, + onReact, + visible = false, + focused = false, + all = true, +}): JSX.Element => { + const [expanded, setExpanded] = useState(false); const handleReact = (emoji: string): React.EventHandler => { return (e) => { @@ -45,6 +55,18 @@ const EmojiSelector: React.FC = ({ emojis, onReact, visible = fa }; }; + const handleExpand: React.MouseEventHandler = () => { + setExpanded(true); + }; + + useEffect(() => { + setExpanded(false); + }, [visible, focused]); + + if (expanded) { + return ; + } + return ( = ({ emojis, onReact, visible = fa tabIndex={(visible || focused) ? 0 : -1} /> ))} + + {all && ( + + )} ); };