import { keyBy } from 'lodash' import { useCallback, useMemo } from 'react' import { toast } from 'sonner' import { SidePanel } from 'ui' import { type ForeignProject } from '../../Integrations/VercelGithub/VercelGithub.types' import { ENV_VAR_RAW_KEYS } from '@/components/interfaces/Integrations/Vercel/Integrations-Vercel.constants' import { ProjectLinker } from '@/components/interfaces/Integrations/VercelGithub/ProjectLinker' import { Markdown } from '@/components/interfaces/Markdown' import { vercelIcon } from '@/components/to-be-cleaned/ListIcons' import { useOrgIntegrationsQuery } from '@/data/integrations/integrations-query-org-only' import { useIntegrationVercelConnectionsCreateMutation } from '@/data/integrations/integrations-vercel-connections-create-mutation' import { useVercelProjectsQuery } from '@/data/integrations/integrations-vercel-projects-query' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { BASE_PATH } from '@/lib/constants' import { EMPTY_ARR } from '@/lib/void' import { useSidePanelsStateSnapshot } from '@/state/side-panels' const VERCEL_ICON = ( ) export const SidePanelVercelProjectLinker = () => { const { data: selectedProject } = useSelectedProjectQuery() const { data: selectedOrganization } = useSelectedOrganizationQuery() const sidePanelStateSnapshot = useSidePanelsStateSnapshot() const organizationIntegrationId = sidePanelStateSnapshot.vercelConnectionsIntegrationId const { data: integrationData } = useOrgIntegrationsQuery({ orgSlug: selectedOrganization?.slug, }) const vercelIntegrations = integrationData?.filter( (integration) => integration.integration.name === 'Vercel' ) // vercel /** * Find the right integration * * we use the snapshot.organizationIntegrationId which should be set whenever this sidepanel is opened */ const selectedIntegration = vercelIntegrations?.find((x) => x.id === organizationIntegrationId) const { data: vercelProjectsData } = useVercelProjectsQuery( { organization_integration_id: organizationIntegrationId, }, { enabled: organizationIntegrationId !== undefined } ) const vercelProjects = useMemo(() => vercelProjectsData ?? EMPTY_ARR, [vercelProjectsData]) const vercelProjectsById = useMemo(() => keyBy(vercelProjects, 'id'), [vercelProjects]) const getForeignProjectIcon = useCallback( (_project: ForeignProject) => { const project = vercelProjectsById[_project.id] return !project?.framework ? ( vercelIcon ) : ( {`icon`} ) }, [vercelProjectsById] ) const { mutate: createConnections, isPending: isCreatingConnection } = useIntegrationVercelConnectionsCreateMutation({ async onSuccess({ env_sync_error: envSyncError }) { if (envSyncError) { toast.error( `Failed to sync environment variables: ${envSyncError.message}. Please try re-syncing manually from settings.` ) } sidePanelStateSnapshot.setVercelConnectionsOpen(false) }, }) const onCreateConnections = useCallback( (vars: any) => { createConnections({ ...vars, connection: { ...vars.connection, metadata: { ...vars.connection.metadata, supabaseConfig: { projectEnvVars: { write: true, }, }, }, }, }) }, [createConnections] ) return ( sidePanelStateSnapshot.setVercelConnectionsOpen(false)} >
{ return `\n - \`${x}\`` })} `} />
  • {/* */}
) }