diff --git a/app/soapbox/components/status_action_bar.js b/app/soapbox/components/status_action_bar.js index 367ae7b04..fc85da343 100644 --- a/app/soapbox/components/status_action_bar.js +++ b/app/soapbox/components/status_action_bar.js @@ -19,7 +19,7 @@ import SoapboxPropTypes from 'soapbox/utils/soapbox_prop_types'; import { openModal } from '../actions/modals'; -import { IconButton, Text } from './ui'; +import { IconButton, Text, Hoverable } from './ui'; const messages = defineMessages({ @@ -547,7 +547,6 @@ class StatusActionBar extends ImmutablePureComponent { render() { const { status, intl, allowedEmoji, emojiSelectorFocused, handleEmojiSelectorUnfocus, features, me } = this.props; - const { emojiSelectorVisible } = this.state; const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); @@ -664,18 +663,17 @@ class StatusActionBar extends ImmutablePureComponent { {reblogCount !== 0 && {reblogCount}} -
+ )} > - {emojiReactCount} ) )} -
+ {shareButton} diff --git a/app/soapbox/components/ui/hoverable/hoverable.tsx b/app/soapbox/components/ui/hoverable/hoverable.tsx new file mode 100644 index 000000000..cca3cd6df --- /dev/null +++ b/app/soapbox/components/ui/hoverable/hoverable.tsx @@ -0,0 +1,49 @@ +import Portal from '@reach/portal'; +import React, { useState, useRef } from 'react'; + +interface IHoverable { + component: React.Component, +} + +/** Wrapper to render a given component when hovered */ +const Hoverable: React.FC = ({ + component, + children, +}): JSX.Element => { + + const [portalActive, setPortalActive] = useState(false); + const ref = useRef(null); + + const handleMouseEnter = () => { + setPortalActive(true); + }; + + const handleMouseLeave = () => { + setPortalActive(false); + }; + + const setPortalPosition = (): React.CSSProperties => { + if (!ref.current) return {}; + + const { top, height, left, width } = ref.current.getBoundingClientRect(); + + return { + top: top + height, + left, + width, + }; + }; + + return ( +
+ {children} + {portalActive &&
{component}
} +
+ ); +}; + +export default Hoverable; diff --git a/app/soapbox/components/ui/index.ts b/app/soapbox/components/ui/index.ts index fa60595f5..3aa272def 100644 --- a/app/soapbox/components/ui/index.ts +++ b/app/soapbox/components/ui/index.ts @@ -7,6 +7,7 @@ export { default as EmojiSelector } from './emoji-selector/emoji-selector'; export { default as Form } from './form/form'; export { default as FormActions } from './form-actions/form-actions'; export { default as FormGroup } from './form-group/form-group'; +export { default as Hoverable } from './hoverable/hoverable'; export { default as HStack } from './hstack/hstack'; export { default as Icon } from './icon/icon'; export { default as IconButton } from './icon-button/icon-button';