"use client"; import { useEffect, useState } from "react"; import { getProviderFormType } from "@/lib/provider-helpers"; import { useProviderWizardStore } from "@/store/provider-wizard/store"; import { ProviderType } from "@/types/providers"; import { AddViaCredentialsForm, AddViaRoleForm, UpdateViaCredentialsForm, UpdateViaRoleForm, } from "../../workflow/forms"; import { SelectViaAlibabaCloud } from "../../workflow/forms/select-credentials-type/alibabacloud"; import { SelectViaAWS } from "../../workflow/forms/select-credentials-type/aws"; import { SelectViaCloudflare } from "../../workflow/forms/select-credentials-type/cloudflare"; import { AddViaServiceAccountForm, SelectViaGCP, } from "../../workflow/forms/select-credentials-type/gcp"; import { SelectViaGitHub } from "../../workflow/forms/select-credentials-type/github"; import { SelectViaM365 } from "../../workflow/forms/select-credentials-type/m365"; import { UpdateViaServiceAccountForm } from "../../workflow/forms/update-via-service-account-key-form"; import { WIZARD_FOOTER_ACTION_TYPE, WizardFooterConfig, } from "./footer-controls"; interface CredentialsStepProps { onNext: () => void; onBack: () => void; onFooterChange: (config: WizardFooterConfig) => void; } export function CredentialsStep({ onNext, onBack, onFooterChange, }: CredentialsStepProps) { const { providerId, providerType, providerUid, via, secretId, setVia } = useProviderWizardStore(); const [isFormLoading, setIsFormLoading] = useState(false); const [isFormValid, setIsFormValid] = useState(false); const formId = "provider-wizard-credentials-form"; const hasProviderContext = Boolean(providerType && providerId); const formType = providerType && providerId ? getProviderFormType(providerType, via || undefined) : null; const shouldUseUpdateForms = Boolean(secretId); const handleBack = () => { if (via) { setVia(null); return; } onBack(); }; const handleViaChange = (value: string) => { setVia(value); }; useEffect(() => { setIsFormValid(false); }, [formType, via]); useEffect(() => { if (!hasProviderContext) { onFooterChange({ showBack: true, backLabel: "Back", onBack, showAction: false, actionLabel: "Authenticate", actionType: WIZARD_FOOTER_ACTION_TYPE.BUTTON, }); return; } const isSelector = formType === "selector"; onFooterChange({ showBack: true, backLabel: "Back", backDisabled: isFormLoading, onBack: () => { if (via) { setVia(null); return; } onBack(); }, showAction: !isSelector, actionLabel: "Authenticate", actionDisabled: isFormLoading || !isFormValid, actionType: WIZARD_FOOTER_ACTION_TYPE.SUBMIT, actionFormId: formId, }); }, [ hasProviderContext, formType, formId, isFormLoading, isFormValid, onBack, onFooterChange, setVia, via, ]); if (!providerType || !providerId) { return (
Provider details are missing. Go back and select a provider.
Select a credential type to continue.