import { Icon } from "../../components"; import { useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; const pluginList = [ { pluginName: __('RaraTheme Companion', 'benevolent'), description: __("23 extremely useful custom widgets to create an engaging website.", "benevolent"), slug: "raratheme-companion" }, { pluginName: __('Rara One Click Demo Import', 'benevolent'), description: __("Make your website look like the live demo of the theme with a click!", "benevolent"), slug: "rara-one-click-demo-import" } ]; const objectExistsInArray = (obj, array) => { return array.some((el) => el.slug === obj.slug); } const UsefulPlugins = () => { const [buttonState, setButtonState] = useState(() => { const initialState = {}; pluginList.forEach(plugin => { initialState[plugin.slug] = 'Install'; }); return initialState; }); const [activateUrls, setActivateUrls] = useState({}); useEffect(() => { const activePlugins = cw_dashboard.activePlugins; const inactivePlugins = cw_dashboard.inactivePlugins; const newButtonState = {}; // Set state for active plugins activePlugins.forEach(plugin => { if (objectExistsInArray(plugin, pluginList)) { newButtonState[plugin.slug] = 'Activated'; } }); // Set state for inactive plugins inactivePlugins.forEach(plugin => { if (objectExistsInArray(plugin, pluginList)) { newButtonState[plugin.slug] = 'Activate'; } }); setButtonState(prevState => ({ ...prevState, ...newButtonState })); const urls = {}; inactivePlugins.forEach((plugin) => { if (objectExistsInArray(plugin, pluginList)) { const url = plugin.url.replace(/&/g, '&'); urls[plugin.slug] = url; } }); setActivateUrls(urls); }, []); const installPlugin = (slug) => { setButtonState((prevState) => ({ ...prevState, [slug]: 'Installing...' })); wp.updates.installPlugin({ slug: slug, success: (response) => { setActivateUrls((prevUrls) => ({ ...prevUrls, [slug]: response.activateUrl })); setButtonState((prevState) => ({ ...prevState, [slug]: 'Activate' })); }, error: (error) => { console.error(error); setButtonState((prevState) => ({ ...prevState, [slug]: 'Install' })); } }); } const activatePlugin = async (slug) => { setButtonState((prevState) => ({ ...prevState, [slug]: 'Activating...' })); const url = activateUrls[slug]; if (url) { try { const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ _wpnonce: new URL(url).searchParams.get('_wpnonce'), action: 'activate', plugin: new URL(url).searchParams.get('plugin'), }).toString(), }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } setButtonState((prevState) => ({ ...prevState, [slug]: 'Activated' })); } catch (error) { setButtonState((prevState) => ({ ...prevState, [slug]: 'Activate' })); } } } return (
{pluginList.map((plugin, index) => (

{plugin.description}

{buttonState[plugin.slug] === 'Install' && ( )} {buttonState[plugin.slug] === 'Installing...' && ( )} {buttonState[plugin.slug] === 'Activate' && ( )} {buttonState[plugin.slug] === 'Activating...' && ( )} {buttonState[plugin.slug] === 'Activated' && ( )}
))}
); } export default UsefulPlugins;