import { useMutation, useQuery } from "@tanstack/react-query"; import { useFeatureSessionStore } from "../../stores/featureSessionStore"; import { Heading } from "@/shared/ui/Heading"; import { useThinkingStore } from "../../stores/thinkingStore"; import { useEffect } from "@wordpress/element"; import { __ } from "@wordpress/i18n"; import { decodeEntities } from '@wordpress/html-entities'; import { getPluginDataQueryOptions } from "@/shared/plugin-data/query-options"; import { createPluginSessionMutationOptions } from "@/shared/plugin-sessions/mutation-options"; import { usePluginSessionStore } from "../../stores/pluginSessionStore"; import { extractChildrenFromTag } from "@/shared/utils/html"; import { check, download, Icon, starEmpty, starFilled, lifesaver, upload, wordpress, lineSolid } from "@wordpress/icons"; import { ProseContent } from "@/shared/ui/ProseContent"; import { autop } from "@wordpress/autop"; import { AcceptButton } from "../AcceptButton"; import { Button } from "@wordpress/components"; import { formatDate } from "@/shared/utils/formatting"; import { handlePluginSessionMutationOptions } from "@/shared/plugin-sessions/mutation-options"; import { useSteps } from "../../hooks/useSteps"; export const StepPlugins = () => { const { featureSession } = useFeatureSessionStore(); const { pluginSession } = usePluginSessionStore(); const { nextStep } = useSteps(); const { mutate: createPluginSession, isPending: isPendingCreatePluginSession } = useMutation({ ...createPluginSessionMutationOptions(), onSuccess: (data) => { usePluginSessionStore.setState({ pluginSession: data }); } }); const { mutate: handlePluginRequest, isPending: isPendingPluginRequest } = useMutation({ ...handlePluginSessionMutationOptions(), onSuccess: (data) => { usePluginSessionStore.setState({ pluginSession: data }); } }); useEffect(() => { if (pluginSession?.session.is_complete) nextStep(); if (featureSession?.session_id && !pluginSession?.session_id) { createPluginSession({ feature_session_id: featureSession.session_id }); } }, [featureSession, pluginSession]); const { isThinking, setIsThinking, setThinkingMessage } = useThinkingStore(); const { data: pluginData, isLoading: isLoadingPluginData } = useQuery(getPluginDataQueryOptions([pluginSession?.plugin?.slug || ''])); useEffect(() => { setIsThinking(isPendingCreatePluginSession || isLoadingPluginData || isPendingPluginRequest); if (isPendingCreatePluginSession) { setThinkingMessage(__('Creating plugin session...', 'suggerence-onboarding')); } if (isLoadingPluginData) { setThinkingMessage(__('Loading plugin data...', 'suggerence-onboarding')); } if (isPendingPluginRequest) { setThinkingMessage(__('Requesting plugin data...', 'suggerence-onboarding')); } }, [isPendingCreatePluginSession, isLoadingPluginData, isPendingPluginRequest]); const handleAcceptPlugin = () => { if (!pluginSession) return; handlePluginRequest({ session_id: pluginSession.session_id, action: 'accept', }); } const handleDiscardPlugin = () => { if (!pluginSession) return; handlePluginRequest({ session_id: pluginSession.session_id, action: 'discard', }); } const plugin = pluginData?.[0]; const insights = pluginSession?.plugin?.insights; if (isThinking) return return (
{__('Made by', 'suggerence-onboarding')} {extractChildrenFromTag(plugin.author, 'a')}