import { Button } from '@wordpress/components'; import { useEffect, useState } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; import { Icon, check, warning } from '@wordpress/icons'; import { installPlugin, activatePlugin } from '@shared/api/wp'; import { useActivityStore } from '@shared/state/activity'; export const RecommendationCard = ({ recommendation }) => { if (recommendation.pluginSlug) { return ; } return ; }; const LinkCard = ({ recommendation }) => { const { by, slug, description, image, title, linkType } = recommendation; const { incrementActivity } = useActivityStore(); if (!recommendation?.[linkType]) return null; return ( incrementActivity(`recommendations-${slug}`)} target="_blank" rel="noopener noreferrer" className="cursor-pointer rounded border border-gray-200 bg-transparent p-4 text-left text-base no-underline hover:border-design-main hover:bg-gray-50 rtl:text-right">
{
{title}
{by &&
{by}
}
{description}
); }; const InstallCard = ({ recommendation }) => { const { by, slug, description, image, title, pluginSlug } = recommendation; const { incrementActivity } = useActivityStore(); return (
incrementActivity(`recommendations-install-${slug}`)} className="rounded border border-gray-200 bg-transparent p-4 text-left text-base rtl:text-right">
{
{title}
{by &&
{by}
}
{description}
); }; const InstallButton = ({ pluginSlug }) => { const [installing, setInstalling] = useState(false); const [status, setStatus] = useState(''); useEffect(() => { const { installedPlugins, activePlugins } = window.extSharedData; const hasPlugin = (p) => p?.includes(pluginSlug); const installed = Object.values(installedPlugins).some(hasPlugin); const active = Object.values(activePlugins).some(hasPlugin); if (installed) setStatus('inactive'); if (active) setStatus('active'); }, [pluginSlug, setStatus]); const handleClick = async () => { setInstalling(true); try { await installPlugin(pluginSlug); } catch (_) { // Fail silently if the plugin is already installed } try { await activatePlugin(pluginSlug); setStatus('active'); } catch (_) { setStatus('error'); setTimeout(() => { setStatus(status); }, 1500); } setInstalling(false); }; if (status === 'error') { return ( <>

{__('Error', 'extendify-local')}

); } if (status === 'active') { return ( <>

{__('Active', 'extendify-local')}

); } if (status === 'inactive') { return ( ); } return ( ); };