import { SupportCategories } from '@supabase/shared-types/out/constants' import { useFlag, useParams } from 'common' import { AlertCircle } from 'lucide-react' import { Card, CardContent } from 'ui' import { PageSection, PageSectionContent, PageSectionDescription, PageSectionMeta, PageSectionSummary, PageSectionTitle, } from 'ui-patterns/PageSection' import { CustomDomainActivate } from './CustomDomainActivate' import { CustomDomainDelete } from './CustomDomainDelete' import { CustomDomainsConfigureHostname } from './CustomDomainsConfigureHostname' import { CustomDomainsShimmerLoader } from './CustomDomainsShimmerLoader' import { CustomDomainVerify } from './CustomDomainVerify' import { SupportLink } from '@/components/interfaces/Support/SupportLink' import { InlineLinkClassName } from '@/components/ui/InlineLink' import { UpgradeToPro } from '@/components/ui/UpgradeToPro' import { useCustomDomainsQuery, type CustomDomainsData, } from '@/data/custom-domains/custom-domains-query' import { useProjectAddonsQuery } from '@/data/subscriptions/project-addons-query' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' export const CustomDomainConfig = () => { const { ref } = useParams() const { data: organization } = useSelectedOrganizationQuery() const customDomainsDisabledDueToQuota = useFlag('customDomainsDisabledDueToQuota') const plan = organization?.plan?.id const { data: addons, isPending: isLoadingAddons } = useProjectAddonsQuery({ projectRef: ref }) const hasCustomDomainAddon = !!addons?.selected_addons.find((x) => x.type === 'custom_domain') const { data: customDomainData, isPending: isCustomDomainsLoading, isError, isSuccess, status: customDomainStatus, } = useCustomDomainsQuery( { projectRef: ref }, { refetchInterval: (query) => { const data = query.state.data // while setting up the ssl certificate, we want to poll every 5 seconds if (data?.customDomain?.ssl.status) { return 10000 // 10 seconds } return false }, } ) const { status } = customDomainData || {} return ( Custom domains Present a branded experience to your users {isLoadingAddons ? ( ) : !hasCustomDomainAddon ? ( ) : isCustomDomainsLoading ? ( ) : isError ? (

Failed to retrieve custom domain configuration. Please try again later or{' '} contact support .

) : status === '0_no_hostname_configured' ? ( ) : ( {isSuccess ? (
{(status === '1_not_started' || status === '2_initiated' || status === '3_challenge_verified') && } {customDomainData.status === '4_origin_setup_completed' && ( )} {customDomainData.status === '5_services_reconfigured' && ( )}
) : ( )}
)}
) } interface CustomDomainConfigFallthroughProps { fetchStatus: 'error' | 'success' | 'pending' data: CustomDomainsData | undefined } function CustomDomainConfigFallthrough({ fetchStatus, data }: CustomDomainConfigFallthroughProps) { console.error(`Failing to display UI for custom domains: Fetch status: ${fetchStatus} Custom domain status: ${data?.status}`) return null }