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 |