GithubSection.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // @ts-nocheck
  2. import { PermissionAction } from '@supabase/shared-types/out/constants'
  3. import { useParams } from 'common'
  4. import { useMemo } from 'react'
  5. import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
  6. import { IntegrationImageHandler } from '../IntegrationsSettings'
  7. import { GitHubIntegrationConnectionForm } from './GitHubIntegrationConnectionForm'
  8. import {
  9. ScaffoldContainer,
  10. ScaffoldSection,
  11. ScaffoldSectionContent,
  12. ScaffoldSectionDetail,
  13. } from '@/components/layouts/Scaffold'
  14. import NoPermission from '@/components/ui/NoPermission'
  15. import { useGitHubConnectionsQuery } from '@/data/integrations/github-connections-query'
  16. import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
  17. import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
  18. export const GitHubSection = () => {
  19. const { ref: projectRef } = useParams()
  20. const { data: organization } = useSelectedOrganizationQuery()
  21. const { can: canReadGitHubConnection, isLoading: isLoadingPermissions } =
  22. useAsyncCheckPermissions(PermissionAction.READ, 'integrations.github_connections')
  23. const { data: connections } = useGitHubConnectionsQuery(
  24. { organizationId: organization?.id },
  25. { enabled: !!projectRef && !!organization?.id }
  26. )
  27. const existingConnection = useMemo(
  28. () => connections?.find((c) => c.project.ref === projectRef),
  29. [connections, projectRef]
  30. )
  31. const GitHubTitle = `GitHub Integration`
  32. return (
  33. <ScaffoldContainer>
  34. <ScaffoldSection className="py-12">
  35. <ScaffoldSectionDetail title={GitHubTitle}>
  36. <p>Connect any of your GitHub repositories to a project.</p>
  37. <IntegrationImageHandler title="github" />
  38. </ScaffoldSectionDetail>
  39. <ScaffoldSectionContent>
  40. {isLoadingPermissions ? (
  41. <GenericSkeletonLoader />
  42. ) : !canReadGitHubConnection ? (
  43. <NoPermission resourceText="view this organization's GitHub connections" />
  44. ) : (
  45. <div className="space-y-6">
  46. <div className="space-y-1">
  47. <h3 className="text-sm font-medium text-foreground">
  48. How does the GitHub integration work?
  49. </h3>
  50. <p className="text-sm text-foreground-light">
  51. Connecting to GitHub allows you to sync preview branches with a chosen GitHub
  52. branch, keep your production branch in sync, and automatically create preview
  53. branches for every pull request.
  54. </p>
  55. </div>
  56. <div>
  57. <GitHubIntegrationConnectionForm connection={existingConnection} />
  58. </div>
  59. </div>
  60. )}
  61. </ScaffoldSectionContent>
  62. </ScaffoldSection>
  63. </ScaffoldContainer>
  64. )
  65. }