diff --git a/frontend/src/hooks/api/integrationAuth/index.tsx b/frontend/src/hooks/api/integrationAuth/index.tsx index e5e53c808..d6e1b11e3 100644 --- a/frontend/src/hooks/api/integrationAuth/index.tsx +++ b/frontend/src/hooks/api/integrationAuth/index.tsx @@ -1,4 +1,5 @@ export { + useAuthorizeIntegration, useDeleteIntegrationAuth, useGetIntegrationAuthApps, useGetIntegrationAuthBitBucketWorkspaces, @@ -7,4 +8,6 @@ export { useGetIntegrationAuthRailwayEnvironments, useGetIntegrationAuthRailwayServices, useGetIntegrationAuthTeams, - useGetIntegrationAuthVercelBranches} from "./queries"; + useGetIntegrationAuthVercelBranches, + useSaveIntegrationAccessToken +} from "./queries"; diff --git a/frontend/src/hooks/api/integrationAuth/queries.tsx b/frontend/src/hooks/api/integrationAuth/queries.tsx index bf9b5c940..1ec08d839 100644 --- a/frontend/src/hooks/api/integrationAuth/queries.tsx +++ b/frontend/src/hooks/api/integrationAuth/queries.tsx @@ -312,6 +312,69 @@ export const useGetIntegrationAuthNorthflankSecretGroups = ({ }); }; +export const useAuthorizeIntegration = () => { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async ({ + workspaceId, + code, + integration + }: { + workspaceId: string; + code: string; + integration: string; + }) => { + const { data: { integrationAuth } } = await apiRequest.post("/api/v1/integration-auth/oauth-token", { + workspaceId, + code, + integration + }); + + return integrationAuth; + }, + onSuccess: (res) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceAuthorization(res.workspace)); + } + }); +}; + +export const useSaveIntegrationAccessToken = () => { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async ({ + workspaceId, + integration, + accessId, + accessToken, + url, + namespace + }: { + workspaceId: string | null; + integration: string | undefined; + accessId: string | null; + accessToken: string; + url: string | null; + namespace: string | null; + }) => { + const { data: { integrationAuth } } = await apiRequest.post("/api/v1/integration-auth/access-token", { + workspaceId, + integration, + accessId, + accessToken, + url, + namespace + }); + + return integrationAuth; + }, + onSuccess: (res) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceAuthorization(res.workspace)); + } + }); +}; + export const useDeleteIntegrationAuth = () => { const queryClient = useQueryClient(); diff --git a/frontend/src/hooks/api/integrations/index.tsx b/frontend/src/hooks/api/integrations/index.tsx index 3ad1051f4..d0eb50ca6 100644 --- a/frontend/src/hooks/api/integrations/index.tsx +++ b/frontend/src/hooks/api/integrations/index.tsx @@ -1 +1,5 @@ -export { useDeleteIntegration,useGetCloudIntegrations } from "./queries"; +export { + useCreateIntegration, + useDeleteIntegration, + useGetCloudIntegrations +} from "./queries"; diff --git a/frontend/src/hooks/api/integrations/queries.tsx b/frontend/src/hooks/api/integrations/queries.tsx index c982659cb..bfca2f407 100644 --- a/frontend/src/hooks/api/integrations/queries.tsx +++ b/frontend/src/hooks/api/integrations/queries.tsx @@ -23,6 +23,63 @@ export const useGetCloudIntegrations = () => queryFn: () => fetchIntegrations() }); +export const useCreateIntegration = () => { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async ({ + integrationAuthId, + isActive, + app, + appId, + sourceEnvironment, + targetEnvironment, + targetEnvironmentId, + targetService, + targetServiceId, + owner, + path, + region, + secretPath + }: { + integrationAuthId: string; + isActive: boolean; + secretPath: string; + app: string | null; + appId: string | null; + sourceEnvironment: string; + targetEnvironment: string | null; + targetEnvironmentId: string | null; + targetService: string | null; + targetServiceId: string | null; + owner: string | null; + path: string | null; + region: string | null; + }) => { + const { data: { integration } } = await apiRequest.post("/api/v1/integration", { + integrationAuthId, + isActive, + app, + appId, + sourceEnvironment, + targetEnvironment, + targetEnvironmentId, + targetService, + targetServiceId, + owner, + path, + region, + secretPath + }); + + return integration; + }, + onSuccess: (res) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceIntegrations(res.workspace)); + } + }); +}; + export const useDeleteIntegration = () => { const queryClient = useQueryClient(); diff --git a/frontend/src/pages/api/integrations/ChangeHerokuConfigVars.ts b/frontend/src/pages/api/integrations/ChangeHerokuConfigVars.ts deleted file mode 100644 index 5d79ebc64..000000000 --- a/frontend/src/pages/api/integrations/ChangeHerokuConfigVars.ts +++ /dev/null @@ -1,37 +0,0 @@ -import SecurityClient from "@app/components/utilities/SecurityClient"; - -interface Props { - integrationId: string; - key: { encryptedKey: any; nonce: any }; - secrets: { - ciphertextKey: any; - ivKey: any; - tagKey: any; - hashKey: any; - ciphertextValue: any; - ivValue: any; - tagValue: any; - hashValue: any; - type: string; - }[]; -} - -const changeHerokuConfigVars = ({ integrationId, key, secrets }: Props) => - SecurityClient.fetchCall(`/api/v1/integration/${integrationId}/sync`, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - key, - secrets - }) - }).then(async (res) => { - if (res && res.status === 200) { - return res; - } - console.log("Failed to sync secrets to Heroku"); - return undefined; - }); - -export default changeHerokuConfigVars; diff --git a/frontend/src/pages/api/integrations/authorizeIntegration.ts b/frontend/src/pages/api/integrations/authorizeIntegration.ts deleted file mode 100644 index b80a6e36d..000000000 --- a/frontend/src/pages/api/integrations/authorizeIntegration.ts +++ /dev/null @@ -1,35 +0,0 @@ -import SecurityClient from "@app/components/utilities/SecurityClient"; - -interface Props { - workspaceId: string; - code: string; - integration: string; -} -/** - * This is the first step of the change password process (pake) - * @param {object} obj - * @param {object} obj.workspaceId - project id for which we want to authorize the integration - * @param {object} obj.code - * @param {object} obj.integration - integration which a user is trying to turn on - * @returns - */ -const AuthorizeIntegration = ({ workspaceId, code, integration }: Props) => - SecurityClient.fetchCall("/api/v1/integration-auth/oauth-token", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - workspaceId, - code, - integration - }) - }).then(async (res) => { - if (res && res.status === 200) { - return (await res.json()).integrationAuth; - } - console.log("Failed to authorize the integration"); - return undefined; - }); - -export default AuthorizeIntegration; diff --git a/frontend/src/pages/api/integrations/createIntegration.ts b/frontend/src/pages/api/integrations/createIntegration.ts deleted file mode 100644 index 9235e7176..000000000 --- a/frontend/src/pages/api/integrations/createIntegration.ts +++ /dev/null @@ -1,67 +0,0 @@ -import SecurityClient from "@app/components/utilities/SecurityClient"; - -interface Props { - integrationAuthId: string; - isActive: boolean; - secretPath: string; - app: string | null; - appId: string | null; - sourceEnvironment: string; - targetEnvironment: string | null; - targetEnvironmentId: string | null; - targetService: string | null; - targetServiceId: string | null; - owner: string | null; - path: string | null; - region: string | null; -} -/** - * This route creates a new integration based on the integration authorization with id [integrationAuthId] - * @param {Object} obj - * @param {String} obj.accessToken - id of integration authorization for which to create the integration - * @returns - */ -const createIntegration = ({ - integrationAuthId, - isActive, - app, - appId, - sourceEnvironment, - targetEnvironment, - targetEnvironmentId, - targetService, - targetServiceId, - owner, - path, - region, - secretPath, -}: Props) => - SecurityClient.fetchCall("/api/v1/integration", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - integrationAuthId, - isActive, - app, - appId, - sourceEnvironment, - targetEnvironment, - targetEnvironmentId, - targetService, - targetServiceId, - owner, - path, - region, - secretPath, - }) - }).then(async (res) => { - if (res && res.status === 200) { - return (await res.json()).integration; - } - console.log("Failed to create integration"); - return undefined; - }); - -export default createIntegration; diff --git a/frontend/src/pages/api/integrations/saveIntegrationAccessToken.ts b/frontend/src/pages/api/integrations/saveIntegrationAccessToken.ts deleted file mode 100644 index 5da617783..000000000 --- a/frontend/src/pages/api/integrations/saveIntegrationAccessToken.ts +++ /dev/null @@ -1,53 +0,0 @@ -import SecurityClient from "@app/components/utilities/SecurityClient"; - -interface Props { - workspaceId: string | null; - integration: string | undefined; - accessId: string | null; - accessToken: string; - url: string | null; - namespace: string | null; -} -/** - * This route creates a new integration authorization for integration [integration] - * that requires the user to input their access token manually (e.g. Render). It - * saves access token [accessToken] under that integration for workspace with id - * [workspaceId]. - * @param {Object} obj - * @param {String} obj.workspaceId - id of workspace to authorize integration for - * @param {String} obj.integration - integration - * @param {String} obj.accessToken - access token to save - * @param {String} obj.url - URL of the Vault instance - * @param {String} obj.namespace - Vault-specific namespace param - * @returns - */ -const saveIntegrationAccessToken = ({ - workspaceId, - integration, - accessId, - accessToken, - url, - namespace -}: Props) => - SecurityClient.fetchCall("/api/v1/integration-auth/access-token", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - workspaceId, - integration, - accessId, - accessToken, - url, - namespace - }) - }).then(async (res) => { - if (res && res.status === 200) { - return (await res.json()).integrationAuth; - } - console.log("Failed to save integration access details"); - return undefined; - }); - -export default saveIntegrationAccessToken; diff --git a/frontend/src/pages/integrations/aws-parameter-store/authorize.tsx b/frontend/src/pages/integrations/aws-parameter-store/authorize.tsx index 230c8b6ea..d71273fa5 100644 --- a/frontend/src/pages/integrations/aws-parameter-store/authorize.tsx +++ b/frontend/src/pages/integrations/aws-parameter-store/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function AWSParameterStoreAuthorizeIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [isLoading, setIsLoading] = useState(false); const [accessKey, setAccessKey] = useState(""); @@ -30,7 +35,7 @@ export default function AWSParameterStoreAuthorizeIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "aws-parameter-store", accessId: accessKey, diff --git a/frontend/src/pages/integrations/aws-parameter-store/create.tsx b/frontend/src/pages/integrations/aws-parameter-store/create.tsx index 6f7f45bc6..b537a9827 100644 --- a/frontend/src/pages/integrations/aws-parameter-store/create.tsx +++ b/frontend/src/pages/integrations/aws-parameter-store/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -13,7 +17,6 @@ import { } from "../../../components/v2"; import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; const awsRegions = [ { name: "US East (Ohio)", slug: "us-east-2" }, @@ -49,6 +52,7 @@ const awsRegions = [ export default function AWSParameterStoreCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -90,7 +94,7 @@ export default function AWSParameterStoreCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: null, diff --git a/frontend/src/pages/integrations/aws-secret-manager/authorize.tsx b/frontend/src/pages/integrations/aws-secret-manager/authorize.tsx index 664a66087..11da85224 100644 --- a/frontend/src/pages/integrations/aws-secret-manager/authorize.tsx +++ b/frontend/src/pages/integrations/aws-secret-manager/authorize.tsx @@ -1,11 +1,14 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { useSaveIntegrationAccessToken } from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function AWSSecretManagerCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [isLoading, setIsLoading] = useState(false); const [accessKey, setAccessKey] = useState(""); @@ -30,7 +33,7 @@ export default function AWSSecretManagerCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "aws-secret-manager", accessId: accessKey, diff --git a/frontend/src/pages/integrations/aws-secret-manager/create.tsx b/frontend/src/pages/integrations/aws-secret-manager/create.tsx index 7baab5813..b919a6daf 100644 --- a/frontend/src/pages/integrations/aws-secret-manager/create.tsx +++ b/frontend/src/pages/integrations/aws-secret-manager/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -13,7 +17,6 @@ import { } from "../../../components/v2"; import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; const awsRegions = [ { name: "US East (Ohio)", slug: "us-east-2" }, @@ -49,6 +52,7 @@ const awsRegions = [ export default function AWSSecretManagerCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -89,7 +93,7 @@ export default function AWSSecretManagerCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetSecretName.trim(), diff --git a/frontend/src/pages/integrations/azure-key-vault/create.tsx b/frontend/src/pages/integrations/azure-key-vault/create.tsx index 963fdf530..7bc6fc9f0 100644 --- a/frontend/src/pages/integrations/azure-key-vault/create.tsx +++ b/frontend/src/pages/integrations/azure-key-vault/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -13,10 +17,10 @@ import { } from "../../../components/v2"; import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function AzureKeyVaultCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -52,7 +56,7 @@ export default function AzureKeyVaultCreateIntegrationPage() { if (!integrationAuth?._id) return; setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: vaultBaseUrl, diff --git a/frontend/src/pages/integrations/azure-key-vault/oauth2/callback.tsx b/frontend/src/pages/integrations/azure-key-vault/oauth2/callback.tsx index 32364d85b..2f23f729f 100644 --- a/frontend/src/pages/integrations/azure-key-vault/oauth2/callback.tsx +++ b/frontend/src/pages/integrations/azure-key-vault/oauth2/callback.tsx @@ -2,10 +2,13 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; -import AuthorizeIntegration from "../../../api/integrations/authorizeIntegration"; +import { + useAuthorizeIntegration +} from "@app/hooks/api"; export default function AzureKeyVaultOAuth2CallbackPage() { const router = useRouter(); + const { mutateAsync } = useAuthorizeIntegration(); const { code, state } = queryString.parse(router.asPath.split("?")[1]); @@ -16,7 +19,7 @@ export default function AzureKeyVaultOAuth2CallbackPage() { if (state !== localStorage.getItem("latestCSRFToken")) return; localStorage.removeItem("latestCSRFToken"); - const integrationAuth = await AuthorizeIntegration({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id") as string, code: code as string, integration: "azure-key-vault" diff --git a/frontend/src/pages/integrations/bitbucket/create.tsx b/frontend/src/pages/integrations/bitbucket/create.tsx index 6bdc87f0d..1901360af 100644 --- a/frontend/src/pages/integrations/bitbucket/create.tsx +++ b/frontend/src/pages/integrations/bitbucket/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -17,10 +21,10 @@ import { useGetIntegrationAuthById, } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function BitBucketCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const [targetAppId, setTargetAppId] = useState(""); const [targetEnvironmentId, setTargetEnvironmentId] = useState(""); @@ -79,7 +83,7 @@ export default function BitBucketCreateIntegrationPage() { if (!targetApp || !targetApp.appId || !targetEnvironment) return; - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp.name, diff --git a/frontend/src/pages/integrations/bitbucket/oauth2/callback.tsx b/frontend/src/pages/integrations/bitbucket/oauth2/callback.tsx index 43a58bc6f..a7326722a 100644 --- a/frontend/src/pages/integrations/bitbucket/oauth2/callback.tsx +++ b/frontend/src/pages/integrations/bitbucket/oauth2/callback.tsx @@ -2,10 +2,13 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; -import AuthorizeIntegration from "../../../api/integrations/authorizeIntegration"; +import { + useAuthorizeIntegration +} from "@app/hooks/api"; export default function BitBucketOAuth2CallbackPage() { const router = useRouter(); + const { mutateAsync } = useAuthorizeIntegration(); const { code, state } = queryString.parse(router.asPath.split("?")[1]); useEffect(() => { @@ -15,7 +18,7 @@ export default function BitBucketOAuth2CallbackPage() { if (state !== localStorage.getItem("latestCSRFToken")) return; localStorage.removeItem("latestCSRFToken"); - const integrationAuth = await AuthorizeIntegration({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id") as string, code: code as string, integration: "bitbucket" diff --git a/frontend/src/pages/integrations/checkly/authorize.tsx b/frontend/src/pages/integrations/checkly/authorize.tsx index 73ad821aa..a20084c1b 100644 --- a/frontend/src/pages/integrations/checkly/authorize.tsx +++ b/frontend/src/pages/integrations/checkly/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function ChecklyCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [accessToken, setAccessToken] = useState(""); const [accessTokenErrorText, setAccessTokenErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function ChecklyCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "checkly", accessId: null, diff --git a/frontend/src/pages/integrations/checkly/create.tsx b/frontend/src/pages/integrations/checkly/create.tsx index 2ae0435cf..7f3b5397b 100644 --- a/frontend/src/pages/integrations/checkly/create.tsx +++ b/frontend/src/pages/integrations/checkly/create.tsx @@ -11,16 +11,19 @@ import { Select, SelectItem } from "@app/components/v2"; +import { + useCreateIntegration +} from "@app/hooks/api"; import { useGetIntegrationAuthApps, useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function ChecklyCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -62,7 +65,7 @@ export default function ChecklyCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/circleci/authorize.tsx b/frontend/src/pages/integrations/circleci/authorize.tsx index efb8a0ad9..e2d757897 100644 --- a/frontend/src/pages/integrations/circleci/authorize.tsx +++ b/frontend/src/pages/integrations/circleci/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function CircleCICreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function CircleCICreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "circleci", accessToken: apiKey, diff --git a/frontend/src/pages/integrations/circleci/create.tsx b/frontend/src/pages/integrations/circleci/create.tsx index 162cd565c..199b4bece 100644 --- a/frontend/src/pages/integrations/circleci/create.tsx +++ b/frontend/src/pages/integrations/circleci/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function CircleCICreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -58,7 +62,7 @@ export default function CircleCICreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/cloud-66/authorize.tsx b/frontend/src/pages/integrations/cloud-66/authorize.tsx index 8c6434936..0697e7fd1 100644 --- a/frontend/src/pages/integrations/cloud-66/authorize.tsx +++ b/frontend/src/pages/integrations/cloud-66/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function Cloud66CreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function Cloud66CreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "cloud-66", accessId: null, diff --git a/frontend/src/pages/integrations/cloud-66/create.tsx b/frontend/src/pages/integrations/cloud-66/create.tsx index dbf566464..76e874542 100644 --- a/frontend/src/pages/integrations/cloud-66/create.tsx +++ b/frontend/src/pages/integrations/cloud-66/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById, } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function Cloud66CreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -56,7 +60,7 @@ export default function Cloud66CreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx index 6e4b134d1..d63a3de43 100644 --- a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx +++ b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button,Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function CloudflarePagesIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [accessKey, setAccessKey] = useState(""); const [accessKeyErrorText, setAccessKeyErrorText] = useState(""); const [accountId, setAccountId] = useState(""); @@ -24,7 +29,7 @@ export default function CloudflarePagesIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "cloudflare-pages", accessId: accountId, diff --git a/frontend/src/pages/integrations/cloudflare-pages/create.tsx b/frontend/src/pages/integrations/cloudflare-pages/create.tsx index 6b7bc8d3c..49ea9b191 100644 --- a/frontend/src/pages/integrations/cloudflare-pages/create.tsx +++ b/frontend/src/pages/integrations/cloudflare-pages/create.tsx @@ -2,10 +2,12 @@ import { useEffect,useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +, useGetWorkspaceById } from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Select, SelectItem } from "../../../components/v2"; -import { useGetWorkspaceById } from "../../../hooks/api"; import { useGetIntegrationAuthApps, useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; -import createIntegration from "../../api/integrations/createIntegration"; const cloudflareEnvironments = [ { name: "Production", slug: "production" }, @@ -14,6 +16,7 @@ const cloudflareEnvironments = [ export default function CloudflarePagesIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); const { data: workspace } = useGetWorkspaceById(localStorage.getItem("projectData.id") ?? ""); @@ -54,7 +57,7 @@ export default function CloudflarePagesIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/codefresh/authorize.tsx b/frontend/src/pages/integrations/codefresh/authorize.tsx index 17416ffab..67d857bdb 100644 --- a/frontend/src/pages/integrations/codefresh/authorize.tsx +++ b/frontend/src/pages/integrations/codefresh/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function CodefreshCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function CodefreshCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "codefresh", accessId: null, diff --git a/frontend/src/pages/integrations/codefresh/create.tsx b/frontend/src/pages/integrations/codefresh/create.tsx index 214487b6e..550fac89d 100644 --- a/frontend/src/pages/integrations/codefresh/create.tsx +++ b/frontend/src/pages/integrations/codefresh/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function CodefreshCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -56,7 +60,7 @@ export default function CodefreshCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/digital-ocean-app-platform/authorize.tsx b/frontend/src/pages/integrations/digital-ocean-app-platform/authorize.tsx index 9c3912b2e..3d410efd5 100644 --- a/frontend/src/pages/integrations/digital-ocean-app-platform/authorize.tsx +++ b/frontend/src/pages/integrations/digital-ocean-app-platform/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function DigitalOceanAppPlatformCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function DigitalOceanAppPlatformCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "digital-ocean-app-platform", accessId: null, diff --git a/frontend/src/pages/integrations/digital-ocean-app-platform/create.tsx b/frontend/src/pages/integrations/digital-ocean-app-platform/create.tsx index 925729c94..1a5968007 100644 --- a/frontend/src/pages/integrations/digital-ocean-app-platform/create.tsx +++ b/frontend/src/pages/integrations/digital-ocean-app-platform/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function DigitalOceanAppPlatformCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -56,7 +60,7 @@ export default function DigitalOceanAppPlatformCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/flyio/authorize.tsx b/frontend/src/pages/integrations/flyio/authorize.tsx index 9424471ef..b8b0884f6 100644 --- a/frontend/src/pages/integrations/flyio/authorize.tsx +++ b/frontend/src/pages/integrations/flyio/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function FlyioCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [accessToken, setAccessToken] = useState(""); const [accessTokenErrorText, setAccessTokenErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function FlyioCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "flyio", accessId: null, diff --git a/frontend/src/pages/integrations/flyio/create.tsx b/frontend/src/pages/integrations/flyio/create.tsx index 2eeb7f823..b0549cc58 100644 --- a/frontend/src/pages/integrations/flyio/create.tsx +++ b/frontend/src/pages/integrations/flyio/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function FlyioCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -59,7 +63,7 @@ export default function FlyioCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/github/create.tsx b/frontend/src/pages/integrations/github/create.tsx index 9344996ab..885155570 100644 --- a/frontend/src/pages/integrations/github/create.tsx +++ b/frontend/src/pages/integrations/github/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function GitHubCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -63,7 +67,7 @@ export default function GitHubCreateIntegrationPage() { if (!targetApp || !targetApp.owner) return; - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp.name, diff --git a/frontend/src/pages/integrations/github/oauth2/callback.tsx b/frontend/src/pages/integrations/github/oauth2/callback.tsx index 7ad1aa2bb..d93e02478 100644 --- a/frontend/src/pages/integrations/github/oauth2/callback.tsx +++ b/frontend/src/pages/integrations/github/oauth2/callback.tsx @@ -2,10 +2,14 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; -import AuthorizeIntegration from "../../../api/integrations/authorizeIntegration"; +import { + useAuthorizeIntegration +} from "@app/hooks/api"; export default function GitHubOAuth2CallbackPage() { const router = useRouter(); + const { mutateAsync } = useAuthorizeIntegration(); + const { code, state } = queryString.parse(router.asPath.split("?")[1]); useEffect(() => { @@ -15,7 +19,7 @@ export default function GitHubOAuth2CallbackPage() { if (state !== localStorage.getItem("latestCSRFToken")) return; localStorage.removeItem("latestCSRFToken"); - const integrationAuth = await AuthorizeIntegration({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id") as string, code: code as string, integration: "github" diff --git a/frontend/src/pages/integrations/gitlab/create.tsx b/frontend/src/pages/integrations/gitlab/create.tsx index ca90e3c1a..57524ef1e 100644 --- a/frontend/src/pages/integrations/gitlab/create.tsx +++ b/frontend/src/pages/integrations/gitlab/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -17,7 +21,6 @@ import { useGetIntegrationAuthTeams } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; const gitLabEntities = [ { name: "Individual", value: "individual" }, @@ -26,6 +29,7 @@ const gitLabEntities = [ export default function GitLabCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -87,7 +91,7 @@ export default function GitLabCreateIntegrationPage() { setIsLoading(true); if (!integrationAuth?._id) return; - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: diff --git a/frontend/src/pages/integrations/gitlab/oauth2/callback.tsx b/frontend/src/pages/integrations/gitlab/oauth2/callback.tsx index 27c4c0672..4df89f072 100644 --- a/frontend/src/pages/integrations/gitlab/oauth2/callback.tsx +++ b/frontend/src/pages/integrations/gitlab/oauth2/callback.tsx @@ -2,10 +2,14 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; -import AuthorizeIntegration from "../../../api/integrations/authorizeIntegration"; +import { + useAuthorizeIntegration +} from "@app/hooks/api"; export default function GitLabOAuth2CallbackPage() { const router = useRouter(); + const { mutateAsync } = useAuthorizeIntegration(); + const { code, state } = queryString.parse(router.asPath.split("?")[1]); useEffect(() => { (async () => { @@ -14,7 +18,7 @@ export default function GitLabOAuth2CallbackPage() { if (state !== localStorage.getItem("latestCSRFToken")) return; localStorage.removeItem("latestCSRFToken"); - const integrationAuth = await AuthorizeIntegration({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id") as string, code: code as string, integration: "gitlab" diff --git a/frontend/src/pages/integrations/hashicorp-vault/authorize.tsx b/frontend/src/pages/integrations/hashicorp-vault/authorize.tsx index 6857fd59e..948e17e0f 100644 --- a/frontend/src/pages/integrations/hashicorp-vault/authorize.tsx +++ b/frontend/src/pages/integrations/hashicorp-vault/authorize.tsx @@ -1,11 +1,15 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function HashiCorpVaultAuthorizeIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); const [vaultURL, setVaultURL] = useState(""); const [vaultURLErrorText, setVaultURLErrorText] = useState(""); @@ -57,7 +61,7 @@ export default function HashiCorpVaultAuthorizeIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "hashicorp-vault", accessId: vaultRoleID, diff --git a/frontend/src/pages/integrations/hashicorp-vault/create.tsx b/frontend/src/pages/integrations/hashicorp-vault/create.tsx index 0287a5c99..0fb973851 100644 --- a/frontend/src/pages/integrations/hashicorp-vault/create.tsx +++ b/frontend/src/pages/integrations/hashicorp-vault/create.tsx @@ -2,6 +2,10 @@ import { useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -13,10 +17,10 @@ import { } from "../../../components/v2"; import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function HashiCorpVaultCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -57,7 +61,7 @@ export default function HashiCorpVaultCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: vaultEnginePath, diff --git a/frontend/src/pages/integrations/heroku/create.tsx b/frontend/src/pages/integrations/heroku/create.tsx index b6f272dbc..9bce95a0d 100644 --- a/frontend/src/pages/integrations/heroku/create.tsx +++ b/frontend/src/pages/integrations/heroku/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function HerokuCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -57,7 +61,7 @@ export default function HerokuCreateIntegrationPage() { if (!integrationAuth?._id) return; - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/heroku/oauth2/callback.tsx b/frontend/src/pages/integrations/heroku/oauth2/callback.tsx index b213b2b1d..a3a978a6a 100644 --- a/frontend/src/pages/integrations/heroku/oauth2/callback.tsx +++ b/frontend/src/pages/integrations/heroku/oauth2/callback.tsx @@ -2,10 +2,13 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; -import AuthorizeIntegration from "../../../api/integrations/authorizeIntegration"; +import { + useAuthorizeIntegration +} from "@app/hooks/api"; export default function HerokuOAuth2CallbackPage() { const router = useRouter(); + const { mutateAsync } = useAuthorizeIntegration(); const { code, state } = queryString.parse(router.asPath.split("?")[1]); @@ -15,7 +18,7 @@ export default function HerokuOAuth2CallbackPage() { // validate state if (state !== localStorage.getItem("latestCSRFToken")) return; localStorage.removeItem("latestCSRFToken"); - const integrationAuth = await AuthorizeIntegration({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id") as string, code: code as string, integration: "heroku" diff --git a/frontend/src/pages/integrations/laravel-forge/authorize.tsx b/frontend/src/pages/integrations/laravel-forge/authorize.tsx index d69b263e9..98c5569c1 100644 --- a/frontend/src/pages/integrations/laravel-forge/authorize.tsx +++ b/frontend/src/pages/integrations/laravel-forge/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function LaravelForgeCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [serverId, setServerId] = useState(""); @@ -29,7 +34,7 @@ export default function LaravelForgeCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "laravel-forge", accessId: serverId, diff --git a/frontend/src/pages/integrations/laravel-forge/create.tsx b/frontend/src/pages/integrations/laravel-forge/create.tsx index acfeb6932..b1090c442 100644 --- a/frontend/src/pages/integrations/laravel-forge/create.tsx +++ b/frontend/src/pages/integrations/laravel-forge/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function LaravelForgeCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -56,7 +60,7 @@ export default function LaravelForgeCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/netlify/create.tsx b/frontend/src/pages/integrations/netlify/create.tsx index 9d5dbb280..0a729c076 100644 --- a/frontend/src/pages/integrations/netlify/create.tsx +++ b/frontend/src/pages/integrations/netlify/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,7 +20,6 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; const netlifyEnvironments = [ { name: "Local development", slug: "dev" }, @@ -27,6 +30,7 @@ const netlifyEnvironments = [ export default function NetlifyCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -65,7 +69,7 @@ export default function NetlifyCreateIntegrationPage() { if (!integrationAuth?._id) return; - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/netlify/oauth2/callback.tsx b/frontend/src/pages/integrations/netlify/oauth2/callback.tsx index c74e03127..a3d680adc 100644 --- a/frontend/src/pages/integrations/netlify/oauth2/callback.tsx +++ b/frontend/src/pages/integrations/netlify/oauth2/callback.tsx @@ -2,10 +2,13 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; -import AuthorizeIntegration from "../../../api/integrations/authorizeIntegration"; +import { + useAuthorizeIntegration +} from "@app/hooks/api"; export default function NetlifyOAuth2CallbackPage() { const router = useRouter(); + const { mutateAsync } = useAuthorizeIntegration(); const { code, state } = queryString.parse(router.asPath.split("?")[1]); @@ -16,7 +19,7 @@ export default function NetlifyOAuth2CallbackPage() { if (state !== localStorage.getItem("latestCSRFToken")) return; localStorage.removeItem("latestCSRFToken"); - const integrationAuth = await AuthorizeIntegration({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id") as string, code: code as string, integration: "netlify" diff --git a/frontend/src/pages/integrations/northflank/authorize.tsx b/frontend/src/pages/integrations/northflank/authorize.tsx index 8e2baa3cb..636fb5ad3 100644 --- a/frontend/src/pages/integrations/northflank/authorize.tsx +++ b/frontend/src/pages/integrations/northflank/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function NorthflankCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function NorthflankCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "northflank", accessToken: apiKey, diff --git a/frontend/src/pages/integrations/northflank/create.tsx b/frontend/src/pages/integrations/northflank/create.tsx index 4ebcf95ec..ac6c0f0aa 100644 --- a/frontend/src/pages/integrations/northflank/create.tsx +++ b/frontend/src/pages/integrations/northflank/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -17,10 +21,10 @@ import { useGetIntegrationAuthNorthflankSecretGroups } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function NorthflankCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const [selectedSourceEnvironment, setSelectedSourceEnvironment] = useState(""); const [secretPath, setSecretPath] = useState("/"); @@ -78,7 +82,7 @@ export default function NorthflankCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: integrationAuthApps?.find( diff --git a/frontend/src/pages/integrations/railway/authorize.tsx b/frontend/src/pages/integrations/railway/authorize.tsx index c145048d6..498b86ab1 100644 --- a/frontend/src/pages/integrations/railway/authorize.tsx +++ b/frontend/src/pages/integrations/railway/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function RailwayAuthorizeIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function RailwayAuthorizeIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "railway", accessId: null, diff --git a/frontend/src/pages/integrations/railway/create.tsx b/frontend/src/pages/integrations/railway/create.tsx index 44b5ff232..4029f51a1 100644 --- a/frontend/src/pages/integrations/railway/create.tsx +++ b/frontend/src/pages/integrations/railway/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -18,10 +22,10 @@ import { useGetIntegrationAuthRailwayServices } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function RailwayCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const [targetAppId, setTargetAppId] = useState(""); const [targetEnvironmentId, setTargetEnvironmentId] = useState(""); @@ -96,7 +100,7 @@ export default function RailwayCreateIntegrationPage() { (service) => service.serviceId === targetServiceId ); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp.name, diff --git a/frontend/src/pages/integrations/render/authorize.tsx b/frontend/src/pages/integrations/render/authorize.tsx index 376d8fd8f..e20663a05 100644 --- a/frontend/src/pages/integrations/render/authorize.tsx +++ b/frontend/src/pages/integrations/render/authorize.tsx @@ -1,11 +1,14 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { useSaveIntegrationAccessToken} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function RenderCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +23,7 @@ export default function RenderCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "render", accessId: null, diff --git a/frontend/src/pages/integrations/render/create.tsx b/frontend/src/pages/integrations/render/create.tsx index 087682dde..fc347f835 100644 --- a/frontend/src/pages/integrations/render/create.tsx +++ b/frontend/src/pages/integrations/render/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function RenderCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -56,7 +60,7 @@ export default function RenderCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/supabase/authorize.tsx b/frontend/src/pages/integrations/supabase/authorize.tsx index 1c411a487..f580aacab 100644 --- a/frontend/src/pages/integrations/supabase/authorize.tsx +++ b/frontend/src/pages/integrations/supabase/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function SupabaseCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function SupabaseCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "supabase", accessToken: apiKey, diff --git a/frontend/src/pages/integrations/supabase/create.tsx b/frontend/src/pages/integrations/supabase/create.tsx index a759e2ab9..0b9332918 100644 --- a/frontend/src/pages/integrations/supabase/create.tsx +++ b/frontend/src/pages/integrations/supabase/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function SupabaseCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -57,7 +61,7 @@ export default function SupabaseCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/teamcity/authorize.tsx b/frontend/src/pages/integrations/teamcity/authorize.tsx index b417e3c19..da48730b4 100644 --- a/frontend/src/pages/integrations/teamcity/authorize.tsx +++ b/frontend/src/pages/integrations/teamcity/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function TeamCityCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [serverUrl, setServerUrl] = useState(""); @@ -29,7 +34,7 @@ export default function TeamCityCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "teamcity", accessId: null, diff --git a/frontend/src/pages/integrations/teamcity/create.tsx b/frontend/src/pages/integrations/teamcity/create.tsx index a2aa86db4..a6282af92 100644 --- a/frontend/src/pages/integrations/teamcity/create.tsx +++ b/frontend/src/pages/integrations/teamcity/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function TeamCityCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -56,7 +60,7 @@ export default function TeamCityCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/terraform-cloud/authorize.tsx b/frontend/src/pages/integrations/terraform-cloud/authorize.tsx index c569bdcca..aba5152a0 100644 --- a/frontend/src/pages/integrations/terraform-cloud/authorize.tsx +++ b/frontend/src/pages/integrations/terraform-cloud/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function TerraformCloudCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [workspacesId, setWorkSpacesId] = useState(""); @@ -29,7 +34,7 @@ export default function TerraformCloudCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "terraform-cloud", accessId: workspacesId, diff --git a/frontend/src/pages/integrations/terraform-cloud/create.tsx b/frontend/src/pages/integrations/terraform-cloud/create.tsx index 47c33948c..6245265a0 100644 --- a/frontend/src/pages/integrations/terraform-cloud/create.tsx +++ b/frontend/src/pages/integrations/terraform-cloud/create.tsx @@ -2,6 +2,8 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { useCreateIntegration } from "@app/hooks/api"; + import { Button, Card, @@ -16,7 +18,6 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; const variableTypes = [ { name: "env" }, @@ -25,6 +26,7 @@ const variableTypes = [ export default function TerraformCloudCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -70,7 +72,7 @@ export default function TerraformCloudCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/travisci/authorize.tsx b/frontend/src/pages/integrations/travisci/authorize.tsx index ec285d8aa..8c688c981 100644 --- a/frontend/src/pages/integrations/travisci/authorize.tsx +++ b/frontend/src/pages/integrations/travisci/authorize.tsx @@ -1,11 +1,16 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function TravisCICreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -20,7 +25,7 @@ export default function TravisCICreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "travisci", accessToken: apiKey, diff --git a/frontend/src/pages/integrations/travisci/create.tsx b/frontend/src/pages/integrations/travisci/create.tsx index 5708bea08..5f83b35d2 100644 --- a/frontend/src/pages/integrations/travisci/create.tsx +++ b/frontend/src/pages/integrations/travisci/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function TravisCICreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -56,7 +60,7 @@ export default function TravisCICreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp, diff --git a/frontend/src/pages/integrations/vercel/create.tsx b/frontend/src/pages/integrations/vercel/create.tsx index 18c1835f6..39791d6c9 100644 --- a/frontend/src/pages/integrations/vercel/create.tsx +++ b/frontend/src/pages/integrations/vercel/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -17,7 +21,6 @@ import { useGetIntegrationAuthVercelBranches } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; const vercelEnvironments = [ { name: "Development", slug: "development" }, @@ -27,6 +30,7 @@ const vercelEnvironments = [ export default function VercelCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const [selectedSourceEnvironment, setSelectedSourceEnvironment] = useState(""); const [secretPath, setSecretPath] = useState("/"); @@ -81,7 +85,7 @@ export default function VercelCreateIntegrationPage() { const path = targetEnvironment === "preview" && targetBranch !== "" ? targetBranch : null; - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp.name, diff --git a/frontend/src/pages/integrations/vercel/oauth2/callback.tsx b/frontend/src/pages/integrations/vercel/oauth2/callback.tsx index ebde5869a..dd884d8b0 100644 --- a/frontend/src/pages/integrations/vercel/oauth2/callback.tsx +++ b/frontend/src/pages/integrations/vercel/oauth2/callback.tsx @@ -2,10 +2,13 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; -import AuthorizeIntegration from "../../../api/integrations/authorizeIntegration"; +import { + useAuthorizeIntegration +} from "@app/hooks/api"; export default function VercelOAuth2CallbackPage() { const router = useRouter(); + const { mutateAsync } = useAuthorizeIntegration(); const { code, state } = queryString.parse(router.asPath.split("?")[1]); @@ -15,8 +18,8 @@ export default function VercelOAuth2CallbackPage() { // validate state if (state !== localStorage.getItem("latestCSRFToken")) return; localStorage.removeItem("latestCSRFToken"); - - const integrationAuth = await AuthorizeIntegration({ + + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id") as string, code: code as string, integration: "vercel" diff --git a/frontend/src/pages/integrations/windmill/authorize.tsx b/frontend/src/pages/integrations/windmill/authorize.tsx index f1dbf4a7c..11aece281 100644 --- a/frontend/src/pages/integrations/windmill/authorize.tsx +++ b/frontend/src/pages/integrations/windmill/authorize.tsx @@ -1,12 +1,17 @@ import { useState } from "react"; import { useRouter } from "next/router"; +import { + useSaveIntegrationAccessToken +} from "@app/hooks/api"; + import { Button, Card, CardTitle, FormControl, Input } from "../../../components/v2"; -import saveIntegrationAccessToken from "../../api/integrations/saveIntegrationAccessToken"; export default function WindmillCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useSaveIntegrationAccessToken(); + const [apiKey, setApiKey] = useState(""); const [apiKeyErrorText, setApiKeyErrorText] = useState(""); const [isLoading, setIsLoading] = useState(false); @@ -21,7 +26,7 @@ export default function WindmillCreateIntegrationPage() { setIsLoading(true); - const integrationAuth = await saveIntegrationAccessToken({ + const integrationAuth = await mutateAsync({ workspaceId: localStorage.getItem("projectData.id"), integration: "windmill", accessToken: apiKey, diff --git a/frontend/src/pages/integrations/windmill/create.tsx b/frontend/src/pages/integrations/windmill/create.tsx index a6cb6f8eb..66559d020 100644 --- a/frontend/src/pages/integrations/windmill/create.tsx +++ b/frontend/src/pages/integrations/windmill/create.tsx @@ -2,6 +2,10 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; +import { + useCreateIntegration +} from "@app/hooks/api"; + import { Button, Card, @@ -16,10 +20,10 @@ import { useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; -import createIntegration from "../../api/integrations/createIntegration"; export default function WindmillCreateIntegrationPage() { const router = useRouter(); + const { mutateAsync } = useCreateIntegration(); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); @@ -57,7 +61,7 @@ export default function WindmillCreateIntegrationPage() { setIsLoading(true); - await createIntegration({ + await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp,