import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import { faArrowRight, 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 deleteIntegration from "../../pages/api/integrations/DeleteIntegration" import getIntegrationApps from "../../pages/api/integrations/GetIntegrationApps"; import updateIntegration from "../../pages/api/integrations/updateIntegration" import { contextNetlifyMapping, envMapping, reverseContextNetlifyMapping, reverseEnvMapping, } from "../../public/data/frequentConstants"; interface Integration { _id: string; app?: string; environment: string; integration: string; integrationAuth: string; isActive: boolean; context: string; } interface IntegrationApp { name: string; siteId: string; } const Integration = ({ integration }: { integration: Integration; }) => { const [integrationEnvironment, setIntegrationEnvironment] = useState( reverseEnvMapping[integration.environment] ); const [fileState, setFileState] = useState([]); const router = useRouter(); const [apps, setApps] = useState([]); // integration app objects const [integrationApp, setIntegrationApp] = useState(""); // integration app name const [integrationTarget, setIntegrationTarget] = useState(""); // vercel-specific integration param const [integrationContext, setIntegrationContext] = useState(""); // netlify-specific integration param useEffect(() => { const loadIntegration = async () => { interface App { name: string; siteId?: string; } const tempApps: [IntegrationApp] = await getIntegrationApps({ integrationAuthId: integration.integrationAuth, }); setApps(tempApps); setIntegrationApp( integration.app ? integration.app : tempApps[0].name ); switch (integration.integration) { case "vercel": setIntegrationTarget("Development"); break; case "netlify": setIntegrationContext(integration?.context ? contextNetlifyMapping[integration.context] : "Local development"); break; default: break; } } loadIntegration(); }, []); const renderIntegrationSpecificParams = (integration: Integration) => { try { switch (integration.integration) { case "vercel": return (
ENVIRONMENT
); case "netlify": return (
CONTEXT
); default: return
; } } catch (err) { console.error(err); } } if (!integrationApp || apps.length === 0) return
return (

ENVIRONMENT

{ setIntegrationEnvironment(environment); }} isFull={true} />

INTEGRATION

{integration.integration.charAt(0).toUpperCase() + integration.integration.slice(1)}
APP
app.name) : null} selected={integrationApp} onChange={(app) => { setIntegrationApp(app); }} />
{renderIntegrationSpecificParams(integration)}
{integration.isActive ? (
In Sync
) : (
); }; export default Integration;