WS_OK_7.4.33
/* global ajaxurl */
import { getResetNonce } from '../../smush-ui/core-ui/utils/smushData';
/**
* Wrapper function for ajax calls to WordPress.
*
* @since 3.12.0
*/
function SmushFetcher() {
/**
* Request ajax with a promise.
* Use FormData Object as data if you need to upload file
*
* @param {string} action
* @param {Object|FormData} data
* @param {string} method
* @return {Promise<any>} Request results.
*/
function request( action, data = {}, method = 'POST' ) {
const args = {
url: ajaxurl,
method,
cache: false
};
if ( data instanceof FormData ) {
data.append( 'action', action );
if ( ! data.has( '_ajax_nonce' ) ) {
data.append( '_ajax_nonce', window.smushUIData?.wpAjax?.nonce );
}
args.contentType = false;
args.processData = false;
} else {
data._ajax_nonce = data._ajax_nonce || window.smush_global.nonce || window.smushUIData?.wpAjax?.nonce;
data.action = action;
}
args.data = data;
return new Promise( ( resolve, reject ) => {
jQuery.ajax( args ).done( resolve ).fail( reject );
} ).then( ( response ) => {
if ( typeof response !== 'object' ) {
response = JSON.parse( response );
}
return response;
} ).catch( ( error ) => {
console.error( 'Error:', error );
return error;
} );
}
const methods = {
/**
* Manage ajax for background.
*/
background: {
/**
* Start background process.
*/
start: () => {
return request( 'bulk_smush_start' );
},
/**
* Cancel background process.
*/
cancel: () => {
return request( 'bulk_smush_cancel' );
},
/**
* Pause background process.
*/
pause: () => {
return request( 'bulk_smush_pause' );
},
/**
* Resume background process.
*/
resume: () => {
return request( 'bulk_smush_resume' );
},
/**
* Reset background process status.
*/
resetStatus: () => {
return request( 'bulk_smush_reset_status' );
},
/**
* Initial State - Get stats on the first time.
*/
initState: () => {
return request( 'bulk_smush_get_status' );
},
/**
* Get stats.
*/
getStatus: () => {
return request( 'bulk_smush_get_status' );
},
backgroundHealthyCheck: () => {
return request( 'smush_start_background_pre_flight_check' );
},
backgroundHealthyStatus: () => {
return request( 'smush_get_background_pre_flight_status' );
}
},
smush: {
/**
* Ignore All.
*
* @param type
*/
ignoreAll: ( type ) => {
return request( 'wp_smush_ignore_all_failed_items', {
type,
} );
},
},
/**
* Manage ajax for config operations
*/
configs: {
/**
* Get the current site settings as a config.
*/
save: () => {
return request( 'smush_save_config', {
_ajax_nonce: window.smushUIData?.configsData?.nonce || '',
} );
},
/**
* Apply a config by ID.
*
* @param {number} id Config ID.
*/
apply: ( id ) => {
return request( 'smush_apply_config', {
id,
_ajax_nonce: window.smushUIData?.configsData?.nonce || '',
} );
},
/**
* Upload and validate a config file.
*
* @param {File} file The JSON config file.
*/
upload: ( file ) => {
const formData = new FormData();
formData.append( '_ajax_nonce', window.smushUIData?.configsData?.nonce || '' );
formData.append( 'file', file );
return request( 'smush_upload_config', formData );
},
/**
* Sync a config to the Hub.
*
* @param {Object} config Config object to sync.
*/
syncToHub: ( config ) => {
return request( 'smush_hub_sync_config', {
_ajax_nonce: window.smushUIData?.configsData?.nonce || '',
config: JSON.stringify( config ),
} );
},
},
/**
* Manage ajax for other requests
*/
common: {
hideUpgradeModal: () => {
return request( 'hide_new_features' );
},
/**
* Dismiss Notice.
*
* @param {string} dismissId Notification id.
*/
dismissNotice: ( dismissId ) => {
return request( 'smush_dismiss_notice', {
key: dismissId
} );
},
/**
* Hide the new features modal.
*
* @param {string} modalID Notification id.
*/
hideModal: ( modalID ) => request( 'hide_modal', {
modal_id: modalID,
} ),
track: ( event, properties ) => request( 'smush_analytics_track_event', {
event,
properties
} ),
/**
* Custom request.
*
* @param {Object} data
*/
request: ( data ) => data.action && request( data.action, data ),
poll: () => request( 'smush_frontend_poll', {} ),
},
scanMediaLibrary: {
start: ( optimize_on_scan_completed = false ) => {
optimize_on_scan_completed = optimize_on_scan_completed ? 1 : 0;
const _ajax_nonce = window.smushUIData.scanStatus.nonce;
return request( 'wp_smush_start_background_scan', {
optimize_on_scan_completed,
_ajax_nonce,
} );
},
cancel: () => {
const _ajax_nonce = window.smushUIData.scanStatus.nonce;
return request( 'wp_smush_cancel_background_scan', {
_ajax_nonce,
} );
},
getScanStatus: () => {
const _ajax_nonce = window.smushUIData.scanStatus.nonce;
return request( 'wp_smush_get_background_scan_status', {
_ajax_nonce,
} );
},
resetStatus: () => {
const _ajax_nonce = window.smushUIData.scanStatus.nonce;
return request( 'wp_smush_reset_background_scan_status', {
_ajax_nonce,
} );
}
},
webp: {
switchMethod: ( method ) => {
return request( 'webp_switch_method', { method } );
},
recheckStatus: () => {
return request( 'smush_webp_get_status' );
},
// toggleWizard: () => {
// return request( 'smush_toggle_webp_wizard' );
// },
showWizard: () => {
return request( 'smush_show_webp_wizard' );
},
hideWizard: () => {
return request( 'smush_hide_webp_wizard' );
},
applyHtaccessRules: () => {
return request( 'smush_webp_apply_htaccess_rules' );
},
},
cdn: {
/**
* Toggle CDN on/off. Calls the server to set up or tear down CDN infrastructure.
*
* @param {boolean} enable
*/
toggle: ( enable ) => {
return request( 'smush_toggle_cdn', { param: enable } );
},
/**
* Poll the CDN provisioning status. Used while CDN is still being set up.
*/
getStats: () => {
return request( 'get_cdn_stats' );
},
},
settings: {
disconnectSite: () => {
return request( 'wp_smush_disconnect_site' );
},
/**
* Force-recheck the Smush API connection status.
*
* @return {Promise} Resolves with { isPro, status } on success.
*/
checkApiStatus: () => {
return request( 'recheck_api_status' );
},
/**
* Reset all plugin settings to factory defaults.
*
* @return {Promise}
*/
resetSettings: () => {
return request( 'reset_settings', {
_ajax_nonce: getResetNonce(),
} );
},
},
rating: {
/**
* User rated the plugin.
*/
completed: () => {
return request( 'smush_rating_completed' );
},
/**
* User wants to be reminded later.
*/
remindLater: () => {
return request( 'smush_rating_remind_later' );
},
/**
* User dismissed permanently.
*/
dismissed: () => {
return request( 'smush_rating_dismissed' );
},
/**
* Mark first completion.
*/
firstCompletion: () => {
return request( 'smush_rating_first_completion' );
}
},
onboarding: {
resumeWizard: () => request( 'resume_smush_setup' ),
},
request: ( action, data = {}, method = 'POST' ) => {
return request( action, data, method );
}
};
Object.assign( this, methods );
}
const SmushAjax = new SmushFetcher();
export default SmushAjax;