import { PermissionAction } from '@supabase/shared-types/out/constants' import { useMemo } from 'react' import { useGitHubAuthorizationQuery } from '@/data/integrations/github-authorization-query' import { useParams } from 'common' import { ScaffoldContainer, ScaffoldSection, ScaffoldSectionContent, ScaffoldSectionDetail, } from 'components/layouts/Scaffold' import NoPermission from 'components/ui/NoPermission' import { UpgradeToPro } from 'components/ui/UpgradeToPro' import { useGitHubConnectionsQuery } from 'data/integrations/github-connections-query' import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import { BASE_PATH, IS_PLATFORM } from 'lib/constants' import { GenericSkeletonLoader } from 'ui-patterns' import GitHubIntegrationConnectionForm from './GitHubIntegrationConnectionForm' const IntegrationImageHandler = ({ title }: { title: 'vercel' | 'github' }) => { return ( {`${title} ) } export const GitHubSection = () => { const { ref: projectRef } = useParams() const { data: organization } = useSelectedOrganizationQuery() const { can: canReadGitHubConnection, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(PermissionAction.READ, 'integrations.github_connections') const isProPlanAndUp = organization?.plan?.id !== 'free' const promptProPlanUpgrade = IS_PLATFORM && !isProPlanAndUp const { data: gitHubAuthorization } = useGitHubAuthorizationQuery() const { data: connections } = useGitHubConnectionsQuery( { organizationId: organization?.id }, { enabled: !!projectRef && !!organization?.id } ) const existingConnection = useMemo( () => connections?.find((c) => c.project.ref === projectRef), [connections, projectRef] ) const GitHubTitle = `GitHub Integration` return (

Connect any of your GitHub repositories to a project.

{isLoadingPermissions ? ( ) : !canReadGitHubConnection ? ( ) : (
How does the GitHub integration work?

Connecting to GitHub allows you to sync preview branches with a chosen GitHub branch, keep your production branch in sync, and automatically create preview branches for every pull request.

{promptProPlanUpgrade && (
)} {/* [Joshen] Show connection form if GH has already been authorized OR no GH authorization but on a paid plan */} {/* So this shouldn't render if there's no GH authorization and on a free plan */} {(!!gitHubAuthorization || !promptProPlanUpgrade) && ( )}
)}
) }