"use client"; import { Loader2 } from "lucide-react"; import { useEffect, useState } from "react"; import { getProvider } from "@/actions/providers"; import { useProviderWizardStore } from "@/store/provider-wizard/store"; import { PROVIDER_WIZARD_MODE } from "@/types/provider-wizard"; import { TestConnectionForm, TestConnectionProviderData, } from "../../workflow/forms/test-connection-form"; import { WIZARD_FOOTER_ACTION_TYPE, WizardFooterConfig, } from "./footer-controls"; interface TestConnectionStepProps { onSuccess: () => void; onResetCredentials: () => void; onFooterChange: (config: WizardFooterConfig) => void; } export function TestConnectionStep({ onSuccess, onResetCredentials, onFooterChange, }: TestConnectionStepProps) { const { providerId, providerType, mode, setSecretId } = useProviderWizardStore(); const [providerData, setProviderData] = useState(null); const [isLoadingProvider, setIsLoadingProvider] = useState(true); const [isFormLoading, setIsFormLoading] = useState(false); const [errorMessage, setErrorMessage] = useState(null); const formId = "provider-wizard-test-connection-form"; useEffect(() => { let isMounted = true; async function loadProvider() { if (!providerId || !providerType) { setErrorMessage("Provider information is missing."); setIsLoadingProvider(false); return; } setIsLoadingProvider(true); setErrorMessage(null); const formData = new FormData(); formData.append("id", providerId); const response = await getProvider(formData); if (!isMounted) { return; } if (response?.errors?.length) { setErrorMessage( response.errors[0]?.detail || "Failed to load provider.", ); setSecretId(null); setProviderData(null); setIsLoadingProvider(false); return; } const resolvedSecretId = response?.data?.relationships?.secret?.data?.id ?? null; setSecretId(resolvedSecretId); setProviderData(response as TestConnectionProviderData); setIsLoadingProvider(false); } loadProvider(); return () => { isMounted = false; }; }, [providerId, providerType, setSecretId]); useEffect(() => { const canSubmit = !isLoadingProvider && !errorMessage && !!providerData; onFooterChange({ showBack: true, backLabel: "Back", backDisabled: isFormLoading, onBack: onResetCredentials, showAction: canSubmit, actionLabel: isFormLoading ? "Checking connection..." : "Check connection", actionDisabled: isFormLoading, actionType: WIZARD_FOOTER_ACTION_TYPE.SUBMIT, actionFormId: formId, }); }, [ errorMessage, isFormLoading, isLoadingProvider, mode, onFooterChange, onResetCredentials, providerData, ]); if (isLoadingProvider) { return (
); } if (errorMessage || !providerData || !providerId || !providerType) { return (

{errorMessage || "Unable to load provider details."}

); } return ( ); }