content.js
1 year ago
filters.js
1 year ago
header.js
1 year ago
import-modal.js
1 year ago
list-item.js
1 year ago
notices.js
5 years ago
pagination.js
5 years ago
preview.js
1 year ago
publish-button.js
2 years ago
template-predefine.js
2 years ago
templates-content.js
1 year ago
tpc-templates-button.js
2 years ago
header.js
109 lines
| 1 | /* global tiTpc */ |
| 2 | import classnames from 'classnames'; |
| 3 | import { v4 as uuidv4 } from 'uuid'; |
| 4 | |
| 5 | import { closeSmall, update } from '@wordpress/icons'; |
| 6 | import { __ } from '@wordpress/i18n'; |
| 7 | import { Button, ButtonGroup, Icon } from '@wordpress/components'; |
| 8 | import { useDispatch, useSelect } from '@wordpress/data'; |
| 9 | |
| 10 | import icon from './../icon'; |
| 11 | import { fetchTemplates, fetchLibrary } from './../data/templates-cloud/index'; |
| 12 | |
| 13 | const Header = ( { closeModal, getOrder, getSearchQuery } ) => { |
| 14 | const { setFetching, updateCurrentTab } = useDispatch( 'tpc/block-editor' ); |
| 15 | |
| 16 | const TABS = { |
| 17 | library : __( 'My Library', 'templates-patterns-collection' ) |
| 18 | // Removed since PRF. |
| 19 | // templates: __( 'Page Templates', 'templates-patterns-collection' ), |
| 20 | }; |
| 21 | |
| 22 | const isFetching = useSelect( ( select ) => |
| 23 | select( 'tpc/block-editor' ).isFetching() |
| 24 | ); |
| 25 | const isPreview = useSelect( ( select ) => |
| 26 | select( 'tpc/block-editor' ).isPreview() |
| 27 | ); |
| 28 | const currentTab = useSelect( ( select ) => |
| 29 | select( 'tpc/block-editor' ).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 | showFSE: tiTpc.isFSETheme |
| 42 | ? window?.localStorage?.tpcShowFse === 'true' |
| 43 | : false, |
| 44 | } ); |
| 45 | |
| 46 | await fetchLibrary( { |
| 47 | search: getSearchQuery(), |
| 48 | ...order, |
| 49 | showFSE: tiTpc.isFSETheme |
| 50 | ? window?.localStorage?.tpcShowFse === 'true' |
| 51 | : false, |
| 52 | } ); |
| 53 | |
| 54 | setFetching( false ); |
| 55 | }; |
| 56 | |
| 57 | return ( |
| 58 | <div className="modal-header"> |
| 59 | <div className="left"> |
| 60 | <Icon icon={ icon } /> |
| 61 | </div> |
| 62 | |
| 63 | <div className="center"> |
| 64 | { Object.keys( TABS ).map( ( i ) => ( |
| 65 | <Button |
| 66 | key={ i } |
| 67 | onClick={ () => updateCurrentTab( i ) } |
| 68 | className={ classnames( 'tabs', { |
| 69 | 'is-active': i === currentTab, |
| 70 | } ) } |
| 71 | > |
| 72 | { TABS[ i ] } |
| 73 | </Button> |
| 74 | ) ) } |
| 75 | </div> |
| 76 | |
| 77 | <div className="right"> |
| 78 | { 'library' === currentTab && ! isPreview && ( |
| 79 | <ButtonGroup> |
| 80 | <Button |
| 81 | label={ __( |
| 82 | 'Re-sync Library', |
| 83 | 'templates-patterns-collection' |
| 84 | ) } |
| 85 | icon={ update } |
| 86 | disabled={ isFetching } |
| 87 | className={ classnames( 'is-sync', { |
| 88 | 'is-loading': isFetching, |
| 89 | } ) } |
| 90 | onClick={ syncLibrary } |
| 91 | /> |
| 92 | </ButtonGroup> |
| 93 | ) } |
| 94 | |
| 95 | <Button |
| 96 | label={ __( |
| 97 | 'Close Modal', |
| 98 | 'templates-patterns-collection' |
| 99 | ) } |
| 100 | icon={ closeSmall } |
| 101 | onClick={ closeModal } |
| 102 | /> |
| 103 | </div> |
| 104 | </div> |
| 105 | ); |
| 106 | }; |
| 107 | |
| 108 | export default Header; |
| 109 |