PluginProbe
ElasticPress / 4.2.1
ElasticPress v4.2.1
5.3.5 5.3.4 3.6.5 3.6.6 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.7.0 4.7.1 4.7.2 5.0.0 5.0.1 5.0.2 All 108 releases
elasticpress / assets / js / instant-results / components / common / panel.js

panel.js in ElasticPress 4.2.1, at assets/js/instant-results/components/common/panel.js

45 lines 1.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * WordPress dependencies.
3 */
4 import { useState, WPElement } from '@wordpress/element';
5 import { chevronDown, chevronUp, Icon } from '@wordpress/icons';
6
7 /**
8 * Facet wrapper component.
9 *
10 * @param {object} props Component props.
11 * @param {WPElement} props.children Component children.
12 * @param {boolean} props.defaultIsOpen Whether the panel is open by default.
13 * @param {string} props.label Facet label.
14 * @returns {WPElement} Component element.
15 */
16 export default ({ children, defaultIsOpen, label }) => {
17 const [isOpen, setIsOpen] = useState(defaultIsOpen);
18
19 /**
20 * Handle click event on the header.
21 */
22 const onClick = () => {
23 setIsOpen(!isOpen);
24 };
25
26 return (
27 <div className="ep-search-panel">
28 <h3 className="ep-search-panel__heading">
29 <button
30 aria-expanded={isOpen}
31 className="ep-search-panel__button ep-search-reset-button ep-search-icon-button"
32 onClick={onClick}
33 type="button"
34 >
35 {label}
36 <Icon icon={isOpen ? chevronUp : chevronDown} />
37 </button>
38 </h3>
39 <div aria-hidden={!isOpen} className="ep-search-panel__content">
40 {children(isOpen)}
41 </div>
42 </div>
43 );
44 };
45