import usePluginSelectedStore from "@/stores/pluginSelectedStore" import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" import { decodeEntities } from "@wordpress/html-entities" import PluginSkeleton from "../PluginSkeleton" import { Button } from "@wordpress/components" import { __, sprintf } from "@wordpress/i18n" import { autop } from '@wordpress/autop'; import { useSinglePlugin } from "@/hooks/useSinglePlugin" import { getPluginInsightsQueryOptions } from "@/shared/suggerence-insights/query-options" import { Icon } from "@wordpress/components" import { starFilled, starEmpty, category, commentAuthorAvatar, check, store, external, arrowLeft } from "@wordpress/icons" import useSearchStore from "@/stores/searchStore" import { useNavigate } from "@tanstack/react-router" import Activity from "./Activity" import { addActivityMutationOptions } from "@/shared/plugin-activity/mutation-options" import Notes from "./Notes" import Related from "./Related" import { installPluginMutationOptions, updatePluginStatusMutationOptions, deletePluginMutationOptions } from "@/shared/manage-plugins/mutation-options" import usePluginsViewStore from "@/stores/pluginsViewStore" const PluginDetails = () => { const { plugin, setPlugin } = usePluginSelectedStore() const navigate = useNavigate() const { isOpen, setIsOpen } = usePluginsViewStore() const { data: pluginInsights, isPending: isPluginInsightsPending } = useQuery(getPluginInsightsQueryOptions(plugin?.slug ?? '')) const queryClient = useQueryClient() const { setQuery } = useSearchStore() const { isActive, isInstalled, pluginDir } = useSinglePlugin({ slug: plugin?.slug ?? '' }) const addActivityMutation = useMutation(addActivityMutationOptions()) /** * Installation */ const installPlugin = useMutation(installPluginMutationOptions()) const handleInstallPlugin = () => { installPlugin.mutate(plugin?.slug ?? '') addActivityMutation.mutate({ plugin_slug: plugin?.slug ?? '', activity_type: 'install', }) } /** * Activation */ const activatePlugin = useMutation(updatePluginStatusMutationOptions()) const handleActivatePlugin = () => { activatePlugin.mutate({ pluginSlug: plugin?.slug ?? '', status: 'active', plugin: pluginDir ?? '', }) addActivityMutation.mutate({ plugin_slug: plugin?.slug ?? '', activity_type: 'activate', }) } /** * Deactivation */ const deactivatePlugin = useMutation(updatePluginStatusMutationOptions()) const handleDeactivatePlugin = () => { deactivatePlugin.mutate({ pluginSlug: plugin?.slug ?? '', status: 'inactive', plugin: pluginDir ?? '', }) addActivityMutation.mutate({ plugin_slug: plugin?.slug ?? '', activity_type: 'deactivate', }) } /** * Delete */ const deletePlugin = useMutation(deletePluginMutationOptions()) const handleDeletePlugin = () => { if (confirm(__('Are you sure you want to delete this plugin?', 'ploogins-ai-assistant'))) { deletePlugin.mutate({ pluginSlug: plugin?.slug ?? '', plugin: pluginDir ?? '', }) addActivityMutation.mutate({ plugin_slug: plugin?.slug ?? '', activity_type: 'delete', }) } } const isPremiumPlugin = plugin?.business_model === 'premium' const handleBackToPluginList = () => { setPlugin(null) setIsOpen(false) } return (
{ !plugin ? : (
{ isPremiumPlugin && (
{__('This is a premium plugin, you may need to buy a license', 'ploogins-ai-assistant')}
) }

{sprintf( __('This plugin is %s', 'ploogins-ai-assistant'), isInstalled ? isActive ? __('installed and active', 'ploogins-ai-assistant') : __('installed but not active', 'ploogins-ai-assistant') : __('not installed', 'ploogins-ai-assistant') )}

{!isInstalled ? ( <> { !isPremiumPlugin && ( ) } { isPremiumPlugin && ( ) } ) : !isActive ? ( <> ) : ( )}
{ const keys = Object.keys(plugin.icons); const lastKey = keys.pop(); return lastKey ? (plugin.icons as any)[lastKey] ?? '' : ''; })() : ''} alt={plugin?.name} />

{decodeEntities(plugin?.name ?? '')}

{ !isPremiumPlugin && (
{Array.from({ length: 5 }, (_, index) => ( ))} ({plugin.num_ratings})
) } { !isPremiumPlugin && (
{__('WordPress.org Plugin Page', 'ploogins-ai-assistant')}
) }
{__('Plugin Homepage', 'ploogins-ai-assistant')}
{ isPluginInsightsPending && (
{__('Getting AI Insights...', 'ploogins-ai-assistant')}
) } {pluginInsights && (
{__('Plugin AI Insights', 'ploogins-ai-assistant')}

{pluginInsights.main_purpose}

{pluginInsights.complexity_level}
{pluginInsights.category}
{ pluginInsights.summary && (
) }
{ pluginInsights.features?.map((feature: string) => (
{feature}
)) }
{pluginInsights.tags?.map((tag: string) => ( ))}
)}
) }
) } export default PluginDetails