PluginProbe ʕ •ᴥ•ʔ
Starter Sites & Templates by Neve / trunk
Starter Sites & Templates by Neve vtrunk
1.4.0 1.3.0 1.2.29 1.2.28 1.2.6 1.2.7 1.2.8 1.2.9 trunk 1.0.10 1.0.11 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.27 1.1.28 1.1.29 1.1.3 1.1.30 1.1.31 1.1.32 1.1.33 1.1.34 1.1.35 1.1.36 1.1.37 1.1.38 1.1.39 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.3 1.2.4 1.2.5
templates-patterns-collection / assets / src / Components / CategorySelector.js
templates-patterns-collection / assets / src / Components Last commit date
CloudLibrary 1 year ago Settings 1 year ago StarterSites 3 years ago App.js 2 years ago Card.js 3 years ago CategoriesTabs.js 3 years ago CategorySelector.js 2 years ago CustomTooltip.js 3 years ago DocNotice.js 2 years ago EditorSelector.js 2 years ago EditorTabs.js 4 years ago Header.js 2 years ago Icon.js 2 years ago ImportModal.js 1 year ago ImportModalError.js 2 years ago ImportModalMock.js 4 years ago ImportModalNote.js 4 years ago ImportStepper.js 1 year ago InstallModal.js 1 year ago License.js 2 years ago LicensePanelContext.js 3 years ago Loading.js 4 years ago Main.js 1 year ago Migration.js 4 years ago NewTCNotice.js 1 year ago Notification.js 4 years ago OnboardingContent.js 4 years ago PreviewFrame.js 3 years ago Search.js 2 years ago StarterSiteCard.js 3 years ago
CategorySelector.js
103 lines
1 /* global tiobDash */
2 import classnames from 'classnames';
3 import { useState } from '@wordpress/element';
4 import { Button, Dashicon, Popover } from '@wordpress/components';
5 import { withDispatch, withSelect } from '@wordpress/data';
6 import { compose } from '@wordpress/compose';
7
8 const CategorySelector = ( {
9 categories,
10 count,
11 category,
12 setCurrentCategory,
13 showCount = false,
14 } ) => {
15 const [ open, setOpen ] = useState( false );
16 const toggleDropdown = () => setOpen( ! open );
17 const wrapClasses = classnames( [
18 'ob-dropdown',
19 'editor-selector',
20 { small: true },
21 ] );
22 return (
23 <div className={ wrapClasses }>
24 <Button onClick={ toggleDropdown } className="select ob-dropdown">
25 <span>{ categories[ category ] }</span>
26 <span className="count">{ showCount ? count[ category ] : '' }</span>
27 <Dashicon
28 size={ 14 }
29 icon={ open ? 'arrow-up-alt2' : 'arrow-down-alt2' }
30 />
31 { open && (
32 <Popover
33 position="bottom center"
34 onClose={ toggleDropdown }
35 inline
36 noArrow
37 >
38 { open && (
39 <ul className="options">
40 { Object.keys( categories ).map(
41 ( key, index ) => {
42 if ( key === category ) {
43 return null;
44 }
45 if (
46 tiobDash &&
47 tiobDash.isValidLicense === '1' &&
48 'free' === key
49 ) {
50 return null;
51 }
52 if ( 1 > count[ key ] ) {
53 return null;
54 }
55 return (
56 <li key={ index }>
57 <a
58 href="#"
59 onClick={ ( e ) => {
60 e.preventDefault();
61 setCurrentCategory(
62 key
63 );
64 setOpen( false );
65 } }
66 >
67 <span>
68 { categories[ key ] }
69 </span>
70 { showCount && (
71 <span className="count">
72 { count[ key ] }
73 </span>
74 ) }
75 </a>
76 </li>
77 );
78 }
79 ) }
80 </ul>
81 ) }
82 </Popover>
83 ) }
84 </Button>
85 </div>
86 );
87 };
88
89 export default compose(
90 withSelect( ( select ) => {
91 const { getCurrentCategory } = select( 'neve-onboarding' );
92 return {
93 category: getCurrentCategory(),
94 };
95 } ),
96 withDispatch( ( dispatch ) => {
97 const { setCurrentCategory } = dispatch( 'neve-onboarding' );
98 return {
99 setCurrentCategory: ( category ) => setCurrentCategory( category ),
100 };
101 } )
102 )( CategorySelector );
103