diff --git a/package-lock.json b/package-lock.json index 1d26bdc779..0c99431506 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8579,9 +8579,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001731", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz", - "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==", + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", "dev": true, "funding": [ { diff --git a/src/autokitteh b/src/autokitteh index 3d8d84c7a3..bb6b5b9b68 160000 --- a/src/autokitteh +++ b/src/autokitteh @@ -1 +1 @@ -Subproject commit 3d8d84c7a31c56777f11c23d122cfed4bd865509 +Subproject commit bb6b5b9b68b4ae4765e0a572314d67863aba44b8 diff --git a/src/components/organisms/configuration/connections/integrations/index.ts b/src/components/organisms/configuration/connections/integrations/index.ts index f1a1437d76..fb6317e88e 100644 --- a/src/components/organisms/configuration/connections/integrations/index.ts +++ b/src/components/organisms/configuration/connections/integrations/index.ts @@ -71,3 +71,7 @@ export { NotionIntegrationAddForm, NotionIntegrationEditForm, } from "@components/organisms/configuration/connections/integrations/notion"; +export { + PydanticGatewayIntegrationAddForm, + PydanticGatewayIntegrationEditForm, +} from "@components/organisms/configuration/connections/integrations/pydanticgw"; diff --git a/src/components/organisms/configuration/connections/integrations/pydanticgw/add.tsx b/src/components/organisms/configuration/connections/integrations/pydanticgw/add.tsx new file mode 100644 index 0000000000..71b746aa22 --- /dev/null +++ b/src/components/organisms/configuration/connections/integrations/pydanticgw/add.tsx @@ -0,0 +1,81 @@ +import React, { useEffect } from "react"; + +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; + +import { IntegrationAddFormProps } from "@interfaces/components"; +import { ConnectionAuthType } from "@src/enums"; +import { Integrations } from "@src/enums/components"; +import { useConnectionForm } from "@src/hooks"; +import { pydanticgwIntegrationSchema } from "@validations"; + +import { Button, ErrorMessage, Input, Spinner } from "@components/atoms"; +import { Accordion } from "@components/molecules"; + +import { ExternalLinkIcon, FloppyDiskIcon } from "@assets/image/icons"; + +export const PydanticGatewayIntegrationAddForm = ({ + connectionId, + triggerParentFormSubmit, + onSuccess, + isOrgConnection, +}: IntegrationAddFormProps) => { + const { t } = useTranslation("integrations"); + + const { createConnection, errors, handleSubmit, isLoading, register } = useConnectionForm( + pydanticgwIntegrationSchema, + "create", + undefined, + onSuccess, + isOrgConnection + ); + + useEffect(() => { + if (connectionId) { + createConnection(connectionId, ConnectionAuthType.ApiKey, Integrations.pydanticgw); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [connectionId]); + + return ( +
+
+ + + {errors.api_key?.message as string} +
+ + + + {t("pydanticgw.information.documentation")} + + + + + + +
+ ); +}; diff --git a/src/components/organisms/configuration/connections/integrations/pydanticgw/edit.tsx b/src/components/organisms/configuration/connections/integrations/pydanticgw/edit.tsx new file mode 100644 index 0000000000..7182b58491 --- /dev/null +++ b/src/components/organisms/configuration/connections/integrations/pydanticgw/edit.tsx @@ -0,0 +1,70 @@ +import React, { useState } from "react"; + +import { useWatch } from "react-hook-form"; +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; + +import { useConnectionForm } from "@src/hooks"; +import { pydanticgwIntegrationSchema } from "@validations"; + +import { Button, ErrorMessage, SecretInput, Spinner } from "@components/atoms"; +import { Accordion } from "@components/molecules"; + +import { ExternalLinkIcon, FloppyDiskIcon } from "@assets/image/icons"; + +export const PydanticGatewayIntegrationEditForm = () => { + const { t } = useTranslation("integrations"); + const [lockState, setLockState] = useState(true); + const { control, errors, handleSubmit, isLoading, onSubmitEdit, register, setValue } = useConnectionForm( + pydanticgwIntegrationSchema, + "edit" + ); + + const apiKey = useWatch({ control, name: "api_key" }); + + return ( +
+
+ setValue("api_key", newValue)} + handleLockAction={setLockState} + isError={!!errors.api_key} + isLocked={lockState} + isRequired + label={t("pydanticgw.placeholders.apiKey")} + value={apiKey} + /> + + {errors.api_key?.message as string} +
+ + + + {t("pydanticgw.information.documentation")} + + + + + + +
+ ); +}; diff --git a/src/components/organisms/configuration/connections/integrations/pydanticgw/index.ts b/src/components/organisms/configuration/connections/integrations/pydanticgw/index.ts new file mode 100644 index 0000000000..d6386626e6 --- /dev/null +++ b/src/components/organisms/configuration/connections/integrations/pydanticgw/index.ts @@ -0,0 +1,2 @@ +export { PydanticGatewayIntegrationAddForm } from "./add"; +export { PydanticGatewayIntegrationEditForm } from "./edit"; diff --git a/src/constants/connections/addComponentsMapping.constants.ts b/src/constants/connections/addComponentsMapping.constants.ts index 70ab15ac80..dde22af52a 100644 --- a/src/constants/connections/addComponentsMapping.constants.ts +++ b/src/constants/connections/addComponentsMapping.constants.ts @@ -25,6 +25,7 @@ import { RedditIntegrationAddForm, PipedriveIntegrationAddForm, NotionIntegrationAddForm, + PydanticGatewayIntegrationAddForm, } from "@components/organisms/configuration/connections/integrations"; import { MicrosoftTeamsIntegrationAddForm } from "@components/organisms/configuration/connections/integrations/microsoft/teams"; @@ -57,4 +58,5 @@ export const integrationAddFormComponents: Partial = { label: "Notion", value: Integrations.notion, }, + pydanticgw: { + icon: HttpIcon, + label: "Pydantic Gateway", + value: Integrations.pydanticgw, + }, }; const shouldHideIntegration: Partial> = { diff --git a/src/locales/en/integrations/translation.json b/src/locales/en/integrations/translation.json index ff9fbe9d94..7652f4efbf 100644 --- a/src/locales/en/integrations/translation.json +++ b/src/locales/en/integrations/translation.json @@ -201,6 +201,14 @@ "devPlatform": "Anthropic developer platform" } }, + "pydanticgw": { + "placeholders": { + "apiKey": "API Key" + }, + "information": { + "documentation": "Pydantic Gateway documentation" + } + }, "gemini": { "placeholders": { "key": "Secret API Key" diff --git a/src/validations/connection.schema.ts b/src/validations/connection.schema.ts index 26a5179b33..81b65c42b0 100644 --- a/src/validations/connection.schema.ts +++ b/src/validations/connection.schema.ts @@ -151,6 +151,11 @@ export const anthropicIntegrationSchema = z.object({ auth_type: z.literal(ConnectionAuthType.ApiKey).default(ConnectionAuthType.ApiKey), }); +export const pydanticgwIntegrationSchema = z.object({ + api_key: z.string().min(1, "API Key is required"), + auth_type: z.literal(ConnectionAuthType.ApiKey).default(ConnectionAuthType.ApiKey), +}); + export const linearPrivateAuthIntegrationSchema = z.object({ client_id: z.string().min(1, "Client ID is required"), client_secret: z.string().min(1, "Client secret is required"), diff --git a/src/validations/index.ts b/src/validations/index.ts index 9669b9fa97..dd516d305b 100644 --- a/src/validations/index.ts +++ b/src/validations/index.ts @@ -19,6 +19,7 @@ export { googleFormsIntegrationSchema, asanaIntegrationSchema, anthropicIntegrationSchema, + pydanticgwIntegrationSchema, auth0IntegrationSchema, githubPrivateAuthIntegrationSchema, linearPrivateAuthIntegrationSchema,