mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-05-22 02:22:11 +00:00
refactor: use strict
This commit is contained in:
parent
ed34415980
commit
c460a1edf7
4 changed files with 19 additions and 18 deletions
|
|
@ -9,8 +9,8 @@ import styles from './styles.less';
|
||||||
type Props = {
|
type Props = {
|
||||||
children: JSX.Element,
|
children: JSX.Element,
|
||||||
className: string,
|
className: string,
|
||||||
shortcut: string,
|
shortcut?: string,
|
||||||
position: MenuPosition,
|
position?: MenuPosition,
|
||||||
};
|
};
|
||||||
|
|
||||||
const createId = () => (Math.random() + 1).toString(36).substring(7);
|
const createId = () => (Math.random() + 1).toString(36).substring(7);
|
||||||
|
|
@ -27,22 +27,23 @@ const Menu = ({ children, className, shortcut, position }: Props) => {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const parent = element.current?.parentElement;
|
const parent = element.current?.parentElement;
|
||||||
parent.addEventListener('click', onToggle);
|
if (parent) {
|
||||||
|
parent.addEventListener('click', onToggle);
|
||||||
menu.create({
|
menu.create({
|
||||||
id: id.current,
|
id: id.current,
|
||||||
className,
|
className,
|
||||||
parent,
|
parent,
|
||||||
position,
|
position,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
parent.removeEventListener('click', onToggle);
|
parent && parent.removeEventListener('click', onToggle);
|
||||||
menu.remove(id.current);
|
menu.remove(id.current);
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useKeyboardEvent(shortcut, onToggle, !shortcut);
|
shortcut && useKeyboardEvent(shortcut, onToggle, !shortcut);
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
<div ref={element} className={styles['menu-placeholder']} />
|
<div ref={element} className={styles['menu-placeholder']} />
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ const MenuProvider = ({ children, className }: Props) => {
|
||||||
const container = useRef<HTMLDivElement>(null);
|
const container = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
const [menus, setMenus] = useState<Menu[]>([]);
|
const [menus, setMenus] = useState<Menu[]>([]);
|
||||||
const [style, setStyle] = useState<React.CSSProperties>(null);
|
const [style, setStyle] = useState<React.CSSProperties>({});
|
||||||
|
|
||||||
const active = useMemo(() => menus.find(({ open }) => open), [menus]);
|
const active = useMemo(() => menus.find(({ open }) => open), [menus]);
|
||||||
|
|
||||||
|
|
@ -36,7 +36,7 @@ const MenuProvider = ({ children, className }: Props) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const render = (content: JSX.Element) => {
|
const render = (content: JSX.Element) => {
|
||||||
return createPortal(content, container.current);
|
return container.current && createPortal(content, container.current);
|
||||||
};
|
};
|
||||||
|
|
||||||
const toggle = (id: string) => {
|
const toggle = (id: string) => {
|
||||||
|
|
@ -54,7 +54,7 @@ const MenuProvider = ({ children, className }: Props) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
setStyle(null);
|
setStyle({});
|
||||||
|
|
||||||
if (container.current && active) {
|
if (container.current && active) {
|
||||||
const menu = container.current.getBoundingClientRect();
|
const menu = container.current.getBoundingClientRect();
|
||||||
|
|
@ -71,7 +71,7 @@ const MenuProvider = ({ children, className }: Props) => {
|
||||||
}, [active]);
|
}, [active]);
|
||||||
|
|
||||||
useKeyboardEvent('Escape', closeAll);
|
useKeyboardEvent('Escape', closeAll);
|
||||||
useOnClickOutside([container.current, active?.parent], closeAll);
|
useOnClickOutside(container.current && active?.parent ? [container.current, active.parent] : [], closeAll);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MenuContext.Provider value={{ active, create, remove, render, toggle }}>
|
<MenuContext.Provider value={{ active, create, remove, render, toggle }}>
|
||||||
|
|
|
||||||
2
src/common/Menu/types.d.ts
vendored
2
src/common/Menu/types.d.ts
vendored
|
|
@ -4,6 +4,6 @@ export type Menu = {
|
||||||
id: string,
|
id: string,
|
||||||
className: string,
|
className: string,
|
||||||
parent: HTMLElement,
|
parent: HTMLElement,
|
||||||
position: MenuPosition,
|
position?: MenuPosition,
|
||||||
open: boolean,
|
open: boolean,
|
||||||
};
|
};
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"checkJs": false,
|
"checkJs": false,
|
||||||
"noEmit": false,
|
"noEmit": false,
|
||||||
"strict": false
|
"strict": true
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"./src",
|
"./src",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue