import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import queryString from "query-string"; import { useCreateIntegration } from "@app/hooks/api"; import { Button, Card, CardTitle, FormControl, Input, Select, SelectItem } from "../../../components/v2"; import { useGetIntegrationAuthApps, useGetIntegrationAuthBitBucketWorkspaces, useGetIntegrationAuthById, } from "../../../hooks/api/integrationAuth"; import { useGetWorkspaceById } from "../../../hooks/api/workspace"; export default function BitBucketCreateIntegrationPage() { const router = useRouter(); const { mutateAsync } = useCreateIntegration(); const [targetAppId, setTargetAppId] = useState(""); const [targetEnvironmentId, setTargetEnvironmentId] = useState(""); const [selectedSourceEnvironment, setSelectedSourceEnvironment] = useState(""); const [secretPath, setSecretPath] = useState("/"); const [isLoading, setIsLoading] = useState(false); const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]); const { data: integrationAuth } = useGetIntegrationAuthById((integrationAuthId as string) ?? ""); const { data: workspace } = useGetWorkspaceById(localStorage.getItem("projectData.id") ?? ""); const { data: targetEnvironments } = useGetIntegrationAuthBitBucketWorkspaces((integrationAuthId as string) ?? ""); const { data: integrationAuthApps } = useGetIntegrationAuthApps({ integrationAuthId: (integrationAuthId as string) ?? "", workspaceSlug: targetEnvironmentId }); useEffect(() => { if (workspace) { setSelectedSourceEnvironment(workspace.environments[0].slug); } }, [workspace]); useEffect(() => { if (integrationAuthApps) { if (integrationAuthApps.length > 0) { setTargetAppId(integrationAuthApps[0].appId as string); } else { setTargetAppId("none"); } } }, [integrationAuthApps]); useEffect(() => { if (targetEnvironments) { if (targetEnvironments.length > 0) { setTargetEnvironmentId(targetEnvironments[0].slug); } else { setTargetEnvironmentId("none"); } } }, [targetEnvironments]); const handleButtonClick = async () => { try { setIsLoading(true); if (!integrationAuth?._id) return; const targetApp = integrationAuthApps?.find( (integrationAuthApp) => integrationAuthApp.appId === targetAppId ); const targetEnvironment = targetEnvironments?.find( (environment) => environment.slug === targetEnvironmentId ); if (!targetApp || !targetApp.appId || !targetEnvironment) return; await mutateAsync({ integrationAuthId: integrationAuth?._id, isActive: true, app: targetApp.name, appId: targetApp.appId, sourceEnvironment: selectedSourceEnvironment, targetEnvironment: targetEnvironment.name, targetEnvironmentId: targetEnvironment.slug, targetService: null, targetServiceId: null, owner: null, path: null, region: null, secretPath }); setIsLoading(false); router.push(`/integrations/${localStorage.getItem("projectData.id")}`); } catch (err) { console.error(err); } }; return integrationAuth && workspace && selectedSourceEnvironment && integrationAuthApps && targetEnvironments ? (
BitBucket Integration setSecretPath(evt.target.value)} placeholder="Provide a path, default is /" />
) : (
); } BitBucketCreateIntegrationPage.requireAuth = true;