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 / beaver / src / components / header.js
templates-patterns-collection / beaver / src / components Last commit date
content.js 5 years ago export.js 5 years ago filters.js 5 years ago header.js 1 year ago list-item.js 5 years ago pagination.js 5 years ago preview.js 1 year ago templates-content.js 5 years ago
header.js
109 lines
1 import classnames from 'classnames';
2 import { v4 as uuidv4 } from 'uuid';
3
4 import { cloudUpload, closeSmall, update } from '@wordpress/icons';
5 import { Button, ButtonGroup, Icon } from '@wordpress/components';
6 import { useDispatch, useSelect } from '@wordpress/data';
7
8 import icon from './../icon';
9 import { fetchTemplates, fetchLibrary } from './../data/templates-cloud/index';
10
11 const Header = ( { closeModal, getOrder, getSearchQuery } ) => {
12 const { setFetching, updateCurrentTab } = useDispatch( 'tpc/beaver' );
13
14 const TABS = {
15 library: window.tiTpc.library.tabs.library,
16 // Removed during PRF.
17 // templates: window.tiTpc.library.tabs.templates,
18 };
19
20 const isFetching = useSelect( ( select ) =>
21 select( 'tpc/beaver' ).isFetching()
22 );
23
24 const isPreview = useSelect( ( select ) =>
25 select( 'tpc/beaver' ).isPreview()
26 );
27
28 const currentTab = useSelect( ( select ) =>
29 select( 'tpc/beaver' ).getCurrentTab()
30 );
31
32 const syncLibrary = async () => {
33 window.localStorage.setItem( 'tpcCacheBuster', uuidv4() );
34 setFetching( true );
35
36 const order = getOrder();
37
38 await fetchTemplates( {
39 search: getSearchQuery(),
40 ...order,
41 } );
42
43 await fetchLibrary( {
44 search: getSearchQuery(),
45 ...order,
46 } );
47
48 setFetching( false );
49 };
50
51 return (
52 <div className="modal-header">
53 <div className="left">
54 <Icon icon={ icon } />
55 </div>
56
57 <div className="center">
58 { Object.keys( TABS ).map( ( i ) => (
59 <Button
60 key={ i }
61 onClick={ () => updateCurrentTab( i ) }
62 className={ classnames( 'tabs', {
63 'is-active': i === currentTab,
64 } ) }
65 >
66 { TABS[ i ] }
67 </Button>
68 ) ) }
69 </div>
70
71 <div className="right">
72 { ! isPreview && (
73 <ButtonGroup>
74 { 'library' === currentTab && (
75 <Button
76 label={ window.tiTpc.library.actions.sync }
77 icon={ update }
78 disabled={ isFetching }
79 className={ classnames( 'is-sync', {
80 'is-loading': isFetching,
81 } ) }
82 onClick={ syncLibrary }
83 />
84 ) }
85
86 { window.tiTpc.postTypes.includes(window.tiTpc.postType) && (
87 <Button
88 label={ window.tiTpc.library.actions.save }
89 icon={ cloudUpload }
90 onClick={ () =>
91 updateCurrentTab( 'export' )
92 }
93 />
94 ) }
95 </ButtonGroup>
96 ) }
97
98 <Button
99 label={ window.tiTpc.library.actions.close }
100 icon={ closeSmall }
101 onClick={ closeModal }
102 />
103 </div>
104 </div>
105 );
106 };
107
108 export default Header;
109