From 015ed5e7eb40110a67ee376e359f48d629315f70 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun <cheeaun@gmail.com> Date: Thu, 4 Apr 2024 17:03:30 +0800 Subject: [PATCH] Further expand usage of SubMenu2 --- src/components/account-info.jsx | 9 +++++---- src/components/menu-confirm.jsx | 21 +++------------------ src/components/nav-menu.jsx | 31 ++----------------------------- src/components/shortcuts.jsx | 7 ++++--- src/components/submenu2.jsx | 25 +++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 54 deletions(-) create mode 100644 src/components/submenu2.jsx diff --git a/src/components/account-info.jsx b/src/components/account-info.jsx index 1f6cc824..fd911f41 100644 --- a/src/components/account-info.jsx +++ b/src/components/account-info.jsx @@ -1,6 +1,6 @@ import './account-info.css'; -import { Menu, MenuDivider, MenuItem, SubMenu } from '@szhsin/react-menu'; +import { MenuDivider, MenuItem } from '@szhsin/react-menu'; import { useCallback, useEffect, @@ -11,7 +11,6 @@ import { } from 'preact/hooks'; import punycode from 'punycode'; -import MenuLink from '../components/menu-link'; import { api } from '../utils/api'; import enhanceContent from '../utils/enhance-content'; import getHTMLText from '../utils/getHTMLText'; @@ -34,7 +33,9 @@ import ListAddEdit from './list-add-edit'; import Loader from './loader'; import Menu2 from './menu2'; import MenuConfirm from './menu-confirm'; +import MenuLink from './menu-link'; import Modal from './modal'; +import SubMenu2 from './submenu2'; import TranslationBlock from './translation-block'; const MUTE_DURATIONS = [ @@ -1284,7 +1285,7 @@ function RelatedActions({ <span>Unmute @{username}</span> </MenuItem> ) : ( - <SubMenu + <SubMenu2 menuClassName="menu-blur" openTrigger="clickOnly" direction="bottom" @@ -1338,7 +1339,7 @@ function RelatedActions({ </MenuItem> ))} </div> - </SubMenu> + </SubMenu2> )} {followedBy && ( <MenuConfirm diff --git a/src/components/menu-confirm.jsx b/src/components/menu-confirm.jsx index b2bb18d5..f1df396f 100644 --- a/src/components/menu-confirm.jsx +++ b/src/components/menu-confirm.jsx @@ -1,8 +1,8 @@ -import { MenuItem, SubMenu } from '@szhsin/react-menu'; +import { MenuItem } from '@szhsin/react-menu'; import { cloneElement } from 'preact'; -import { useRef } from 'preact/hooks'; import Menu2 from './menu2'; +import SubMenu2 from './submenu2'; function MenuConfirm({ subMenu = false, @@ -23,11 +23,9 @@ function MenuConfirm({ } return children; } - const Parent = subMenu ? SubMenu : Menu2; - const menuRef = useRef(); + const Parent = subMenu ? SubMenu2 : Menu2; return ( <Parent - instanceRef={menuRef} openTrigger="clickOnly" direction="bottom" overflow="auto" @@ -37,19 +35,6 @@ function MenuConfirm({ {...restProps} menuButton={subMenu ? undefined : children} label={subMenu ? children : undefined} - // Test fix for bug; submenus not opening on Android - itemProps={{ - onPointerMove: (e) => { - if (e.pointerType === 'touch') { - menuRef.current?.openMenu?.(); - } - }, - onPointerLeave: (e) => { - if (e.pointerType === 'touch') { - menuRef.current?.openMenu?.(); - } - }, - }} > <MenuItem className={menuItemClassName} onClick={onClick}> {confirmLabel} diff --git a/src/components/nav-menu.jsx b/src/components/nav-menu.jsx index e5659838..2b622feb 100644 --- a/src/components/nav-menu.jsx +++ b/src/components/nav-menu.jsx @@ -1,11 +1,6 @@ import './nav-menu.css'; -import { - ControlledMenu, - MenuDivider, - MenuItem, - SubMenu, -} from '@szhsin/react-menu'; +import { ControlledMenu, MenuDivider, MenuItem } from '@szhsin/react-menu'; import { memo } from 'preact/compat'; import { useEffect, useMemo, useRef, useState } from 'preact/hooks'; import { useLongPress } from 'use-long-press'; @@ -20,6 +15,7 @@ import store from '../utils/store'; import Avatar from './avatar'; import Icon from './icon'; import MenuLink from './menu-link'; +import SubMenu2 from './submenu2'; function NavMenu(props) { const snapStates = useSnapshot(states); @@ -371,27 +367,4 @@ function NavMenu(props) { ); } -function SubMenu2(props) { - const menuRef = useRef(); - return ( - <SubMenu - {...props} - instanceRef={menuRef} - // Test fix for bug; submenus not opening on Android - itemProps={{ - onPointerMove: (e) => { - if (e.pointerType === 'touch') { - menuRef.current?.openMenu?.(); - } - }, - onPointerLeave: (e) => { - if (e.pointerType === 'touch') { - menuRef.current?.openMenu?.(); - } - }, - }} - /> - ); -} - export default memo(NavMenu); diff --git a/src/components/shortcuts.jsx b/src/components/shortcuts.jsx index c4645c7b..ddbe9cd3 100644 --- a/src/components/shortcuts.jsx +++ b/src/components/shortcuts.jsx @@ -1,6 +1,6 @@ import './shortcuts.css'; -import { MenuDivider, SubMenu } from '@szhsin/react-menu'; +import { MenuDivider } from '@szhsin/react-menu'; import { memo } from 'preact/compat'; import { useRef, useState } from 'preact/hooks'; import { useHotkeys } from 'react-hotkeys-hook'; @@ -17,6 +17,7 @@ import Icon from './icon'; import Link from './link'; import Menu2 from './menu2'; import MenuLink from './menu-link'; +import SubMenu2 from './submenu2'; function Shortcuts() { const { instance } = api(); @@ -182,7 +183,7 @@ function Shortcuts() { {formattedShortcuts.map(({ id, path, title, subtitle, icon }, i) => { if (id === 'lists') { return ( - <SubMenu + <SubMenu2 menuClassName="glass-menu" overflow="auto" gap={-8} @@ -205,7 +206,7 @@ function Shortcuts() { <span>{list.title}</span> </MenuLink> ))} - </SubMenu> + </SubMenu2> ); } diff --git a/src/components/submenu2.jsx b/src/components/submenu2.jsx new file mode 100644 index 00000000..25f16385 --- /dev/null +++ b/src/components/submenu2.jsx @@ -0,0 +1,25 @@ +import { SubMenu } from '@szhsin/react-menu'; +import { useRef } from 'preact/hooks'; + +export default function SubMenu2(props) { + const menuRef = useRef(); + return ( + <SubMenu + {...props} + instanceRef={menuRef} + // Test fix for bug; submenus not opening on Android + itemProps={{ + onPointerMove: (e) => { + if (e.pointerType === 'touch') { + menuRef.current?.openMenu?.(); + } + }, + onPointerLeave: (e) => { + if (e.pointerType === 'touch') { + menuRef.current?.openMenu?.(); + } + }, + }} + /> + ); +}