Further expand usage of SubMenu2
This commit is contained in:
parent
2ad9706304
commit
015ed5e7eb
5 changed files with 39 additions and 54 deletions
|
@ -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
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
25
src/components/submenu2.jsx
Normal file
25
src/components/submenu2.jsx
Normal 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?.();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue