diff --git a/frontend/src/helpers/parseEnvVar.ts b/frontend/src/helpers/parseEnvVar.ts new file mode 100644 index 000000000..20e09a16f --- /dev/null +++ b/frontend/src/helpers/parseEnvVar.ts @@ -0,0 +1,26 @@ +/** Extracts the key and value from a passed in env string based on the provided delimiters. */ +export const getKeyValue = (pastedContent: string, delimiters: string[]) => { + let splitIndex = -1 + let key = "" + let value = "" + + for (const delimiter of delimiters) { + const idx = pastedContent.indexOf(delimiter) + + if (idx !== -1) { + splitIndex = idx + break; + } + } + + // if only key is pasted + if (splitIndex === -1) { + key = pastedContent.trim() + return { key, value: "" } + } + + key = pastedContent.slice(0, splitIndex).trim() + value = pastedContent.slice(splitIndex + 1).trim() + + return { key, value } +}; diff --git a/frontend/src/views/SecretMainPage/components/CreateSecretForm/CreateSecretForm.tsx b/frontend/src/views/SecretMainPage/components/CreateSecretForm/CreateSecretForm.tsx index d040bb859..17fad2b72 100644 --- a/frontend/src/views/SecretMainPage/components/CreateSecretForm/CreateSecretForm.tsx +++ b/frontend/src/views/SecretMainPage/components/CreateSecretForm/CreateSecretForm.tsx @@ -8,6 +8,7 @@ import { Button, FormControl, Input, Modal, ModalContent } from "@app/components import { InfisicalSecretInput } from "@app/components/v2/InfisicalSecretInput"; import { useCreateSecretV3 } from "@app/hooks/api"; import { SecretType } from "@app/hooks/api/types"; +import { getKeyValue } from '@app/helpers/parseEnvVar'; import { PopUpNames, usePopUpAction, usePopUpState } from "../../SecretMainPage.store"; @@ -77,16 +78,12 @@ export const CreateSecretForm = ({ const handlePaste = (e: ClipboardEvent) => { e.preventDefault(); - const pastedContent = e.clipboardData.getData('text'); - const splitIndex = pastedContent.indexOf("="); + const delimitters = [":", "="]; + const pastedContent = e.clipboardData.getData("text"); + const { key, value } = getKeyValue(pastedContent, delimitters); - if (splitIndex === -1) return - - const key = pastedContent.slice(0, splitIndex) - const value = pastedContent.slice(splitIndex + 1); - - setValue('key', key); - setValue('value', value); + setValue("key", key); + setValue("value", value); } return ( diff --git a/frontend/src/views/SecretOverviewPage/components/CreateSecretForm/CreateSecretForm.tsx b/frontend/src/views/SecretOverviewPage/components/CreateSecretForm/CreateSecretForm.tsx index 8c760bb6a..a38b3db91 100644 --- a/frontend/src/views/SecretOverviewPage/components/CreateSecretForm/CreateSecretForm.tsx +++ b/frontend/src/views/SecretOverviewPage/components/CreateSecretForm/CreateSecretForm.tsx @@ -20,6 +20,7 @@ import { InfisicalSecretInput } from "@app/components/v2/InfisicalSecretInput"; import { useWorkspace } from "@app/context"; import { useCreateFolder, useCreateSecretV3, useUpdateSecretV3 } from "@app/hooks/api"; import { SecretType,SecretV3RawSanitized } from "@app/hooks/api/types"; +import { getKeyValue } from '@app/helpers/parseEnvVar'; const typeSchema = z .object({ @@ -138,16 +139,12 @@ export const CreateSecretForm = ({ const handlePaste = (e: ClipboardEvent) => { e.preventDefault(); - const pastedContent = e.clipboardData.getData('text'); - const splitIndex = pastedContent.indexOf("="); + const delimitters = [":", "="]; + const pastedContent = e.clipboardData.getData("text"); + const { key, value } = getKeyValue(pastedContent, delimitters); - if (splitIndex === -1) return - - const key = pastedContent.slice(0, splitIndex) - const value = pastedContent.slice(splitIndex + 1); - - setValue('key', key); - setValue('value', value); + setValue("key", key); + setValue("value", value); } return (