mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fix(post menu): use floating ui to dynamically position dropdowns based on available space
This commit is contained in:
@@ -31,16 +31,23 @@ const CopyLinkButton = ({ cid, subplebbitAddress, onClose }: PostMenuProps) => {
|
|||||||
|
|
||||||
const ImageSearchButton = ({ url, onClose }: { url: string; onClose: () => void }) => {
|
const ImageSearchButton = ({ url, onClose }: { url: string; onClose: () => void }) => {
|
||||||
const [isImageSearchMenuOpen, setIsImageSearchMenuOpen] = useState(false);
|
const [isImageSearchMenuOpen, setIsImageSearchMenuOpen] = useState(false);
|
||||||
|
|
||||||
|
const { refs, floatingStyles } = useFloating({
|
||||||
|
placement: 'right-start',
|
||||||
|
middleware: [flip(), shift({ padding: 10 })],
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={`${styles.postMenuItem} ${styles.dropdown}`}
|
className={`${styles.postMenuItem} ${styles.dropdown}`}
|
||||||
onMouseOver={() => setIsImageSearchMenuOpen(true)}
|
onMouseOver={() => setIsImageSearchMenuOpen(true)}
|
||||||
onMouseLeave={() => setIsImageSearchMenuOpen(false)}
|
onMouseLeave={() => setIsImageSearchMenuOpen(false)}
|
||||||
|
ref={refs.setReference}
|
||||||
onClick={onClose}
|
onClick={onClose}
|
||||||
>
|
>
|
||||||
Image search »
|
Image search »
|
||||||
{isImageSearchMenuOpen && (
|
{isImageSearchMenuOpen && (
|
||||||
<div className={styles.dropdownMenu}>
|
<div ref={refs.setFloating} style={floatingStyles} className={styles.dropdownMenu}>
|
||||||
<a href={`https://lens.google.com/uploadbyurl?url=${url}`} target='_blank' rel='noreferrer'>
|
<a href={`https://lens.google.com/uploadbyurl?url=${url}`} target='_blank' rel='noreferrer'>
|
||||||
<div className={styles.postMenuItem}>Google</div>
|
<div className={styles.postMenuItem}>Google</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -59,16 +66,23 @@ const ImageSearchButton = ({ url, onClose }: { url: string; onClose: () => void
|
|||||||
const ViewOnButton = ({ cid, isDescription, isRules, subplebbitAddress, onClose }: PostMenuProps) => {
|
const ViewOnButton = ({ cid, isDescription, isRules, subplebbitAddress, onClose }: PostMenuProps) => {
|
||||||
const [isClientRedirectMenuOpen, setIsClientRedirectMenuOpen] = useState(false);
|
const [isClientRedirectMenuOpen, setIsClientRedirectMenuOpen] = useState(false);
|
||||||
const viewOnOtherClientLink = `p/${subplebbitAddress}${isDescription || isRules ? '' : `/c/${cid}`}`;
|
const viewOnOtherClientLink = `p/${subplebbitAddress}${isDescription || isRules ? '' : `/c/${cid}`}`;
|
||||||
|
|
||||||
|
const { refs, floatingStyles } = useFloating({
|
||||||
|
placement: 'right-start',
|
||||||
|
middleware: [flip(), shift({ padding: 10 })],
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={`${styles.postMenuItem} ${styles.dropdown}`}
|
className={`${styles.postMenuItem} ${styles.dropdown}`}
|
||||||
onMouseOver={() => setIsClientRedirectMenuOpen(true)}
|
onMouseOver={() => setIsClientRedirectMenuOpen(true)}
|
||||||
onMouseLeave={() => setIsClientRedirectMenuOpen(false)}
|
onMouseLeave={() => setIsClientRedirectMenuOpen(false)}
|
||||||
|
ref={refs.setReference}
|
||||||
onClick={onClose}
|
onClick={onClose}
|
||||||
>
|
>
|
||||||
View on »
|
View on »
|
||||||
{isClientRedirectMenuOpen && (
|
{isClientRedirectMenuOpen && (
|
||||||
<div className={styles.dropdownMenu}>
|
<div ref={refs.setFloating} style={floatingStyles} className={styles.dropdownMenu}>
|
||||||
<a href={`https://seedit.app/#/${viewOnOtherClientLink}`} target='_blank' rel='noreferrer'>
|
<a href={`https://seedit.app/#/${viewOnOtherClientLink}`} target='_blank' rel='noreferrer'>
|
||||||
<div className={styles.postMenuItem}>Seedit</div>
|
<div className={styles.postMenuItem}>Seedit</div>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
Reference in New Issue
Block a user