From 3c5e45bf3f3d5e3b23733508f74233577ac9fc05 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Wed, 5 Mar 2025 09:47:24 -0500 Subject: [PATCH] show credentials in login block credential selector (#1887) Co-authored-by: Muhammed Salih Altun --- .../LoginNode/CredentialParameterSelector.tsx | 66 +++++++++++++++++-- .../editor/nodes/LoginNode/LoginNode.tsx | 2 +- .../workflows/hooks/useCredentialsQuery.ts | 11 +++- 3 files changed, 71 insertions(+), 8 deletions(-) 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 (