diff --git a/x-pack/platform/plugins/private/observability_ai_assistant_management/public/hooks/use_get_product_doc_status.ts b/x-pack/platform/plugins/private/observability_ai_assistant_management/public/hooks/use_get_product_doc.ts similarity index 51% rename from x-pack/platform/plugins/private/observability_ai_assistant_management/public/hooks/use_get_product_doc_status.ts rename to x-pack/platform/plugins/private/observability_ai_assistant_management/public/hooks/use_get_product_doc.ts index a14bd22befe58..743375ffa1487 100644 --- a/x-pack/platform/plugins/private/observability_ai_assistant_management/public/hooks/use_get_product_doc_status.ts +++ b/x-pack/platform/plugins/private/observability_ai_assistant_management/public/hooks/use_get_product_doc.ts @@ -5,14 +5,21 @@ * 2.0. */ +import { useEffect } from 'react'; import { useQuery } from '@tanstack/react-query'; import { REACT_QUERY_KEYS } from '../constants'; import { useKibana } from './use_kibana'; +import { useUninstallProductDoc } from './use_uninstall_product_doc'; +import { useInstallProductDoc } from './use_install_product_doc'; -export function useGetProductDocStatus(inferenceId: string | undefined) { +export function useGetProductDoc(inferenceId: string | undefined) { const { productDocBase } = useKibana().services; - const { isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery({ + const { mutateAsync: installProductDoc, isLoading: isInstalling } = useInstallProductDoc(); + + const { mutateAsync: uninstallProductDoc, isLoading: isUninstalling } = useUninstallProductDoc(); + + const { isLoading, data, refetch } = useQuery({ queryKey: [REACT_QUERY_KEYS.GET_PRODUCT_DOC_STATUS, inferenceId], queryFn: async () => { return productDocBase!.installation.getStatus({ inferenceId }); @@ -21,12 +28,15 @@ export function useGetProductDocStatus(inferenceId: string | undefined) { refetchOnWindowFocus: false, }); + useEffect(() => { + refetch(); + }, [inferenceId, isInstalling, isUninstalling, refetch]); + return { - status: data, + status: data?.inferenceId === inferenceId ? data?.overall : undefined, refetch, isLoading, - isRefetching, - isSuccess, - isError, + installProductDoc, + uninstallProductDoc, }; } diff --git a/x-pack/platform/plugins/private/observability_ai_assistant_management/public/routes/components/settings_tab/change_kb_model.tsx b/x-pack/platform/plugins/private/observability_ai_assistant_management/public/routes/components/settings_tab/change_kb_model.tsx index 11b9d7b828719..a993fcf3a981b 100644 --- a/x-pack/platform/plugins/private/observability_ai_assistant_management/public/routes/components/settings_tab/change_kb_model.tsx +++ b/x-pack/platform/plugins/private/observability_ai_assistant_management/public/routes/components/settings_tab/change_kb_model.tsx @@ -26,7 +26,7 @@ import { } from '@kbn/ai-assistant/src/utils/get_model_options_for_inference_endpoints'; import { useInferenceEndpoints, UseKnowledgeBaseResult } from '@kbn/ai-assistant/src/hooks'; import { KnowledgeBaseState, useKibana } from '@kbn/observability-ai-assistant-plugin/public'; -import { useInstallProductDoc } from '../../../hooks/use_install_product_doc'; +import { useGetProductDoc } from '../../../hooks/use_get_product_doc'; export function ChangeKbModel({ knowledgeBase }: { knowledgeBase: UseKnowledgeBaseResult }) { const { overlays } = useKibana().services; @@ -39,7 +39,7 @@ export function ChangeKbModel({ knowledgeBase }: { knowledgeBase: UseKnowledgeBa const [hasLoadedCurrentModel, setHasLoadedCurrentModel] = useState(false); const [isUpdatingModel, setIsUpdatingModel] = useState(false); - const { mutateAsync: installProductDoc } = useInstallProductDoc(); + const { installProductDoc } = useGetProductDoc(currentlyDeployedInferenceId); const { inferenceEndpoints, isLoading: isLoadingEndpoints, error } = useInferenceEndpoints(); diff --git a/x-pack/platform/plugins/private/observability_ai_assistant_management/public/routes/components/settings_tab/product_doc_entry.tsx b/x-pack/platform/plugins/private/observability_ai_assistant_management/public/routes/components/settings_tab/product_doc_entry.tsx index 434a1609fef40..6195a248672f2 100644 --- a/x-pack/platform/plugins/private/observability_ai_assistant_management/public/routes/components/settings_tab/product_doc_entry.tsx +++ b/x-pack/platform/plugins/private/observability_ai_assistant_management/public/routes/components/settings_tab/product_doc_entry.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useEffect, useState, useCallback, useMemo } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { EuiButton, EuiDescribedFormGroup, @@ -19,49 +19,29 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useKnowledgeBase } from '@kbn/ai-assistant'; +import { UseKnowledgeBaseResult } from '@kbn/ai-assistant/src/hooks'; import { useKibana } from '../../../hooks/use_kibana'; -import { useGetProductDocStatus } from '../../../hooks/use_get_product_doc_status'; -import { useInstallProductDoc } from '../../../hooks/use_install_product_doc'; -import { useUninstallProductDoc } from '../../../hooks/use_uninstall_product_doc'; +import { useGetProductDoc } from '../../../hooks/use_get_product_doc'; -export function ProductDocEntry() { +export function ProductDocEntry({ knowledgeBase }: { knowledgeBase: UseKnowledgeBaseResult }) { const { overlays } = useKibana().services; - const knowledgeBase = useKnowledgeBase(); const selectedInferenceId: string | undefined = knowledgeBase.status.value?.currentInferenceId; const canInstallProductDoc = selectedInferenceId !== undefined; - const [isInstalled, setInstalled] = useState(false); - const [isInstalling, setInstalling] = useState(false); - - const { mutateAsync: installProductDoc } = useInstallProductDoc(); - const { mutateAsync: uninstallProductDoc } = useUninstallProductDoc(); - const { status, isLoading: isStatusLoading } = useGetProductDocStatus(selectedInferenceId); - - useEffect(() => { - if (isStatusLoading) return; - if (status) { - setInstalled(status.overall === 'installed' && status.inferenceId === selectedInferenceId); - } - }, [selectedInferenceId, status, isStatusLoading]); + const { + status, + isLoading: isStatusLoading, + installProductDoc, + uninstallProductDoc, + } = useGetProductDoc(selectedInferenceId); const onClickInstall = useCallback(() => { if (!selectedInferenceId) { throw new Error('Inference ID is required to install product documentation'); } - setInstalling(true); - installProductDoc(selectedInferenceId).then( - () => { - setInstalling(false); - setInstalled(true); - }, - () => { - setInstalling(false); - setInstalled(false); - } - ); + installProductDoc(selectedInferenceId); }, [installProductDoc, selectedInferenceId]); const onClickUninstall = useCallback(() => { @@ -84,10 +64,7 @@ export function ProductDocEntry() { ) .then((confirmed) => { if (confirmed && selectedInferenceId) { - uninstallProductDoc(selectedInferenceId).then(() => { - setInstalling(false); - setInstalled(false); - }); + uninstallProductDoc(selectedInferenceId); } }); }, [overlays, uninstallProductDoc, selectedInferenceId]); @@ -96,7 +73,7 @@ export function ProductDocEntry() { if (isStatusLoading) { return ; } - if (isInstalling) { + if (status === 'installing') { return ( @@ -109,7 +86,7 @@ export function ProductDocEntry() { ); } - if (isInstalled) { + if (status === 'installed') { return ( @@ -170,14 +147,7 @@ export function ProductDocEntry() { ); - }, [ - canInstallProductDoc, - isInstalled, - isInstalling, - isStatusLoading, - onClickInstall, - onClickUninstall, - ]); + }, [canInstallProductDoc, isStatusLoading, onClickInstall, onClickUninstall, status]); return ( - {productDocBase ? : undefined} + {productDocBase ? : undefined} {knowledgeBase.status.value?.enabled && connectors.connectors?.length ? (