/* global wphbReact */
/* global WPHB_Admin */
/**
* External dependencies
*/
import React, { useState } from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
/**
* WordPress dependencies
*/
import domReady from '@wordpress/dom-ready';
import { dispatch } from '@wordpress/data';
const { __ } = wp.i18n;
/**
* Internal dependencies
*/
import HBAPIFetch from '../api';
import AutoAssets from '../views/minify/assets-auto';
import { ManualAssets } from '../views/minify/assets-manual';
import { MinifySummary } from '../views/minify/summary';
import { STORE_NAME } from '../data/minify';
/**
* MinifyPage component.
*
* @since 2.7.2
*
* @param {Object} props
* @return {JSX.Element} Manual or Auto assets component.
*/
export const MinifyPage = ( props ) => {
const api = new HBAPIFetch();
const [ loading, setLoading ] = useState( true );
/**
* Clear asset optimization cache.
*/
const clearCache = () => {
setLoading( true );
api.post( 'minify_clear_cache' )
.then( ( response ) => {
dispatch( STORE_NAME ).invalidateResolution( 'getAssets' );
dispatch( STORE_NAME ).invalidateResolution( 'getOptions' );
if ( response.isCriticalActive ) {
window.wphbMixPanel.track( 'critical_css_cache_purge', {
location: 'ao_settings'
} );
}
const message = __( 'Your cache has been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' );
WPHB_Admin.notices.show( message ); // eslint-disable-line camelcase
setLoading( false );
} )
.catch( window.console.log );
};
/**
* Re-check files.
*/
const reCheckFiles = () => {
setLoading( true );
api.post( 'minify_recheck_files' )
.then( () => window.location.reload() )
.catch( window.console.log );
};
if ( 'advanced' === props.wphbData.mode ) {
return (
);
}
return (
);
};
MinifyPage.propTypes = {
wphbData: PropTypes.object,
};
domReady( function() {
const minify = document.getElementById( 'wrap-wphb-minify' );
if ( minify ) {
ReactDOM.render( , minify );
}
const summary = document.getElementById( 'wrap-wphb-summary' );
if ( summary ) {
ReactDOM.render( , summary );
}
} );