Further expand usage of SubMenu2

This commit is contained in:
Lim Chee Aun 2024-04-04 17:03:30 +08:00
parent 2ad9706304
commit 015ed5e7eb
5 changed files with 39 additions and 54 deletions

View file

@ -1,6 +1,6 @@
import './account-info.css'; import './account-info.css';
import { Menu, MenuDivider, MenuItem, SubMenu } from '@szhsin/react-menu'; import { MenuDivider, MenuItem } from '@szhsin/react-menu';
import { import {
useCallback, useCallback,
useEffect, useEffect,
@ -11,7 +11,6 @@ import {
} from 'preact/hooks'; } from 'preact/hooks';
import punycode from 'punycode'; import punycode from 'punycode';
import MenuLink from '../components/menu-link';
import { api } from '../utils/api'; import { api } from '../utils/api';
import enhanceContent from '../utils/enhance-content'; import enhanceContent from '../utils/enhance-content';
import getHTMLText from '../utils/getHTMLText'; import getHTMLText from '../utils/getHTMLText';
@ -34,7 +33,9 @@ import ListAddEdit from './list-add-edit';
import Loader from './loader'; import Loader from './loader';
import Menu2 from './menu2'; import Menu2 from './menu2';
import MenuConfirm from './menu-confirm'; import MenuConfirm from './menu-confirm';
import MenuLink from './menu-link';
import Modal from './modal'; import Modal from './modal';
import SubMenu2 from './submenu2';
import TranslationBlock from './translation-block'; import TranslationBlock from './translation-block';
const MUTE_DURATIONS = [ const MUTE_DURATIONS = [
@ -1284,7 +1285,7 @@ function RelatedActions({
<span>Unmute @{username}</span> <span>Unmute @{username}</span>
</MenuItem> </MenuItem>
) : ( ) : (
<SubMenu <SubMenu2
menuClassName="menu-blur" menuClassName="menu-blur"
openTrigger="clickOnly" openTrigger="clickOnly"
direction="bottom" direction="bottom"
@ -1338,7 +1339,7 @@ function RelatedActions({
</MenuItem> </MenuItem>
))} ))}
</div> </div>
</SubMenu> </SubMenu2>
)} )}
{followedBy && ( {followedBy && (
<MenuConfirm <MenuConfirm

View file

@ -1,8 +1,8 @@
import { MenuItem, SubMenu } from '@szhsin/react-menu'; import { MenuItem } from '@szhsin/react-menu';
import { cloneElement } from 'preact'; import { cloneElement } from 'preact';
import { useRef } from 'preact/hooks';
import Menu2 from './menu2'; import Menu2 from './menu2';
import SubMenu2 from './submenu2';
function MenuConfirm({ function MenuConfirm({
subMenu = false, subMenu = false,
@ -23,11 +23,9 @@ function MenuConfirm({
} }
return children; return children;
} }
const Parent = subMenu ? SubMenu : Menu2; const Parent = subMenu ? SubMenu2 : Menu2;
const menuRef = useRef();
return ( return (
<Parent <Parent
instanceRef={menuRef}
openTrigger="clickOnly" openTrigger="clickOnly"
direction="bottom" direction="bottom"
overflow="auto" overflow="auto"
@ -37,19 +35,6 @@ function MenuConfirm({
{...restProps} {...restProps}
menuButton={subMenu ? undefined : children} menuButton={subMenu ? undefined : children}
label={subMenu ? children : undefined} 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}> <MenuItem className={menuItemClassName} onClick={onClick}>
{confirmLabel} {confirmLabel}

View file

@ -1,11 +1,6 @@
import './nav-menu.css'; import './nav-menu.css';
import { import { ControlledMenu, MenuDivider, MenuItem } from '@szhsin/react-menu';
ControlledMenu,
MenuDivider,
MenuItem,
SubMenu,
} from '@szhsin/react-menu';
import { memo } from 'preact/compat'; import { memo } from 'preact/compat';
import { useEffect, useMemo, useRef, useState } from 'preact/hooks'; import { useEffect, useMemo, useRef, useState } from 'preact/hooks';
import { useLongPress } from 'use-long-press'; import { useLongPress } from 'use-long-press';
@ -20,6 +15,7 @@ import store from '../utils/store';
import Avatar from './avatar'; import Avatar from './avatar';
import Icon from './icon'; import Icon from './icon';
import MenuLink from './menu-link'; import MenuLink from './menu-link';
import SubMenu2 from './submenu2';
function NavMenu(props) { function NavMenu(props) {
const snapStates = useSnapshot(states); 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); export default memo(NavMenu);

View file

@ -1,6 +1,6 @@
import './shortcuts.css'; import './shortcuts.css';
import { MenuDivider, SubMenu } from '@szhsin/react-menu'; import { MenuDivider } from '@szhsin/react-menu';
import { memo } from 'preact/compat'; import { memo } from 'preact/compat';
import { useRef, useState } from 'preact/hooks'; import { useRef, useState } from 'preact/hooks';
import { useHotkeys } from 'react-hotkeys-hook'; import { useHotkeys } from 'react-hotkeys-hook';
@ -17,6 +17,7 @@ import Icon from './icon';
import Link from './link'; import Link from './link';
import Menu2 from './menu2'; import Menu2 from './menu2';
import MenuLink from './menu-link'; import MenuLink from './menu-link';
import SubMenu2 from './submenu2';
function Shortcuts() { function Shortcuts() {
const { instance } = api(); const { instance } = api();
@ -182,7 +183,7 @@ function Shortcuts() {
{formattedShortcuts.map(({ id, path, title, subtitle, icon }, i) => { {formattedShortcuts.map(({ id, path, title, subtitle, icon }, i) => {
if (id === 'lists') { if (id === 'lists') {
return ( return (
<SubMenu <SubMenu2
menuClassName="glass-menu" menuClassName="glass-menu"
overflow="auto" overflow="auto"
gap={-8} gap={-8}
@ -205,7 +206,7 @@ function Shortcuts() {
<span>{list.title}</span> <span>{list.title}</span>
</MenuLink> </MenuLink>
))} ))}
</SubMenu> </SubMenu2>
); );
} }

View file

@ -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?.();
}
},
}}
/>
);
}