PluginProbe ʕ •ᴥ•ʔ
Presto Player / 2.2.2
Presto Player v2.2.2
4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / ui / Menu.js
presto-player / src / admin / ui Last commit date
Menu.js 2 years ago Pagination.js 5 years ago StatCard.js 4 years ago Table.js 4 years ago
Menu.js
131 lines
1 /**
2 * External dependencies
3 */
4 import classnames from "classnames";
5
6 /**
7 * WordPress dependencies
8 */
9 import { __ } from "@wordpress/i18n";
10 import { useState, useEffect } from "@wordpress/element";
11
12 import { partial, noop, find } from "lodash";
13
14 /**
15 * WordPress components
16 */
17 import { NavigableMenu, Animate } from "@wordpress/components";
18
19 export default ({
20 className,
21 children,
22 items,
23 title,
24 orientation = "horizontal",
25 activeClass = "is-active",
26 onSelect = noop,
27 }) => {
28 const [selected, setSelected] = useState(null);
29 const [origin, setOrigin] = useState("left");
30
31 const handleClick = (itemKey) => {
32 setSelected(itemKey);
33 onSelect && onSelect(itemKey);
34 };
35
36 const onNavigate = (childIndex, child) => {
37 child.click();
38 };
39
40 const selectedTab = find(items, { name: selected });
41 const selectedId = `${selectedTab?.name ?? "none"}`;
42
43 useEffect(() => {
44 setOrigin(selected ? "right" : "left");
45 }, [selected]);
46
47 return (
48 <div className={className}>
49 <Animate type="slide-in" origin={!!selectedTab ? "right" : "left"}>
50 {({ className }) =>
51 !selectedTab ? (
52 <div className={classnames(className, "is-from-right")}>
53 {!!title && <h2>{title}</h2>}
54 <NavigableMenu
55 role="itemlist"
56 orientation={orientation}
57 onNavigate={onNavigate}
58 className={classnames("presto-player__menu-items")}
59 >
60 {items.map((item) => (
61 <div
62 className={classnames(
63 "presto-player__menu-item",
64 item.className,
65 {
66 [activeClass]: item.name === selected,
67 }
68 )}
69 itemId={`${item.name}`}
70 aria-controls={`${item.name}-view`}
71 selected={item.name === selected}
72 key={item.name}
73 onClick={partial(handleClick, item.name)}
74 >
75 {!!item.icon && (
76 <div class="presto-player__menu-icon">{item.icon}</div>
77 )}
78 {item.title}
79 <svg
80 className="submenu-icon"
81 xmlns="http://www.w3.org/2000/svg"
82 viewBox="0 0 24 24"
83 width="24"
84 height="24"
85 role="img"
86 ariaHidden="true"
87 focusable="false"
88 >
89 <path d="M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"></path>
90 </svg>
91 </div>
92 ))}
93 </NavigableMenu>
94 </div>
95 ) : (
96 <div
97 key={selectedId}
98 aria-labelledby={selectedId}
99 role="itempanel"
100 id={`${selectedId}-view`}
101 className={classnames(className, "presto-player__menu-content")}
102 >
103 <div className="presto-player__menu-items">
104 <div
105 className="presto-player__menu-item is-back-button"
106 onClick={() => handleClick("")}
107 >
108 <svg
109 class="back-icon"
110 xmlns="http://www.w3.org/2000/svg"
111 viewBox="0 0 24 24"
112 width="24"
113 height="24"
114 role="img"
115 aria-hidden="true"
116 focusable="false"
117 >
118 <path d="M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"></path>
119 </svg>
120 {__("Back", "presto-player")}
121 </div>
122 </div>
123 {children(selectedTab)}
124 </div>
125 )
126 }
127 </Animate>
128 </div>
129 );
130 };
131