import { recordPluginActivity } from '@shared/api/DataApi';
import { activatePlugin, installPlugin } from '@shared/api/wp';
import { useActivityStore } from '@shared/state/activity';
import { Button } from '@wordpress/components';
import { useEffect, useState } from '@wordpress/element';
import { __, sprintf } from '@wordpress/i18n';
import { caution, check, Icon } from '@wordpress/icons';
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"
className="cursor-pointer rounded-sm 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 (
// biome-ignore lint: keep button
incrementActivity(`recommendations-install-${slug}`)}
onKeyDown={(e) => {
if (!(e.key === 'Enter' || e.key === ' ')) return;
incrementActivity(`recommendations-install-${slug}`);
}}
className="rounded-sm border border-gray-200 bg-transparent p-4 text-left text-base rtl:text-right"
>
{title}
{by &&
{by}
}
{description}
);
};
const InstallButton = ({ slug }) => {
const [installing, setInstalling] = useState(false);
const [status, setStatus] = useState('');
useEffect(() => {
const { installedPlugins, activePlugins } = window.extSharedData;
const hasPlugin = (p) => p?.includes(slug);
const installed = Object.values(installedPlugins).some(hasPlugin);
const active = Object.values(activePlugins).some(hasPlugin);
if (installed) setStatus('inactive');
if (active) setStatus('active');
}, [slug, setStatus]);
const handleClick = async () => {
setInstalling(true);
try {
await installPlugin(slug);
recordPluginActivity({
slug,
source: 'assist-recommendation-card',
});
} catch (_) {
// Fail silently if the plugin is already installed
console.error('Error installing plugin:', _);
}
try {
await activatePlugin(slug);
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 (
);
};