diff --git a/skyvern-frontend/src/routes/workflows/editor/nodes/LoginNode/CredentialParameterSelector.tsx b/skyvern-frontend/src/routes/workflows/editor/nodes/LoginNode/CredentialParameterSelector.tsx index aed355e0..eb9dca24 100644 --- a/skyvern-frontend/src/routes/workflows/editor/nodes/LoginNode/CredentialParameterSelector.tsx +++ b/skyvern-frontend/src/routes/workflows/editor/nodes/LoginNode/CredentialParameterSelector.tsx @@ -5,8 +5,11 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { Skeleton } from "@/components/ui/skeleton"; +import { useCredentialsQuery } from "@/routes/workflows/hooks/useCredentialsQuery"; +import CloudContext from "@/store/CloudContext"; +import { useContext, useId } from "react"; import { useWorkflowParametersState } from "../../useWorkflowParametersState"; -import { useId } from "react"; type Props = { value?: string; @@ -14,16 +17,67 @@ type Props = { }; function CredentialParameterSelector({ value, onChange }: Props) { - const [workflowParameters] = useWorkflowParametersState(); + const [workflowParameters, setWorkflowParameters] = + useWorkflowParametersState(); const credentialParameters = workflowParameters.filter( (parameter) => parameter.parameterType === "credential", ); + const isCloud = useContext(CloudContext); + const { data: credentials = [], isLoading } = useCredentialsQuery({ + enabled: isCloud, + }); const noneItemValue = useId(); + if (isCloud && isLoading) { + return ; + } + + const credentialOptions = credentials.map((credential) => ({ + label: credential.name, + value: credential.credential_id, + type: "credential", + })); + + const credentialParameterOptions = credentialParameters.map((parameter) => ({ + label: parameter.key, + value: parameter.key, + type: "parameter", + })); + + const filteredCredentialParameterOptions = credentialParameterOptions.filter( + (option) => + !credentialOptions.some( + (credential) => credential.value === option.value, + ), + ); + + const options = [...credentialOptions, ...filteredCredentialParameterOptions]; + return (