import React, { useEffect, useState } from "react"; import Head from "next/head"; import Image from "next/image"; import { useRouter } from "next/router"; import useTranslation from "next-translate/useTranslation"; import { faArrowRight, faCheck, faRotate, faX, } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import Button from "~/components/basic/buttons/Button"; import ListBox from "~/components/basic/Listbox"; import NavHeader from "~/components/navigation/NavHeader"; import getSecretsForProject from "~/components/utilities/secrets/getSecretsForProject"; import pushKeysIntegration from "~/components/utilities/secrets/pushKeysIntegration"; import guidGenerator from "~/utilities/randomId"; import deleteIntegration from "../api/integrations/DeleteIntegration"; import deleteIntegrationAuth from "../api/integrations/DeleteIntegrationAuth"; import getIntegrationApps from "../api/integrations/GetIntegrationApps"; import getIntegrations from "../api/integrations/GetIntegrations"; import getWorkspaceAuthorizations from "../api/integrations/getWorkspaceAuthorizations"; import getWorkspaceIntegrations from "../api/integrations/getWorkspaceIntegrations"; import startIntegration from "../api/integrations/StartIntegration"; const crypto = require("crypto"); const envMapping = { Development: "dev", Staging: "staging", Production: "prod", Testing: "test", }; const reverseEnvMapping = { dev: "Development", staging: "Staging", prod: "Production", test: "Testing", }; const Integration = ({ projectIntegration }) => { const [integrationEnvironment, setIntegrationEnvironment] = useState( reverseEnvMapping[projectIntegration.environment] ); const [fileState, setFileState] = useState([]); const [data, setData] = useState(); const [isKeyAvailable, setIsKeyAvailable] = useState(true); const router = useRouter(); const [apps, setApps] = useState([]); const [integrationApp, setIntegrationApp] = useState( projectIntegration.app ? projectIntegration.app : apps[0] ); const { t } = useTranslation(); useEffect(async () => { const tempHerokuApps = await getIntegrationApps({ integrationAuthId: projectIntegration.integrationAuth, }); const tempHerokuAppNames = tempHerokuApps.map((app) => app.name); setApps(tempHerokuAppNames); setIntegrationApp( projectIntegration.app ? projectIntegration.app : tempHerokuAppNames[0] ); }, []); return (
ENVIRONMENT
INTEGRATION
{projectIntegration.integration.charAt(0).toUpperCase() + projectIntegration.integration.slice(1)}
HEROKU APP
{projectIntegration.isActive ? (
In Sync
) : (
); }; export default function Integrations() { const [integrations, setIntegrations] = useState(); const [projectIntegrations, setProjectIntegrations] = useState(); const [authorizations, setAuthorizations] = useState(); const router = useRouter(); const [csrfToken, setCsrfToken] = useState(""); const { t } = useTranslation(); useEffect(async () => { const tempCSRFToken = crypto.randomBytes(16).toString("hex"); setCsrfToken(tempCSRFToken); localStorage.setItem("latestCSRFToken", tempCSRFToken); let projectAuthorizations = await getWorkspaceAuthorizations({ workspaceId: router.query.id, }); setAuthorizations(projectAuthorizations); const projectIntegrations = await getWorkspaceIntegrations({ workspaceId: router.query.id, }); setProjectIntegrations(projectIntegrations); try { const integrationsData = await getIntegrations(); setIntegrations(integrationsData); } catch (error) { console.log("Error", error); } }, []); return integrations ? (
<title> {t("common:head-title", { title: t("integrations:title") })}

{t("integrations:title")}

{t("integrations:description")}

{projectIntegrations.length > 0 ? ( projectIntegrations.map((projectIntegration) => ( )) ) : (
{t("integrations:no-integrations1")}
{t("integrations:no-integrations2")}
)}

{t("integrations:available")}

{t("integrations:available-text1")}

{t("integrations:available-text2")}

{Object.keys(integrations).map((integration) => (
integration logo {integrations[integration].name.split(" ").length > 2 ? (
{integrations[integration].name.split(" ")[0]}
{integrations[integration].name.split(" ")[1]}{" "} {integrations[integration].name.split(" ")[2]}
) : (
{integrations[integration].name}
)}
{["Heroku"].includes(integrations[integration].name) && authorizations .map((authorization) => authorization.integration) .includes(integrations[integration].name.toLowerCase()) && (
{ deleteIntegrationAuth({ integrationAuthId: authorizations .filter( (authorization) => authorization.integration == integrations[integration].name.toLowerCase() ) .map((authorization) => authorization._id)[0], }); router.reload(); }} className="cursor-pointer w-max bg-red py-0.5 px-2 rounded-b-md text-xs flex flex-row items-center opacity-0 group-hover:opacity-100 duration-200" > Revoke
Authorized
)} {!["Heroku"].includes(integrations[integration].name) && (
Coming Soon
)}
))}
) : (
loading animation
); } Integrations.requireAuth = true;