PluginProbe ʕ •ᴥ•ʔ
Starter Sites & Templates by Neve / 1.4.1
Starter Sites & Templates by Neve v1.4.1
1.4.1 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 / onboarding / src / Components / CategoryButtons.js
templates-patterns-collection / onboarding / src / Components Last commit date
CustomizeControls 2 months ago Steps 2 weeks ago App.js 2 years ago CategoryButtons.js 3 weeks ago CustomTooltip.js 2 years ago EditorSelector.js 2 years ago FeaturesList.js 1 day ago Filters.js 3 weeks ago Header.js 3 weeks ago ImportError.js 2 years ago ImportForm.js 1 year ago ImportMock.js 2 years ago ImportProgress.js 1 year ago Onboarding.js 3 weeks ago ProgressBar.js 2 years ago Search.js 3 weeks ago SitePreview.js 2 years ago SiteSettings.js 2 months ago Sites.js 2 weeks ago StarterSiteCard.js 1 day ago Toast.js 2 weeks ago WelcomeMock.js 2 years ago
CategoryButtons.js
69 lines
1 import { useSelect, useDispatch } from '@wordpress/data';
2 import classnames from 'classnames';
3 import { useMemo, useEffect } from '@wordpress/element';
4
5 const CategoryButtons = ( { categories, style } ) => {
6 const data = useSelect( ( select ) => ( {
7 category: select( 'ti-onboarding' ).getCurrentCategory(),
8 sitesMetadata: select( 'ti-onboarding' ).getSites(),
9 editor: select( 'ti-onboarding' ).getCurrentEditor(),
10 } ) );
11
12 const { setCategory } = useDispatch( 'ti-onboarding' );
13
14 const availableCategories = useMemo( () => {
15 return Object.keys( categories )
16 .filter(
17 ( key ) =>
18 // Show "All" and "Free" categories after user selection.
19 data.category || ( key !== 'all' && key !== 'free' )
20 )
21 .filter( ( key ) => {
22 // Hide "Free" is there is not free template available on the selected editor.
23 if ( key !== 'free' ) {
24 return true;
25 }
26 return Object.values( data.sitesMetadata.sites?.[ data.editor ] )?.some(
27 ( site ) => ! site?.upsell
28 );
29 } );
30 }, [ categories, data.category, data.sitesMetadata, data.editor ] );
31
32 const onClick = ( newCategory ) => {
33 setCategory( newCategory );
34 };
35
36 /**
37 * Default the category to 'all' when the current category is unavailable.
38 */
39 useEffect( () => {
40 if ( data.category && ! availableCategories.includes( data.category ) ) {
41 setCategory( 'all' );
42 }
43 }, [ data.category, availableCategories, setCategory ] );
44
45 return (
46 <div className="ob-cat-wrap" style={ style }>
47 { availableCategories.map( ( catSlug ) => {
48 const classes = classnames( {
49 cat: true,
50 [ catSlug ]: true,
51 active: catSlug === data.category,
52 } );
53
54 return (
55 <button
56 className={ classes }
57 key={ catSlug }
58 onClick={ () => onClick( catSlug ) }
59 >
60 { categories[ catSlug ] }
61 </button>
62 );
63 } ) }
64 </div>
65 );
66 };
67
68 export default CategoryButtons;
69