File "use-plugins.js"
Full Path: /home/warrior1/public_html/wp-content/plugins/elementor/app/modules/import-export/assets/js/hooks/use-plugins.js
File size: 2.43 KB
MIME-type: text/x-java
Charset: utf-8
import { useState, useEffect, useRef } from 'react';
export const PLUGINS_RESPONSE_MAP = Object.freeze( {
INITIAL: 'initial',
SUCCESS: 'success',
ERROR: 'error',
} );
export const PLUGIN_STATUS_MAP = Object.freeze( {
ACTIVE: 'active',
MULTISITE_ACTIVE: 'network-active',
INACTIVE: 'inactive',
NOT_INSTALLED: 'Not Installed',
} );
const baseEndpoint = elementorCommon.config.urls.rest + 'wp/v2/plugins/',
getInitialState = () => ( {
status: PLUGINS_RESPONSE_MAP.INITIAL,
data: null,
} );
export default function usePlugins() {
const [ response, setResponse ] = useState( () => getInitialState() ),
allowResponseUpdate = useRef( true ),
fetchRest = ( { body, method, endpoint = '' } ) => {
const data = {
method,
headers: {
'Content-Type': 'application/json; charset=utf-8',
'X-WP-Nonce': wpApiSettings.nonce,
},
};
if ( body ) {
data.body = JSON.stringify( body );
}
if ( response.data ) {
reset();
}
return new Promise( ( resolve, reject ) => {
fetch( baseEndpoint + endpoint, data )
.then( ( res ) => res.json() )
.then( ( res ) => {
if ( allowResponseUpdate.current ) {
setResponse( {
status: PLUGINS_RESPONSE_MAP.SUCCESS,
data: res,
} );
}
resolve( res );
} )
.catch( ( error ) => {
setResponse( {
status: PLUGINS_RESPONSE_MAP.ERROR,
data: error,
} );
reject( error );
} );
} );
},
fetchData = ( slug ) => {
return fetchRest( {
method: 'GET',
endpoint: slug,
} );
},
install = ( slug ) => {
slug = slug.split( '/' )[ 0 ];
return fetchRest( {
method: 'POST',
body: {
slug,
},
} );
},
activate = ( slug ) => {
return fetchRest( {
endpoint: slug,
method: 'PUT',
body: {
status: PLUGIN_STATUS_MAP.ACTIVE,
},
} );
},
deactivate = ( slug ) => {
return fetchRest( {
endpoint: slug,
method: 'PUT',
body: {
status: PLUGIN_STATUS_MAP.INACTIVE,
},
} );
},
remove = ( slug ) => {
return fetchRest( {
endpoint: slug,
method: 'DELETE',
} );
},
reset = () => setResponse( getInitialState() );
// On load.
useEffect( () => {
fetchData();
// Cleanup on destroy.
return () => {
allowResponseUpdate.current = false;
};
}, [] );
return {
response,
pluginsActions: {
fetch: fetchData,
install,
activate,
deactivate,
remove,
reset,
},
};
}